This repository coordinates tested releases across
synctv-org/synctv and
synctv-org/synctv-app.
Each component repository owns its build, signing, package publication, and GitHub Release. This repository owns release intent, cross-repository orchestration, immutable artifact resolution, and the final suite Release.
flowchart LR
P["Release manifest commit"] --> V["Validate exact commits and versions"]
V --> M["Push to main"]
M --> B["Tag server repository"]
M --> A["Tag app repository"]
B --> BA["Server image, chart, and Release"]
A --> AA["Signed app artifacts and Release"]
BA --> L["Resolve image digest and write release lock"]
AA --> L
L --> R["Publish suite Release"]
R --> N["Add app downloads to server Release"]
A release is authorized by adding exactly one immutable manifest under
releases/ and merging it to main. The orchestrator creates component tags,
waits for their existing workflows, and publishes release-lock.yml as the
suite Release record. It performs no Rust or Flutter compilation.
- Copy
examples/release.ymltoreleases/YYYY.MM.PATCH.yml. - Set each component to a full 40-character commit SHA.
- Set versions and tags to the metadata already committed at those SHAs.
- Confirm the server commit's
synctv-web-ui/web-ui.production.tomlpins the same App repository and commit as the manifest. Its productionrevisionmust equal that full commit SHA. - Commit the manifest directly to
mainand wait forValidate release manifests. - Approve the
releaseEnvironment when approval is configured.
Run the same validation locally:
make validateThe workflow produces three public records:
- Server Release with app quick downloads, deployment documentation, server changes, container image digest, and Helm chart.
- App Release and its platform artifacts.
- Suite Release containing the resolved lock and links to both components.
Create a GitHub App installed on synctv, synctv-app, and this repository.
Grant it Contents: Read and write and Actions: Read. Configure these
repository secrets:
| Secret | Purpose |
|---|---|
RELEASE_APP_ID |
GitHub App ID |
RELEASE_APP_PRIVATE_KEY |
GitHub App private key |
RELEASE_TOKEN |
Bootstrap PAT fallback with repository and workflow access |
The workflow prefers the GitHub App installation token. RELEASE_TOKEN
supports initial setup and release testing before the GitHub App credentials
are configured. Store it as a repository secret and rotate or remove it after
the GitHub App is active.
Create a release GitHub Environment for optional approval and restrict
deployment to main. Component signing and store credentials remain in their
own repositories.
See the runbook for retries and recovery, and ADR-0001 for the production patterns behind this design.