On this page
Project & ReleaseMaintainer

Maintainer Release Guide

Step-by-step SOP for version tagging, artifact compilation, checksumming, and GitHub releases.

8 min readUpdated September 2026

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.

AssetContentsConsumer
sunshine-x86_64Stripped ELF executable (compatibility name)Manual binary swap
solarflare-linux-x86_64.tar.gzExecutable, runtime layout, Web UI assets, icon, licenseWeb UI in-app updater
SHA256SUMSChecksums for both files aboveUpdater 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.

bash
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=1

Release 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.

bash
./scripts/release.sh 2026.909.1 1.3.0 --dry-run

Build, 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.

bash
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 SHA256SUMS

Rollback, 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.