Files
openless/RELEASING.md
T
TRIP 0eb69fc0f4 chore: codebase cleanup + behavior-preserving refactor (#693)
Audit-driven cleanup: 6 issue fixes (#689/#686/#680/#691/#678/#612), Aura skin removal (visually-neutral), dead-code cleanup (98→87 warnings), behavior-preserving modularization (coordinator.rs 6961→3083 + LocalAsr/ + polish/ submodules), and RELEASING.md (admin-only release policy). Gates: cargo test --lib 446 passed, tsc, all-platform build + contract checks green. Supersedes #685/#687/#690/#692/#682/#681.
2026-06-16 23:22:21 +08:00

60 lines
2.4 KiB
Markdown

# Releasing OpenLess
This document defines who may cut releases and how. It is policy, not a how-to for
day-to-day development.
## Authority: admins only
**Only repository administrators may create version tags and publish releases.**
- Only an admin may create a release tag (`v*-tauri`) or publish a GitHub Release.
- Contributors (including AI agents) **must not** create release tags, publish
releases, or trigger release automation. If a release is needed, **request an admin
to cut it** — open an issue or ping a maintainer with the target version and the
channel (Beta or Stable).
- Release automation (CI workflows that build, sign, and publish artifacts, and the
auto-updater feed) must be **admin-triggered only**. Tag-triggered pipelines are
considered admin-triggered because only admins may push the triggering tag.
## Channels and tags
Two channels; the branch name equals the channel name:
- **`beta`** — default development branch and the Beta channel.
- **`main`** — the Stable channel (正式版). Always releasable; only maintainers merge
`beta → main`.
Release tags (created by an admin only):
- **Stable release:** push tag `v<version>-tauri`.
- **Beta release:** push tag `v<version>-beta-tauri` (published as a GitHub
pre-release; never auto-updates Stable users).
## Version-sync gate
A release fails CI unless **five** files carry the same version. Bump them together
with `1-app/scripts/bump-version.sh <X.Y.Z>`:
- `openless-all/app/package.json`
- `openless-all/app/package-lock.json` (root and nested `packages.""`)
- `openless-all/app/src-tauri/tauri.conf.json`
- `openless-all/app/src-tauri/Cargo.toml`
- `openless-all/app/src-tauri/Cargo.lock` (the `name = "openless"` block)
The script takes a plain `X.Y.Z`; for a `-beta` suffix, edit the files by hand.
## Pre-release checklist (for the admin cutting the release)
1. Branch is the intended channel (`beta` for Beta, `main` for Stable).
2. All five version files match (version-sync gate green).
3. CI is green on the commit being tagged.
4. Then, and only then, push the release tag.
## Process summary
1. Land work on `beta` via PRs (open PRs against `beta`, never `main`).
2. For a Stable release, a maintainer merges `beta → main`.
3. An **admin** bumps the version (five-file sync), verifies CI is green, and pushes
the release tag — which is the only thing that triggers the publish/auto-update
pipeline.