Releasing
Releases are cut from GitHub Actions; nothing needs to run locally.
Cutting a release
main only takes changes through pull requests, so a release is two of them.
- Open Actions → release → Run workflow on
main. - Leave Version empty to let git-cliff work out the next version from the Conventional Commits since the last tag. In 0.x, a
featbumps the minor version and anything else the patch version. Or type one, such as0.3.0or0.3.0-rc.1(anything with a-is published as a pre-release). - Run it with Dry run ticked first (the default). It builds and tests everything, then keeps the packages and release notes as a
release-dry-runartifact for a day, without pushing or publishing. - Run it again with Dry run unticked. It commits
chore(release): vX.Y.Z(the version inCargo.tomlandCargo.lock, andCHANGELOG.md) to arelease/vX.Y.Zbranch and opens a pull request. - Merge the pull request. That's the release: the push to
mainbuilds, smoke-tests, tags and publishes it. - Merge the second pull request,
chore(release): update the AUR and Nix packages for vX.Y.Z, which points the packages at the new tarball.
If Actions isn't allowed to create pull requests (Settings → Actions → General → Allow GitHub Actions to create and approve pull requests), the run's summary has a link to open each one instead. Pull requests opened by the workflow don't trigger CI; the release build runs the smoke tests after the merge anyway.
.github/workflows/release.yml:
| Job | Does |
|---|---|
| plan | From Actions: prepares the release pull request, or for a dry run, the version to build. On every push to main: releases the commit if Cargo.toml's version has no tag yet (a merged release pull request), and otherwise does nothing. |
| build | Runs build-release.yml on the release commit (below). |
| publish | Writes SHA256SUMS, records build provenance for every package, and creates the GitHub release, which tags the commit, with that version's section of the changelog. Then scripts/update-packages.sh points the AUR and Nix packages at the new tarball, in a pull request. Pre-releases leave the packages alone, and a dry run only prints the change. |
Because a new version in Cargo.toml is what triggers a release, change it only through the release pull request.
What gets built
build-release.yml is shared by releases and nightlies:
- Linux (x86_64):
cargo build --release, thenscripts/package-linux.shpacks the stripped binary and CEF runtime intoriptide-<version>-linux-x86_64.tar.gz, an AppImage andriptide_<version>_amd64.deb. The whole smoke test then runs against the unpacked tarball, the extracted AppImage, and the.debinstalled with apt (with its setuid sandbox), so a broken package never ships../task package,./task appimageand./task debbuild the same files locally.- The
.deb'sDepends:comes fromdpkg-shlibdeps, so it names the libraries of the distribution it's built on. CI builds on Ubuntu 24.04, which makes it suit Ubuntu 24.04+ and Debian 13+.
- The
- macOS and Windows (experimental):
scripts/package-experimental.shpacks the binary with the CEF framework (macOS,.tar.gz) or runtime files (Windows,.zip). Neither runs the browser yet: they need the app bundle and installer work in M10. If either fails to build, the release goes ahead without it.
Nightly builds
.github/workflows/nightly.yml runs at 07:00 UTC. If main changed since the last nightly, it builds it the same way and replaces the rolling nightly pre-release, with files named riptide-nightly-<date>-<commit>-…. Running it by hand builds even if nothing changed. It never becomes the "latest" release.
Verifying a download
Every published package has a SHA256SUMS entry and a signed build provenance attestation that ties it to the workflow run and commit that built it:
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify riptide-0.2.0-linux-x86_64.tar.gz --repo joshzcold/riptide
After a release
Packages:
- The AUR
PKGBUILD(packaging/aur/) and the Nix package (packaging/nix/package.nix, used by the rootflake.nix) are updated by the publish job's pull request. If that step fails, runscripts/update-packages.sh X.Y.Z riptide-X.Y.Z-linux-x86_64.tar.gzwith the released tarball and open a pull request with the result. - To check the Nix package, run
nix build .#riptide, thenBIN=result/bin/riptide scripts/smoke-test.sh.
In the browser:
In the browser, :changelog shows the changelog it was built with, and the first start after an update says so in the status bar (and opens it, as changelog_after_upgrade decides). The documentation site isn't tied to releases: it's rebuilt from main on every push.