From f7b7e2c13ae3cd204e2d32ef8f8715adaeb773b1 Mon Sep 17 00:00:00 2001 From: Palash Debnath Date: Wed, 1 Jul 2026 20:18:15 +0530 Subject: [PATCH] chore(version): pin main to 0.3.8 (revert the post-release auto-bump) (#858) * Revert "chore(version): main -> 0.3.9 after v0.3.8 release" This reverts commit 7489bef08512c511ecde09c3333173e7d1696fe2. * chore(release): gate the post-release version-bump behind AUTO_VERSION_BUMP (owner controls bumps) Owner decision (2026-07-01): keep main pinned to the released version and bump only on explicit request. The version-bump job now runs only when the repo variable AUTO_VERSION_BUMP == 'true' (default off), so releasing no longer auto-rolls main to +1. Documented the override in CLAUDE.md's versioning rule. --------- Co-authored-by: mergetest --- .github/workflows/release.yml | 17 +++++++++++------ CLAUDE.md | 2 +- backend/core/version.py | 2 +- frontend/package.json | 2 +- frontend/src-tauri/Cargo.toml | 2 +- pyproject.toml | 2 +- 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9c117f06..453ed926 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -770,13 +770,18 @@ jobs: print(f"preview manifest OK: {v} platforms={sorted(pk)}") PY - # ── Post-release version bump (versioning hard rule, owner-set 2026-06-11) ── - # main is always last-release + 1 patch. The moment a stable v* tag is - # released, bump the three version sources on main to the next patch so every - # PR and preview build identifies as the next version. Pushes directly to - # main with the workflow token (a metadata-only commit; CI runs on PRs). + # ── Post-release version bump (OWNER-GATED as of 2026-07-01) ────────────── + # Previously auto-ran after every stable v* tag to keep main = release + 1. + # The owner now controls bumps manually ("keep 0.3.8; I say when to bump"), so + # this job is OPT-IN: it runs ONLY when the repo variable AUTO_VERSION_BUMP is + # set to 'true' (Settings → Secrets and variables → Actions → Variables). + # Unset/anything-else → main stays at whatever it is after release. Re-enable + # by setting the variable; disable again by unsetting it. version-bump: - if: github.event_name == 'push' && github.ref_type == 'tag' && !contains(github.ref, '-') + if: >- + github.event_name == 'push' && github.ref_type == 'tag' + && !contains(github.ref, '-') + && vars.AUTO_VERSION_BUMP == 'true' runs-on: ubuntu-22.04 permissions: contents: write diff --git a/CLAUDE.md b/CLAUDE.md index ba1703f0..6a2c7414 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -192,7 +192,7 @@ Everything else (new engines, fancy features) is downstream of "the thing instal **Versioning (hard rule, owner-set 2026-06-11; single-source 2026-06-16):** main is always **latest release + 1 patch**. **`frontend/package.json` is the SINGLE SOURCE OF TRUTH for the app version** — vite injects `__APP_VERSION__` from it (first-run footer + every auto bug report), and `frontend/src-tauri/tauri.conf.json` reads its bundle version from it (`"version": "../package.json"`, so the MSI/dmg/updater version can't drift from the UI). Three toolchain-required **mirrors** are kept equal to it and bumped in lockstep — `frontend/src-tauri/Cargo.toml` + `pyproject.toml` (cargo/uv need a literal) and `backend/core/version.py`'s `_FALLBACK_VERSION` (the frozen-backend last resort; at runtime the backend reads its version from package metadata via `importlib.metadata`, which `backend.spec`'s `copy_metadata('omnivoice')` makes work in the frozen build too). Never hand-edit any mirror or re-hardcode a literal in `tauri.conf.json`. Guarded by `tests/test_app_version.py` (`test_all_version_files_in_lockstep` + `test_tauri_version_derives_from_package_json`). The moment `vX.Y.Z` is released, bump `package.json` (+ the mirrors) to `X.Y.(Z+1)`. Consequences: - Every PR and preview build identifies as the **next** version. Preview builds stamp `X.Y.(Z+1)-N` (run number), which semver-sorts **above** the last stable `X.Y.Z` — the updater ordering is natural, no comparator tricks needed. -- Releasing = tag `vX.Y.(Z+1)` from main (version files already match), then immediately bump main to `X.Y.(Z+2)`. The post-release bump is automated by the `version-bump` job in release.yml; if it fails, do it manually in the same day. +- Releasing = tag `vX.Y.(Z+1)` from main (version files already match), then immediately bump main to `X.Y.(Z+2)`. **Owner override (2026-07-01): the post-release bump is now MANUAL — the `version-bump` job in release.yml is opt-in behind the `AUTO_VERSION_BUMP` repo variable (default off), so `main` stays at the released version until the owner explicitly asks to bump.** (Historically the bump auto-ran; re-enable that by setting `AUTO_VERSION_BUMP=true`.) When pinned, `main` == the released tag; preview-build ordering and "release + 1" only resume once a bump is requested. - Docker: `ghcr.io/debpalash/omnivoice-studio:latest` = **main** (rolling preview); `:X.Y.Z` + `:X.Y` + `:stable` = tagged releases. `:latest` is the preview channel by design — stable users pin `:stable` or a version tag. - Do not bump minor/major or invent RCs/codenames without the owner asking. No "defer to next version" labels — scope is absorbed or declined, never re-versioned. diff --git a/backend/core/version.py b/backend/core/version.py index 6883621d..fba4219f 100644 --- a/backend/core/version.py +++ b/backend/core/version.py @@ -24,7 +24,7 @@ from pathlib import Path # tests/test_app_version.py::test_all_version_files_in_lockstep and bumped by # release.yml's version-bump job, so it stays equal to # pyproject/tauri.conf/Cargo/package.json. -_FALLBACK_VERSION = "0.3.9" +_FALLBACK_VERSION = "0.3.8" def _fallback_version() -> str: diff --git a/frontend/package.json b/frontend/package.json index 4d2a6efe..96b99e57 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "omnivoice-studio", - "version": "0.3.9", + "version": "0.3.8", "private": true, "license": "AGPL-3.0-only", "type": "module", diff --git a/frontend/src-tauri/Cargo.toml b/frontend/src-tauri/Cargo.toml index 80c788e9..69648e9f 100644 --- a/frontend/src-tauri/Cargo.toml +++ b/frontend/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "omnivoice-studio" -version = "0.3.9" +version = "0.3.8" description = "OmniVoice Studio – AI voice cloning & dubbing desktop app" authors = ["Debpalash"] license = "AGPL-3.0-only" diff --git a/pyproject.toml b/pyproject.toml index c8c909d8..c118580f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "omnivoice" -version = "0.3.9" +version = "0.3.8" description = "OmniVoice: Towards Omnilingual Zero-Shot Text-to-Speech with Diffusion Language Models" readme = "README.md" # Free and open-source under the GNU Affero General Public License v3 (see