Release Process
Tagging
Coordinated LabTether releases use strict semantic version tags such as
v1.6.0. They are deliberately split into two resumable stages; --stage is
required and there is no all-at-once mode.
First validate, tag, and push the prerequisites:
./scripts/release-all.sh v1.6.0 --stage prerequisites --dry-run
./scripts/release-all.sh v1.6.0 --stage prerequisites --push
This stage covers protocol, the Go agent, the macOS and Windows agents, and the CLI. It exits without tagging Hub. A rerun reuses an exact prerequisite tag only when its local and remote commit targets agree.
Native signing, notarization, and cross-host verification happen after the prerequisite tags are published and may take time. Complete that separately authorized work, then publish only the verified exact-version distributables. Signing material must remain local and must never be uploaded.
Once every required public release asset is available, validate and release Hub:
./scripts/release-all.sh v1.6.0 --stage hub --dry-run
./scripts/release-all.sh v1.6.0 --stage hub --push
The Hub stage verifies the exact prerequisite tags and calls Hub's real agent-manifest generator once. It does not poll: missing, mismatched, unsigned, or invalid assets fail the gate and leave Hub untagged. iOS and the website release independently.
Before tagging, complete the full Pre-Release Checklist.
CI validation
CI runs the following checks before a release is publishable:
make fmt-- code formattingmake lint-- static analysismake test-- unit and integration testscd web/console && npx tsc --noEmit-- console type-checkmake smoke-test-- end-to-end smoke test against a running stack
All five gates must pass. A desktop smoke test is also required when desktop workflows are affected:
LABTETHER_DESKTOP_SMOKE_TARGET=<asset-id> make desktop-smoke-test
Artifact publishing
Release artifacts include:
- Docker images -- hub and supporting services, tagged with the release version
- Go agent binaries -- Linux amd64/arm64 and Windows amd64/arm64 binaries, each with a checksum, signed metadata, and an Ed25519 signature
- Native agent packages -- the signed macOS universal archive and Windows x64 archive, each with its published checksum
- Release notes --
CHANGELOG.mdor GitHub Release body
FreeBSD is compile-checked in CI but is not a published release artifact. Hub publication is blocked until its manifest generator verifies the exact public Go, macOS, and Windows assets for the requested tag.
For public releases, the following must also be present in the repository root:
README.mdLICENSECHANGELOG.mdKNOWN_ISSUES.mdSUPPORT.mdPRIVACY.md(when distributing native/mobile binaries)
Post-release
- Verify published Docker images pull and start correctly:
./scripts/install-compose.sh --version vX.Y.Z
make smoke-test
- Confirm release assets are attached to the GitHub Release.
- Verify the Platform Support reference reflects the new version.
- Update documentation for any user-visible changes shipped in the release.
- Confirm
KNOWN_ISSUES.mdis current -- close resolved items, add new ones.