Skip to content

Commit b6bf225

Browse files
Add release checklists (#106)
1 parent 8bc01e2 commit b6bf225

File tree

3 files changed

+185
-0
lines changed

3 files changed

+185
-0
lines changed

processes/crystal-CHANGELOG.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
- **(breaking-change)**
2+
- **(deprecate)**
3+
- Fixed ... ([#PR], thanks @author)
4+
- Fixed docs ...
5+
- Add ...
6+
- **(performance)**
7+
- Add docs ...
8+
- Refactor ...
9+
- Fix specs ...
10+
11+
## Language changes
12+
13+
### Macros
14+
15+
## Standard library
16+
17+
### Macros
18+
19+
### Numeric
20+
<!-- Int, Float, BigInt, ... -->
21+
22+
### Text
23+
<!-- String, Regex, ... -->
24+
25+
### Collections
26+
<!-- Array, Hash, Enumerable, ... -->
27+
28+
### Serialization
29+
<!-- YAML, JSON, ... -->
30+
31+
### Time
32+
33+
### Files
34+
35+
### Networking
36+
<!-- HTTP, Sockets, SSL, IO -->
37+
38+
### Logging
39+
40+
### Crypto
41+
42+
### Concurrency
43+
44+
### System
45+
46+
### Runtime
47+
48+
### Spec
49+
50+
## Compiler
51+
<!-- CLI -->
52+
53+
### Language semantics
54+
<!-- Codegen issues affecting semantic -->
55+
56+
### Debugger
57+
58+
## Tools
59+
60+
### Formatter
61+
62+
### Doc generator
63+
64+
### Playground
65+
66+
## Others

processes/crystal-release.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Crystal release process checklist
2+
3+
1. Submit a Freeze/Release PR
4+
* It should contain the expected date of the release (~two weeks after the PR is issued).
5+
* It should be populated with updates to CHANGELOG.md and VERSION.
6+
2. Verify Maintenance CI in the parent commit of the changelog succeed
7+
* This mean either the commit was the one used for nightly build or,
8+
* A branch with `release/` prefix or `ci` word was pushed
9+
3. Check the artifacts pass the ecosystem test
10+
* Grab latest copy of https://github.com/crystal-lang/test-ecosystem
11+
* Override branches of projects if needed at ./scripts/10-clone-repos.sh
12+
* Set `./crystal-versions.env` with the URL of the artifacts and with the docker image
13+
* Use the different make targets described in the `./README`
14+
4. Merge the Changelog PR
15+
5. Tag & annotate the commit with the changelog using `<M.m.p>` pattern as {version} (as a pre-release directly in GH?)
16+
6. Wait for the build
17+
7. Smoke test with test-ecosystem
18+
8. Push changes to OBS for building linux packages
19+
1. Checkout https://github.com/crystal-lang/distribution-scripts
20+
2. Grab the urls (or local path) of the artifacts from circle-ci
21+
* `crystal-*-linux-x86_64.tar.gz`
22+
* `crystal-*-linux-i686.tar.gz`
23+
* `crystal-*-docs.tar.gz`
24+
3. Follow [./packages/README.md](../packages/README.md) in distribution-scripts
25+
1. The following steps should run in an openSUSE distribution with osc installed (https://github.com/crystal-lang/osc-docker)
26+
1. Configure build.opensuse.org credentials in ~/.oscrc
27+
1. `osc branchco devel:languages:crystal crystal`
28+
1. `cd home\:$OBS_USERNAME\:branches\:devel\:languages\:crystal/crystal`
29+
1. Copy the updated build artifact tarballs in place
30+
1. Update version in package specifications:
31+
```bash
32+
VERSION=1.1.0 # or whatever version you’re releasing
33+
sed -i -e "s/^Version: .*/Version: ${VERSION}-1/" *.dsc
34+
sed -i -e "s/^Version: .*/Version: ${VERSION}/" *.spec
35+
```
36+
1. Verify the changes with `osc diff`
37+
1. Update changelog: `osc vc -m “Update devel:languages:crystal to $VERSION`
38+
1. Commit changes: `osc commit -m “Update devel:languages:crystal to $VERSION`
39+
1. Now OBS builds the packages. It’s best to continue in the browser now: https://build.opensuse.org/project/show/home:$OBS_USER:branches:devel:langauges:crystal/crystal
40+
1. Wait for all jobs to finish and when everything is green, create a submit request against the original package (“Submit package” link in the menu bar on the package in your branch)
41+
9. Build and publish docker images
42+
1. Checkout https://github.com/crystal-lang/crystal-dist
43+
2. `$ ./dist.sh build-docker {version}`
44+
3. `$ ./dist.sh push-docker {version}`
45+
4. Manually push the `crystallang/crystal:{version}` image as `crystallang/crystal:latest`
46+
* `$ docker tag crystallang/crystal:{version} crystallang/crystal:latest`
47+
* `$ docker push crystallang/crystal:latest`
48+
5. Manually build and push alpine images
49+
* Go to distribution-scripts/docker
50+
* `$ make clean alpine DOCKER_REPOSITORY=crystallang/crystal DOCKER_TAG={version} CRYSTAL_VERSION={version} CRYSTAL_TARGZ=~/Downloads/crystal-{version}-1-linux-x86_64.tar.gz`
51+
* `$ docker push crystallang/crystal:{version}-alpine`
52+
* `$ docker push crystallang/crystal:{version}-alpine-build`
53+
* `$ docker tag crystallang/crystal:{version}-alpine crystallang/crystal:latest-alpine`
54+
* `$ docker push crystallang/crystal:latest-alpine`
55+
10. Publish docs
56+
1. Have s3cmd installed and AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY env variables defined
57+
1. `$ source /Volumes/Secured/secure/manas-aws-key-crystal-dist.sh`
58+
1. Checkout https://github.com/crystal-lang/crystal-dist
59+
1. Download `*-docs.tar.gz` from circle-ci artifacts
60+
1. `$ ./dist.sh push-docs {version} path/to/crystal-{version}-docs.tar.gz`
61+
1. `$ ./dist.sh update-docs-versions {crystal_working_copy}`
62+
1. `$ ./dist.sh redirect-docs {version}`
63+
11. Publish snap package
64+
1. You need to logged in via `$ snapcraft login`
65+
1. Recent tagged release is published directly to edge channel. The CI logs the snap revision number. Otherwise the .snap file is in the artifacts.
66+
1. Check the current status to find the revision of the tagged release otherwise:
67+
1. `$ snapcraft status crystal`
68+
1. `$ snapcraft release crystal <revision-number> beta`
69+
1. `$ snapcraft release crystal <revision-number> stable`
70+
12. Build Github release
71+
1. Copy the changelog as release notes in the tag (if not done before)
72+
1. Upload the signed binaries, *.tar.gz and *.pkg artifacts
73+
1. Signed binaries are in bintray/build/signed
74+
1. Publish the Github release
75+
13. Submit a PR to update the homebrew formula in https://github.com/Homebrew/homebrew-core/blob/master/Formula/crystal.rb .
76+
1. Update the previous and new version (with their respective hashes).
77+
1. Try locally `$ brew install --build-from-source <source of formula>`
78+
1. Create PR
79+
14. Update crystal-website
80+
1. Post a release notes in the website
81+
1. Update information of `latest_release` in https://github.com/crystal-lang/crystal-website/blob/master/_config.yml
82+
1. Update link to blog in https://github.com/crystal-lang/crystal-website/blob/5905e5644fcb4863976d0ca69856edbd74091370/index.html#L26
83+
15. Post announcement in https://forum.crystal-lang.org/c/news/official
84+
16. Tweet about the release
85+
17. Post in Reddit
86+
18. Update crystal repo to use released version
87+
* Edit PREVIOUS_CRYSTAL_BASE_URL in `.circleci/config.yml`
88+
* Edit DOCKER_TEST_PREFIX in `bin/ci`
89+
* Edit `prepare_build` on_osx download package and folder
90+
* Edit ` .github/workflows/win.yml` to point to docker image
91+
* Edit `shell.nix` `latestCrystalBinary` using `nix-prefetch-url --unpack <url>`
92+
19. Increment VERSION file to the next minor and -dev suffix
93+
20. Perform uncomment/todos left in the repo
94+
21. Update carc.in / play.crystal-lang.org (by jhass)
95+
Note: This is done after Arch repos are updated
96+
97+
## Observable Helper
98+
99+
Build changelog lines
100+
https://observablehq.com/d/035be530d554ccdf
101+
102+
Check commit history
103+
https://observablehq.com/d/4937e5db876fe1d4

processes/shards-release.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Shards release process checklist
2+
3+
1. Submit a Release PR
4+
* Should contain updates to CHANGELOG, VERSION, shard.yml
5+
* Should contain updates to the man files with the release date
6+
`$ make clean docs SOURCE_DATE_EPOCH=$(gdate -d "YYYY-MM-DD" +"%s")` if it’s done ahead of time
7+
2. Merge the Changelog PR
8+
3. Tag & annotate the commit with the changelog using `v<M.m.p>` pattern as {version}
9+
* `git tag -s vX.X.X`
10+
* `git push --tags`
11+
4. Build Github release
12+
* Copy the changelog as release notes in the tag
13+
5. Update distribution-scripts
14+
* [linux/Makefile](../linux/Makefile)
15+
* [omnibus/config/software/shards.rb](../omnibus/config/software/shards.rb)
16+
6. Submit a PR to update the homebrew formula in https://github.com/Homebrew/homebrew-core/blob/master/Formula/crystal.rb . Or do it on Crystal release.

0 commit comments

Comments
 (0)