Files
edgeever/docs/release.md
T

137 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Release Guide
## Run a Release
Run from a clean `main` branch on macOS that matches `origin/main`:
For any Release that rebuilds desktop assets, first point the release shell at
the repository-external Ed25519 key used for the Windows update manifest:
```bash
export EDGE_EVER_WINDOWS_UPDATE_SIGNING_KEY=/absolute/path/to/windows-update-ed25519-private.pem
```
```bash
bun run release -- \
--bump patch \
--issue-title "Improve the release workflow" \
--label enhancement \
--change-en "Run required release checks in parallel." \
--change-zh "并行执行发布所需检查。" \
--change-locale "ja:必要なリリースチェックを並列実行します。" \
--change-commit "abcdef1"
```
Repeat `--change-en`, `--change-zh`, `--change-locale ja:`, and `--change-commit` as matching groups.
Japanese What's New is required because the App Store listing includes Japanese.
One change may cover multiple comma-separated commits:
```bash
--change-commit "abcdef1,1234567"
```
Every commit since the previous formal Release must be covered. Exclude a
non-user-facing commit with a concrete reason:
```bash
--ignore-commit "89abcde:test-only coverage"
```
The coverage audit runs before any local or GitHub mutation; its mapping is
stored in the tracking Issue. Use `--dry-run` to preview commit coverage, the
native rebuild plan, and Release notes.
### External Contributor Credits
- Changes completed by the maintainer need no attribution. Credit external
contributions with `@username` and the PR at the end of the corresponding item.
- Multiple contributions by the same person may use consolidated credits instead.
The closing list only includes people not credited individually; omit it when empty.
- GitHub generates its native Contributors avatar section from `@username`
mentions throughout the notes, including individual items.
Place individual credits in `--change-zh` / `--change-en`. For a consolidated
list, repeat `--contributor alice`; the script appends
`贡献者 / Contributors:@alice` after the bilingual notes. This option does not
infer contributors automatically. Resuming an existing Draft preserves its
notes; edit the Draft directly to adjust credits.
## EdgeEver-Specific Behavior
- Stable tags and Release titles use `vX.Y.Z`. Pass `--bump` explicitly and
follow SemVer; do not compress user-visible new capabilities or new platforms
into `patch` for release cadence (see `AGENTS.md`).
- The root version identifies the product Release. Native marketing versions
change only when that native runtime is rebuilt. Android `versionCode` and
iOS build numbers remain independent, monotonically increasing identifiers.
- A formal Release contains macOS arm64 and x64 DMGs, architecture-specific
updater ZIPs, an unsigned Windows x64 Preview installer with an independently
signed update manifest, a Linux x64 AppImage Preview with updater metadata and a SHA-256 checksum
file, and an Android arm64 APK. Unchanged native assets are reused with their
original filenames, versions, and checksums.
- Desktop and Android update checks use the version embedded in the applicable
Release asset rather than the overall GitHub tag. This prevents a Web-only or
API-only Release from prompting an unnecessary native update.
- The script creates the tracking Issue and Draft Release, validates or reuses
native assets, prepares and audits the multi-platform GHCR image, publishes,
and closes the Issue without installing
the desktop application by default; installation checks require an explicit
`--install-desktop`.
Demo deployment continues independently after its Actions URL is printed.
- A separate workflow sends the same verified Git commit to CNB. CNB builds and
audits the public Tencent TCR image inside Tencent Cloud after the formal
Release is published. Its duration or failure does not block the GitHub
Release or return a published version to Draft.
- After Draft native assets are prepared, publication is blocked unless the
Android APK uses the Google Play app-signing certificate. If that gate fails,
the Release remains a Draft. Run
`bun run publish:stores -- --release vX.Y.Z --platform android --android-track production`
for that Draft, then rerun the original release command to resume. When the
audited range includes iOS runtime changes, the same command starts Xcode
Cloud and submits App Review after GitHub publication. Once post-publication
audits pass, the script closes the tracking Issue and then waits for App
Store delivery. An iOS failure leaves the GitHub Release published and that
Issue closed; retry with
`bun run publish:stores -- --release vX.Y.Z --platform ios`. See
[Mobile Store Delivery](store-delivery.md).
- Web Clipper store submission is a separate official-repository workflow.
Run **Submit Web Clipper** after increasing `apps/extension/package.json`.
It does not run as part of `bun run release`, and its review does not change
a GitHub Release. See [Web Clipper store submission](extension-store.md).
- Published desktop and Android audits read asset names and download
installers through the release API URL. `gh release view --json assets` and
`gh release download` can stay empty after a draft is published, and treating
that empty list as a missing asset set returns the Release to Draft.
- After rebuilt desktop assets are uploaded to the Draft, the local release
command signs only `latest-windows.json`; the private key never enters GitHub
Actions. A second desktop workflow run downloads the Windows installer,
`latest.yml`, manifest, signature, and checksum file and independently audits
them before publication. See [Windows Preview security and updates](windows-preview.md).
## Registry Credentials
The official GitHub repository must define the `CNB_TCR_BUILD_PUSH_TOKEN`
Actions secret with write access only to the CNB source mirror. The private CNB
key repository provides `TCR_USERNAME` and `TCR_PASSWORD` to the trusted
`push` and `tag_push` pipelines. For TCR Personal Edition, the username is the
Tencent Cloud account ID and the password is the fixed registry password
initialized in the TCR console. GHCR is the blocking Release gate. CNB builds
TCR from the same Git commit, publishes the same public tags asynchronously,
and independently verifies anonymous access and both supported architectures.
Independent builds are not required to have the same registry digest.
## Failure and Resume
- Validation, Windows signature/audit, Draft asset, or GHCR image failures leave
the Release unpublished.
- An asynchronous CNB/TCR build failure leaves the formal Release intact and is
repaired or rerun independently.
- Rerunning the same command resumes a matching Draft created by an interrupted
run instead of creating another Issue, commit, or Release.
- A failed post-publication native or GHCR audit attempts to return the Release to
Draft and leaves the Issue open.
- After those audits pass, the script closes the tracking Issue before waiting
for App Store delivery. A later App Store failure leaves that Issue closed.
- If an explicit application installation fails, the script restores the previous
app from its macOS Trash backup when possible.