Skip to content

Commit a46a4ca

Browse files
Update Crystal release process (#281)
1 parent 9d6e645 commit a46a4ca

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

processes/crystal-release.md

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ Add an issue `Crystal release X.Y.Z` in https://github.com/crystal-lang/distribu
6464
2. Configure build.opensuse.org credentials in environment variables:
6565
* `export OBS_USER=`
6666
* `export OBS_PASSWORD=`
67-
3. Update the `crystal` package: [`./obs-release.sh devel:languages:crystal crystal $VERSION`](../packages/obs-release.sh)
68-
* Uses the docker image `crystallang/osc` to run the CLI client for OBS.
69-
* The script creates a branch in you home project, updates the version and pushes it back to OBS.
70-
* You can also run the commands from that file manually and check build locally with
71-
* `osc build xUbuntu_20.04 x86_64`
72-
* `osc build Fedora_Rawhide x86_64`
67+
3. (minor) Update the `crystal` package: [`./obs-release.sh devel:languages:crystal crystal $VERSION`](../packages/obs-release.sh)
68+
* (minor) Uses the docker image `crystallang/osc` to run the CLI client for OBS.
69+
* (minor) The script creates a branch in you home project, updates the version and pushes it back to OBS.
70+
* (minor) You can also run the commands from that file manually and check build locally with
71+
* (minor) `osc build xUbuntu_20.04 x86_64`
72+
* (minor) `osc build Fedora_Rawhide x86_64`
7373
4. (minor) Create the `crystal${VERSION%.*}` package: [`./obs-new-minor.sh devel:languages:crystal crystal${VERSION%.*} $VERSION crystal${OLD_VERSION%.*}`](../packages/obs-new-minor.sh)
7474
4. (patch) Update the `crystal${VERSION%.*}` package: [`./obs-release.sh devel:languages:crystal crystal${VERSION%.*} $VERSION`](../packages/obs-release.sh)
7575
5. Now OBS builds the packages. It’s best to follow the build status in the browser:
@@ -83,15 +83,15 @@ Add an issue `Crystal release X.Y.Z` in https://github.com/crystal-lang/distribu
8383
* Now just assign the `latest` tags:
8484
* `./docker/apply-latest-tags.sh ${VERSION}`
8585
6. [ ] Publish snap package (you can use the docker image `snapcore/snapcraft` for running the following commands)
86+
1. `docker run --pull=always --rm -it snapcore/snapcraft`
8687
1. You need to logged in via `snapcraft login`
87-
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.
88-
1. Check the current status to find the revision of the tagged release otherwise:
89-
1. `snapcraft status crystal`
90-
1. `snapcraft release crystal <revision-number> beta`
91-
1. `snapcraft release crystal <revision-number> stable`
92-
7. [ ] Submit a PR to update the homebrew formula
93-
1. Run `brew bump-formula-pr crystal --version $VERSION`
94-
2. In case the new compiler version is incompatible with the current boot version, bump boot version.
88+
2. Recent tagged release is published directly to edge channel. The CI logs the snap revision number. Otherwise the .snap file is in the artifacts.
89+
3. Check the current status to find the revision of the tagged release otherwise:
90+
4. `snapcraft status crystal`
91+
5. `snapcraft release crystal <revision-number> beta`
92+
6. `snapcraft release crystal <revision-number> stable`
93+
7. [ ] Check PR for homebrew: https://github.com/Homebrew/homebrew-core/pulls?q=is%3Apr+crystal+sort%3Aupdated-desc
94+
* It should've been automatically created
9595

9696
### Publish documentation for the release
9797

@@ -106,17 +106,24 @@ Add an issue `Crystal release X.Y.Z` in https://github.com/crystal-lang/distribu
106106
### Release announcements
107107
1. [ ] Publish release notes on the website
108108
2. [ ] Post announcement in https://forum.crystal-lang.org/c/news/official
109-
3. [ ] Announce on social media accounts (via Buffer; credentials are in Passbolt)
109+
3. [ ] Announce on social media accounts (via Buffer; credentials are in Passbolt) and pin release posts
110110
5. [ ] Update https://github.com/crystal-lang/crystal-book/blob/master/crystal-version.txt
111111
6. [ ] (minor) Post the release in https://opencollective.com/crystal-lang
112112

113113
## Post-release
114-
1. [ ] Update crystal `master` branch to use released version: [`crystal:scripts/release-update.sh`](https://github.com/crystal-lang/crystal/blob/master/scripts/release-update.sh)
114+
1. [ ] Update crystal `master` branch to use released version: [`crystal:scripts/release-update.sh ${VERSION}`](https://github.com/crystal-lang/crystal/blob/master/scripts/release-update.sh)
115115
* Edit PREVIOUS_CRYSTAL_BASE_URL in `.circleci/config.yml`
116116
* Edit DOCKER_TEST_PREFIX in `bin/ci`
117117
* Edit `prepare_build` on_osx download package and folder
118118
* Edit ` .github/workflows/*.yml` to point to docker image
119119
* Edit `shell.nix` `latestCrystalBinary` using `nix-prefetch-url --unpack <url>`
120120
2. [ ] (minor) Increment VERSION file to the next minor and -dev suffix
121121
3. [ ] (minor) Perform uncomment/todos left in the repo
122-
4. [ ] Update default base version in test-ecosystem: [`test-ecosystem:scripts/release-update.sh`](https://github.com/crystal-lang/test-ecosystem/blob/master/scripts/release-update.sh)
122+
4. [ ] Update default base version in test-ecosystem: [`test-ecosystem:scripts/release-update.sh ${VERSION}`](https://github.com/crystal-lang/test-ecosystem/blob/master/scripts/release-update.sh)
123+
5. [ ] Merge `release/${VERSION%.*}` branch into `master` (if the two have diverged)
124+
- This needs to be a *merge commit*. Those are disabled in the GitHub UI.
125+
- `git switch master && git pull && git merge release/${VERSION%.*}; git checkout master src/VERSION && git add src/VERSION && git commit`
126+
- Double check merge commit history is as expected
127+
- `git push` (GitHub branch protection rules normally prevent direct pushes to
128+
`master`. This needs to be deactivated for this purpose, which can be on a
129+
per-user basis.)

0 commit comments

Comments
 (0)