Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release Crystal 1.8.2 #245

Closed
24 of 25 tasks
straight-shoota opened this issue May 5, 2023 · 4 comments
Closed
24 of 25 tasks

Release Crystal 1.8.2 #245

straight-shoota opened this issue May 5, 2023 · 4 comments
Labels

Comments

@straight-shoota
Copy link
Member

straight-shoota commented May 5, 2023

Release preparation

  1. Backport bugfixes to release branch: Backport bugfixes to release/1.8 for release 1.8.2 crystal#13435
  2. Prepare the changelog entry: crystal:scripts/github-changelog.cr
  3. Start preparing release notes
  4. Publish release PR draft (Add Changelog for 1.8.2 crystal#13445)
    • It should be populated with updates to CHANGELOG.md and VERSION.
  5. Ensure that test-ecosystem functions and succeeeds on master

Release process

Source release

  1. Finalize the release PR
    • Make sure all changes are mentioned in the changelog
    • Check release date
    • Un-draft the PR
  2. Verify Maintenance CI workflow succeeds on the HEAD of the release branch
  3. Smoke test with test-ecosystem
  4. Merge the release PR
  5. Make the release and publish it on GitHub: scripts/make-crystal-release.sh (run from crystallang/crystal@master work tree). This performs these steps:
    1. Tag & annotate the commit with the changelog using <M.m.p> pattern as version
    • git tag -s -a -m $VERSION $VERSION
    • git push --tags
    1. Publish Github release (https://github.com/crystal-lang/crystal/releases/new)
      • Copy the changelog section as description
      • Binaries are added later
  6. Close milestone (https://github.com/crystal-lang/crystal/milestones)
  7. Wait for the release build in circle CI (https://app.circleci.com/pipelines/github/crystal-lang/crystal)

Binary releases

  1. Publish build artifacts from CircleCI and GitHub Actions to GitHub release
    • Upload build artifacts from CircleCI: scripts/publish-crystal-packages-on-github.sh
      • crystal-*-darwin-*.tar.gz
      • crystal-*-linux-*.tar.gz
      • crystal-*.pkg
      • crystal-*-docs.tar.gz
    • Upload build artifacts from GHA (Windows):
      • crystal.zip -> crystal-$VERSION-windows-x86_64-msvc-unsupported.zip
  2. Push changes to OBS for building linux packages
    1. Checkout https://github.com/crystal-lang/distribution-scripts and go to ./packages
    2. Configure build.opensuse.org credentials in environment variables:
      • export OBS_USER=
      • export OBS_PASSWORD=
    3. Update the crystal package: ./obs-release.sh devel:languages:crystal crystal $VERSION
      • Uses the docker image crystallang/osc to run the CLI client for OBS.
      • The script creates a branch in you home project, updates the version and pushes it back to OBS.
      • You can also run the commands from that file manually and check build locally with
        • osc build xUbuntu_20.04 x86_64
        • osc build Fedora_Rawhide x86_64
    4. Update the crystal${VERSION%.*} package: ./obs-release.sh devel:languages:crystal crystal${VERSION%.*} $VERSION
    5. Now OBS builds the packages. It’s best to follow the build status in the browser:
      1. open https://build.opensuse.org/project/show/home:$OBS_USER:branches:devel:langauges:crystal/crystal
      2. Wait for all package build jobs to finish and succeed
    6. When everything is green, create a submit request against the original packages (Submit package link in the menu bar on the package in your branch)
    7. Verify package installation
      • OBS_PROJECT=devel:languages:crystal bats test
  3. Tag latest docker images
    • Versioned docker images have been pushed to dockerhub.
    • Now just assign the latest tags:
    • ./docker/apply-latest-tags.sh ${VERSION}
  4. Publish snap package
    1. You need to logged in via $ snapcraft login
    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.
    3. Check the current status to find the revision of the tagged release otherwise:
    4. snapcraft status crystal
    5. snapcraft release crystal <revision-number> beta
    6. snapcraft release crystal <revision-number> stable
  5. Submit a PR to update the homebrew formula in https://github.com/Homebrew/homebrew-core/blob/master/Formula/crystal.rb .
    1. Update the previous and new version (with their respective hashes).
    2. Try locally brew install --build-from-source <source of formula>
    3. Create PR

Publish documentation for the release

  1. Publish API docs
    1. Have AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY env variables defined
    2. Run make -C docs publish_docs CRYSTAL_VERSION=${VERSION} to publish docs to api/${VERSION}
    3. Run make -C docs dist-redirect_latest CRYSTAL_VERSION=${VERSION} to apply redirect from api/latest to api/${VERSION}

Release announcements

  1. Publish release notes on the website
  2. Post announcement in https://forum.crystal-lang.org/c/news/official
  3. Tweet about the release (and pin it)
  4. Post in Reddit
  5. Update https://github.com/crystal-lang/crystal-book/blob/master/crystal-version.txt

Post-release

  1. Update crystal master branch to use released version: crystal:scripts/release-update.sh (Update previous Crystal release - 1.8.2 crystal#13450)
    • Edit PREVIOUS_CRYSTAL_BASE_URL in .circleci/config.yml
    • Edit DOCKER_TEST_PREFIX in bin/ci
    • Edit prepare_build on_osx download package and folder
    • Edit .github/workflows/*.yml to point to docker image
    • Edit shell.nix latestCrystalBinary using nix-prefetch-url --unpack <url>
  2. Update default base version in test-ecosystem: test-ecosystem:scripts/release-update.sh (Update previous Crystal release - 1.8.2 test-ecosystem#43)
@HertzDevil
Copy link

#13369 and #13412 have the highest priority because they could crash things, same for #13319 because one should assume LLVM may trigger undefined behavior if it progresses after an assertion failure. #13387 is also good because we did a similar fix in 1.8.1 already.

IMO the others can wait.

@HertzDevil
Copy link

HertzDevil commented May 6, 2023

Actually I would like crystal-lang/crystal#13406 as well because, depending on the length of the subject string and the matches, there could be a performance regression by up to 2~3 orders of magnitude in 1.8.0 and 1.8.1.

@straight-shoota
Copy link
Member Author

Yeah, that's a good one. Not technically a bug fix, but it's fixing performance (at least for some use cases). It seems straightforward enough that we can exclude any negative side effects with a very high probability.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants