Files
bsky-social-app/docs/release-model.md
T
2026-09-03 17:26:36 -04:00

66 lines
2.5 KiB
Markdown

# Release model
Each app release gets one document that keeps its version, build information, and public changelog together in one place.
## Identity
The workflow accepts one version in strict `x.y.z` format and derives all other identifiers from it:
| Resource | Format |
| --- | --- |
| Cumulative branch | `release-x.y.z` |
| Immutable native tag | `x.y.z` |
| Release document | `RELEASE-x.y.z.md` |
| GitHub Release name | `Release x.y.z` |
| Successful OTA tag | `ota-x.y.z-N` |
Callers must not supply these derived identifiers independently.
## Prepared state
The preparation workflow creates the document before freezing the native candidate. At this stage, only `releaseVersion` is required:
```md
---
releaseVersion: 1.131.1
---
# Release 1.131.1
<!-- public-changelog:start -->
## Initial release
- Added something
<!-- public-changelog:end -->
```
## Final state
After both native builds succeed, the workflow records the frozen source and artifact-derived build numbers. A finalized document requires every field:
```yaml
releaseVersion: 1.131.1
sourceTag: 1.131.1
sourceSha: 0123456789abcdef0123456789abcdef01234567
iosBuildNumber: 1662
androidVersionCode: 1110
```
`sourceTag` must equal `releaseVersion`, `sourceSha` must be a full Git object ID, and both build numbers must be positive integers.
Each successful OTA adds exactly one contiguous section (`OTA 1`, `OTA 2`, and so on) inside the public changelog delimiters. GitHub Release text is extracted only from those delimiters; operational frontmatter is never published.
## Command line usage
The release model can be exercised locally with `node scripts/release/cli.mjs`. Run it without arguments to see the available commands for creating, validating, finalizing, and updating a release document.
## Manual preview
The **Prepare Cactus Release** workflow accepts a release version and optional source ref. It validates the checked-out package and Expo versions, generates a provisional changelog from commit titles, uploads the prepared release document as an artifact, and summarizes every derived identifier. It has read-only repository permissions and does not create a branch, tag, commit, or GitHub Release.
## Build provenance
Native build artifacts are retained with metadata recording their exact source SHA, package version, artifact-derived build number, filename, SHA-256 checksum, and submission state. Store submission can be disabled so production-profile artifacts can be inspected without publishing them.