chore: prepare the 2.2.0 release (#660)

Bumps every version surface to 2.2.0, fixes a latent version-coupling bug in the
OCR runtime tests, and stops an absent GPU runner from silently stalling a
release.

Version surfaces: scripts/sync-version.sh covers the 11 workspaces, APP_VERSION,
and the docs release commands across all locales. Root package.json plus the
three surfaces the script never reaches are done by hand: the DOCKERHUB.md banner
and tag table, the docker-tags.md pinning table in 21 locales, and the example
runtimeVersion in tools/image/ocr.md in 21 locales. The release-notes archive step
is deliberately not pre-run, so the notes text stays editable until the release.

Latent bug: runtime-state rejects any runtime whose compatibility.snapotterVersion
is not exactly APP_VERSION, and five fixtures pinned the literal 2.1.0. Since
semantic-release rewrites APP_VERSION on every release, the first PR after any
bump would have gone red for a reason nobody would trace to the release. The
fixtures now derive from APP_VERSION.

GPU runner: sign-ocr-index needs verify-ocr-nvidia on self-hosted hardware, and
the gated manifest job needs ai-bundles, so a missing runner queued instead of
failing and produced no image tags. preflight-gpu-runner claims the same labels
with no dependencies, so it is scheduled first and validates the GPU before the
90-minute build. An API preflight is impossible because listing self-hosted
runners needs Administration:read, which GITHUB_TOKEN cannot hold, so RELEASE.md
carries the maintainer-side check.
This commit is contained in:
SnapOtter
2026-07-27 22:09:31 +08:00
committed by GitHub
parent d10d0f544f
commit 5f21588f6c
101 changed files with 279 additions and 212 deletions
+3 -3
View File
@@ -11,7 +11,7 @@ Open-source, self-hosted file-processing infrastructure. Convert, compress, OCR,
[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.gg/hr3s7HPUsr)
[![GitHub](https://img.shields.io/badge/GitHub-snapotter--hq%2FSnapOtter-181717?logo=github)](https://github.com/snapotter-hq/SnapOtter)
> **SnapOtter 2.1 is out.** The `latest` tag points at `2.1.0`: 200+ tools across image, video, audio, PDF, and files, plus a layer-based editor and local AI. See the [release notes](https://github.com/snapotter-hq/SnapOtter/releases/tag/v2.1.0).
> **SnapOtter 2.2 is out.** The `latest` tag points at `2.2.0`: 200+ tools across image, video, audio, PDF, and files, plus a layer-based editor and local AI. See the [release notes](https://github.com/snapotter-hq/SnapOtter/releases/tag/v2.2.0).
## What is SnapOtter?
@@ -86,8 +86,8 @@ The first boot seeds an admin account from `DEFAULT_USERNAME` and `DEFAULT_PASSW
| Tag | Description |
|-----|-------------|
| `latest` | Latest release |
| `2.1.0` | Exact version |
| `2.1` | Latest patch in the 2.1.x line |
| `2.2.0` | Exact version |
| `2.2` | Latest patch in the 2.2.x line |
| `2` | Latest minor in the 2.x line |
| Architecture | GPU support | Notes |