Maintainer Release Guide
Step-by-step SOP for version tagging, artifact compilation, checksumming, and GitHub releases.
Dual Version Identifiers#
- Release Title: SemVer (e.g.
SolarFlare v1.3.0). - Compatibility Build Version:
v<YYYY>.<MDD>.<rev>-solarflare(e.g.v2026.909.1-solarflare).
Release artifacts#
Caution
GitHub Actions must not build release binaries. Artifacts are produced locally from a clean, tagged tree. Raw GitHub executables cannot retain Linux capabilities — instruct users to run setcap after download for KMS capture.
| Asset | Contents | Consumer |
|---|---|---|
| sunshine-x86_64 | Stripped ELF executable (compatibility name) | Manual binary swap |
| solarflare-linux-x86_64.tar.gz | Executable, runtime layout, Web UI assets, icon, license | Web UI in-app updater |
| SHA256SUMS | Checksums for both files above | Updater integrity verification |
Prerequisites and prepare#
Requires a clean tree, master synced with origin/master, git identity, gh authenticated to vindeckyy/Solar-Flare, a Linux x86-64 toolchain, and Web UI + tests verified locally. Before tagging: sync branch, choose next display + build versions, verify quality gates, confirm git status is empty, and draft release-notes.md with exact asset filenames plus the update-only CAUTION callout.
git checkout master
git pull origin master
git status --short
cmake --build cmake-build-release-prep --target test_sunshine -j2
./cmake-build-release-prep/tests/test_sunshine --gtest_brief=1Release Workflow Commands#
Use --dry-run first. Push only after local verification. The script updates CMakeLists.txt, pyproject.toml, uv.lock, README metadata, prepends the website changelog entry, commits, tags, and optionally pushes.
./scripts/release.sh 2026.909.1 1.3.0 --dry-runBuild, verify, and publish#
Build from the final tagged commit with embedded identity (BRANCH, BUILD_VERSION, COMMIT), strip the executable into release-artifacts/, assemble the tarball mirroring the previous layout, generate SHA256SUMS, verify with sha256sum -c, push commit + tag only after verification, then gh release create with --verify-tag --latest --title --notes-file. Post-publish: confirm non-draft with all three assets, download into a clean directory, re-verify checksums, smoke-test --version, and optionally trigger in-app update on staging.
export BRANCH=master BUILD_VERSION=2026.909.1 COMMIT=$(git rev-parse HEAD)
cmake -S . -B cmake-build-release -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF
cmake --build cmake-build-release --target sunshine web-ui -j2
mkdir -p release-artifacts
strip -o release-artifacts/sunshine-x86_64 cmake-build-release/sunshine
cd release-artifacts
sha256sum sunshine-x86_64 solarflare-linux-x86_64.tar.gz > SHA256SUMS
sha256sum -c SHA256SUMSRollback, hotfix, and notes template#
Prefer forward fixes: land the fix on master with tests, cut a new build version (never reuse a published one), publish new assets. Do not force-push tags users may have downloaded. Release notes must include the update-only CAUTION, an Assets table, setcap recovery snippet, Changes list, and a full compare link.