End of life — September 2026. SolarFlare is no longer maintained and this site is kept for reference only. No further releases, updates, bug fixes, or security patches will be published. Users are encouraged to migrate to Slipstream, the successor project, which remains actively maintained.

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.