Releasing GlowBack
GlowBack publishes GitHub Releases from a real CI artifact instead of rebuilding at release time.
What the build pipeline produces
The Rust build pipeline (.github/workflows/rust.yml) uploads a release-ready
artifact named glowback-engine-linux-x86_64 whenever an eligible main branch
build succeeds from either:
- a normal
pushtomain, or - a manual
workflow_dispatchrun ofrust.ymlonmain
Pull request builds are never eligible release sources.
That artifact contains:
glowback-engine-linux-x86_64.tar.gzglowback-engine-linux-x86_64.tar.gz.sha256glowback-engine-linux-x86_64.metadata.json
The tarball includes the gb-engine-service release binary plus the license,
README, and build metadata.
Manual release workflow
Use Actions → Manual Release (.github/workflows/release.yml) to publish a
versioned GitHub Release.
Inputs
tag(required) — the release tag to create, e.g.v0.2.0release_name(optional) — custom release title; defaults totagrun_id(optional) — exactrust.ymlrun ID to publish fromartifact_name(optional) — artifact to attach; defaults toglowback-engine-linux-x86_64prerelease(optional) — mark the release as a prereleasenotes(optional) — custom release notes; if omitted, the workflow uses GitHub-generated notes anchored to the previous published release tag
Source artifact selection
If run_id is blank, the workflow:
- snapshots the current upstream
mainHEAD commit when the release is dispatched, - finds the matching upstream
rust.ymlrun for that exact commit, - prefers the
pushbuild for that commit (falling back to a manualworkflow_dispatchbuild only when needed), and - waits up to 30 minutes for that run to finish successfully and expose the selected artifact.
The workflow does not fall back to an older successful run from a different commit, so it cannot silently publish stale assets.
If run_id is provided, the workflow uses that exact build only if it:
- belongs to the upstream repository running the release,
- is a
rust.ymlrun, - ran on
main, - came from
pushorworkflow_dispatch, and - still has the requested artifact available
The release workflow never rebuilds the binary. It reuses the artifact that CI already produced.
Release-note generation
If notes is blank, the workflow resolves the previous published release from
GitHub, sorts published releases by version, and sends the previous tag to the
releases/generate-notes API as previous_tag_name.
In practice:
- each release note body covers the delta from the previous published release,
- release notes do not re-list the full repository history once the project has an established release baseline, and
- the first published release has no previous tag, so its generated notes cover the history up to that release.
Recommended release process
- Merge the changes you want onto
main. - Run Manual Release with a new semver tag such as
v0.2.0. - Leave
run_idblank to release from the exactmaincommit that was current when you started the workflow. If the Rust pipeline for that commit is still running, the release job waits for it automatically. - Use
run_idonly when you intentionally want to pin the release to a known successful upstreammainbuild. - After the workflow completes, verify the assets and notes on the GitHub Releases page.
Operational notes
- Releases are tied to the commit SHA from the selected CI run.
- Existing release tags are rejected to avoid accidental overwrites.
- Build artifacts are retained for 30 days by GitHub Actions.
- If the artifact you want has expired, rerun
rust.ymlonmainand then cut the release from the fresh run. - If the current
mainbuild fails, the release workflow fails too; fix the build first rather than releasing from a PR artifact or an older commit.