|
| 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 |
0 commit comments