Files
openless/RELEASING.md
T
TRIPandsim 3143892daa fix(updater): discover modern Beta release tags (#833)
* fix(updater): discover modern Beta release tags

Recognize the current -Beta.N-tauri convention while preserving historical lowercase beta tags so desktop and Android resolve the newest prerelease manifest.

* fix(updater): validate complete modern Beta tags

Reject malformed modern feed tags before they can preempt a valid release, while preserving the historical lowercase beta suffix.

---------

Co-authored-by: sim <sim@local>
2026-07-15 16:51:02 +08:00

63 lines
2.6 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<X.Y.Z>-Beta.<N>-tauri`, for example
`v1.3.15-Beta.1-tauri` (published as a GitHub pre-release; never auto-updates
Stable users). The updater still recognizes the historical `*-beta-tauri`
suffix for existing releases, but new releases use the `Beta.<N>` form.
## 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 prerelease version such as
`X.Y.Z-Beta.N`, 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.