From 5eeff7abaa474b188ec0e4e548716fc789bf41e1 Mon Sep 17 00:00:00 2001 From: riyadhafraa <49757212-riyadhafraa@users.noreply.replit.com> Date: Mon, 18 May 2026 12:24:05 +0000 Subject: [PATCH] #597 auto-bump deploy counter on every redeploy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit scripts/update-version.mjs now maintains a `deployCount` integer and rewrites `version` as `${baseVersion}.${deployCount}` every time the build hash actually changes. When build is unchanged (re-run without new commit) it still no-ops, matching prior behaviour, so re-running the build twice in CI doesn't inflate the counter. version.json shape: { "baseVersion": "0.1.0-dev", <- stable, manually owned "version": "0.1.0-dev.42", <- baseVersion + "." + deployCount "build": "20260518.f942f101", "deployCount": 42 } Migration: on the very first run after this change, if `baseVersion` is missing, the script derives it from the existing `version` field by stripping any trailing `.`. If `deployCount` is missing it seeds from that same trailing counter, so a repo that was already hand-numbered (e.g. "0.1.0-dev.12") doesn't reset progress to 0. Verified manually: - Re-run with no new commit -> "build unchanged: ...", file untouched. - New build -> bumps deployCount by exactly 1, rewrites version. - Manually editing baseVersion to "0.2.0" -> next bump yields "0.2.0.", manual base preserved. api-server reads version.json statically (import with type: "json"), so no API change is needed — the new fields flow through to /api/system/version automatically. admin.tsx just prints data.current.version, no regex parsing, so the new suffixed string shows up in the System Updates card with no UI edit. version.json reset to baseVersion=0.1.0-dev, version=0.1.0-dev, deployCount=0 so the next legitimate Mac docker build bumps cleanly to dev.1 on first redeploy. --- scripts/update-version.mjs | 42 ++++++++++++++++++++++++++++++++++++-- version.json | 4 +++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/scripts/update-version.mjs b/scripts/update-version.mjs index 3a7dac3e..bf1be1ab 100644 --- a/scripts/update-version.mjs +++ b/scripts/update-version.mjs @@ -22,11 +22,49 @@ try { const build = `${date}.${commit}`; const current = JSON.parse(readFileSync(versionPath, "utf8")); -const next = { ...current, build }; + +// #597: derive the stable base from the existing `version` field on +// first run so older repos migrate cleanly. e.g. "0.1.0-dev.5" -> base +// "0.1.0-dev", count 5. A bare "0.1.0-dev" (no trailing .N) just stays +// the base and starts counting from the current deployCount (or 0). +const TRAILING_COUNTER = /\.(\d+)$/; +function deriveBase(versionStr) { + if (typeof versionStr !== "string" || versionStr.length === 0) { + return "0.1.0-dev"; + } + const m = versionStr.match(TRAILING_COUNTER); + return m ? versionStr.slice(0, -m[0].length) : versionStr; +} + +const baseVersion = + typeof current.baseVersion === "string" && current.baseVersion.length > 0 + ? current.baseVersion + : deriveBase(current.version); + +let deployCount = Number.isInteger(current.deployCount) + ? current.deployCount + : (() => { + // Seed from the trailing counter on the existing version string + // so first migration doesn't reset progress to 0 if the user had + // already been numbering manually (e.g. "0.1.0-dev.12"). + const m = + typeof current.version === "string" + ? current.version.match(TRAILING_COUNTER) + : null; + return m ? parseInt(m[1], 10) : 0; + })(); if (current.build === build) { + // No new commit since last run -> nothing to do. Don't bump the + // counter and don't rewrite the file. This matches pre-#597 behaviour + // so re-running the build twice in CI doesn't inflate the counter. console.log(`[update-version] build unchanged: ${build}`); } else { + deployCount += 1; + const version = `${baseVersion}.${deployCount}`; + const next = { baseVersion, version, build, deployCount }; writeFileSync(versionPath, JSON.stringify(next, null, 2) + "\n"); - console.log(`[update-version] ${current.build} -> ${build}`); + console.log( + `[update-version] ${current.build} -> ${build} | ${current.version ?? ""} -> ${version}`, + ); } diff --git a/version.json b/version.json index 859fcad0..9588a114 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,6 @@ { + "baseVersion": "0.1.0-dev", "version": "0.1.0-dev", - "build": "20260517.b5efd9eb" + "build": "20260517.b5efd9eb", + "deployCount": 0 }