Skip to content

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:

  1. make fmt -- code formatting
  2. make lint -- static analysis
  3. make test -- unit and integration tests
  4. cd web/console && npx tsc --noEmit -- console type-check
  5. make 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.md or 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.md
  • LICENSE
  • CHANGELOG.md
  • KNOWN_ISSUES.md
  • SUPPORT.md
  • PRIVACY.md (when distributing native/mobile binaries)

Post-release

  1. Verify published Docker images pull and start correctly:
./scripts/install-compose.sh --version vX.Y.Z
make smoke-test
  1. Confirm release assets are attached to the GitHub Release.
  2. Verify the Platform Support reference reflects the new version.
  3. Update documentation for any user-visible changes shipped in the release.
  4. Confirm KNOWN_ISSUES.md is current -- close resolved items, add new ones.