Rey uses GitHub Actions for continuous integration and cargo-dist for tagged
binary releases. CI verifies the repository through the same Nix and just
interfaces used locally. Release automation packages the rey binary but does
not replace or weaken that quality gate.
.github/workflows/ci.yml runs for pull requests, pushes to main, and manual
dispatches. Its quality job enters devShells.ci, runs just check, and then
runs just test. A separate job builds the Nix rey derivation. Workflow
permissions default to read-only repository contents.
The Cargo cache is an optimization only. Nix, Cargo, pnpm, Nextest, and the checked-in lock files remain authoritative when the cache is absent or stale.
dist-workspace.toml is the authored cargo-dist configuration and
.github/workflows/release.yml is generated from it. The authored
.github/build-setup.yml fragment installs the root package's pnpm version,
installs the frozen dependency graph, and runs the Turbo UI build before every
platform-specific dist build; cargo-dist incorporates that fragment into its
generated workflow. No checked-in frontend bundle participates in a release.
Pull requests run the release plan but do not build or publish release
artifacts. just check rejects a generated workflow that has drifted from its
configuration and uses Actionlint to verify workflow structure and GitHub
expressions. ShellCheck is retained for the authored CI workflow and disabled
for the generated release pass because cargo-dist owns those shell fragments.
The current plan distributes only the rey application and produces:
- native archives for Apple Silicon macOS, Intel macOS, x86-64 Linux, and x86-64 Windows;
- SHA-256 checksums and a combined checksum manifest;
- POSIX shell and PowerShell installers; and
- a source archive.
The release workflow uses the repository-scoped GITHUB_TOKEN and requires
write access only to GitHub Release contents. It does not publish Cargo crates,
packages, a Homebrew tap, or a documentation site.
The release tag is the explicit publication boundary. Before tagging:
-
set
[workspace.package].versioninCargo.tomlto the intended semantic version and updateCargo.lockif Cargo changes it; -
run
just check,just test, andjust dist-check; -
commit the version and release-bearing changes; and
-
create and push an annotated
v<version>tag, for example:git tag -a v0.1.0 -m 'Release v0.1.0' git push origin main git push origin v0.1.0
Cargo-dist rejects a tag whose version does not match the distributable
package. A matching pushed tag builds the UI before compiling the Rust binary
for every configured target, creates the GitHub Release, uploads the archives,
installers, checksums, source archive, and final distribution manifest, then
announces the release. Prerelease semantic versions such as v0.2.0-rc.1
become GitHub prereleases.
Do not create or push a release tag merely to test the workflow. Pull-request
planning and just dist-check are the non-publishing verification surfaces.
Update the Nix pin through flake.lock/nixpkgs and
cargo-dist-version in dist-workspace.toml intentionally. Then regenerate
the release workflow with:
dist generateReview the generated action and target changes, then run just dist-check and
the normal repository checks.