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.
60 lines
2.4 KiB
Markdown
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.
|