Releasing

This chapter describes how to release new versions of RCL. It is intended primarily as a playbook/checklist for the author. Ideally, more of these steps would be automated over time.

Preparation

Ensure the changelog is up to date

Check the Git log to confirm that all user-facing changes are documented in the changelog. Add the release date.

Bump the version

  • Update the version in Cargo.rcl, run rcl build to update generated files.
  • Run cargo check --all to update lockfiles.
  • Update version references in docs/.
  • Double-check the diff against a previous version bump commit.
  • Commit the version bump.

Verification

We do this after bumping the version to ensure that we verify the final state of the repository. If anything fails, fix it, and redo the version bump.

Ensure generated files are up to date

rcl build
tools/generate_keywords.py

Verify that everything builds

This is verified on CI by Garnix, so pushing to GitHub and waiting for Garnix works, but it can also be checked locally. nix build and nix flake check are insufficient; as a workaround to Nix issue 7165, we can build all flake attributes like so:

nix flake show --json | rcl rq '{
  for k in ["packages", "checks", "devShells"]:
  for p in input[k].x86_64-linux.keys():
  f".#{k}.x86_64-linux.{p}"
}' | xargs nix build --no-link

Ensure fuzzers are converged

Run every fuzzer until it no longer discovers new code paths. This should already have been done during feature development, but it’s good to confirm:

tools/fuzz_all.py

Publishing

Repository

  • Create a signed, annotated, Git tag.
  • Push to GitHub and Codeberg.

Documentation and website

mkdocs gh-deploy --remote-name «webserver»
nix build .#website
rsync -av $(nix path-info .#website)/ «webserver»:/var/www/rcl-lang.org/

Pypi

nix build .#pyrcl-wheel
twine upload $(nix path-info .#pyrcl-wheel)/*

Extensions

For releases that have impact on the grammars or extensions:

  • Update external repositories: tools/update_repos.py.
  • Push to GitHub and Codeberg.
  • Make a pull request to update zed-industries/extensions.

Arch User Repository

  • Bump pkgver in the PGKBUILD.
  • Update shasums: makepkg --geninteg >> PKGBUILD, edit file.
  • Update srcinfo: makepkg --printsrcinfo > .SRCINFO.
  • Confirm that the package builds: makepkg --install.
  • Commit and push.