From 85c88e547b6f0812d125aadcf9217975654f69d7 Mon Sep 17 00:00:00 2001 From: Youzini-afk <13153778771cx@gmail.com> Date: Wed, 8 Apr 2026 00:25:27 +0800 Subject: [PATCH] Add manifest version bump CI --- .github/workflows/bump-manifest-version.yml | 40 +++++++++++++++ package.json | 1 + scripts/bump-manifest-version.mjs | 55 +++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 .github/workflows/bump-manifest-version.yml create mode 100644 scripts/bump-manifest-version.mjs diff --git a/.github/workflows/bump-manifest-version.yml b/.github/workflows/bump-manifest-version.yml new file mode 100644 index 0000000..29dab24 --- /dev/null +++ b/.github/workflows/bump-manifest-version.yml @@ -0,0 +1,40 @@ +name: Bump Manifest Version + +on: + push: + branches: + - main + +permissions: + contents: write + +jobs: + bump-manifest-version: + if: ${{ github.actor != 'github-actions[bot]' && !contains(github.event.head_commit.message, '[skip ci]') }} + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Bump manifest version + run: node scripts/bump-manifest-version.mjs + + - name: Commit version bump + run: | + if git diff --quiet -- manifest.json; then + echo "manifest.json version did not change." + exit 0 + fi + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add manifest.json + git commit -m "chore: bump manifest version [skip ci]" + git push diff --git a/package.json b/package.json index 01950b4..a5a5143 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "scripts": { + "version:bump-manifest": "node scripts/bump-manifest-version.mjs", "test:p0": "node tests/p0-regressions.mjs", "test:runtime-history": "node tests/runtime-history.mjs", "test:graph-persistence": "node tests/graph-persistence.mjs", diff --git a/scripts/bump-manifest-version.mjs b/scripts/bump-manifest-version.mjs new file mode 100644 index 0000000..2579666 --- /dev/null +++ b/scripts/bump-manifest-version.mjs @@ -0,0 +1,55 @@ +import { readFile, writeFile } from "node:fs/promises"; +import path from "node:path"; + +function incrementVersion(version) { + if (typeof version !== "string" || !version.trim()) { + throw new Error("manifest.json version is missing."); + } + + const segments = version.split(".").map((segment) => { + if (!/^\d+$/.test(segment)) { + throw new Error(`Unsupported version segment: ${segment}`); + } + return Number(segment); + }); + + if (!segments.length) { + throw new Error(`Unsupported version format: ${version}`); + } + + let carry = 1; + for (let index = segments.length - 1; index >= 0 && carry; index -= 1) { + segments[index] += carry; + if (index > 0 && segments[index] >= 10) { + segments[index] = 0; + carry = 1; + } else { + carry = 0; + } + } + + return segments.join("."); +} + +async function main() { + const dryRun = process.argv.includes("--dry-run"); + const manifestPath = path.resolve(process.cwd(), process.env.MANIFEST_PATH || "manifest.json"); + const manifestRaw = await readFile(manifestPath, "utf8"); + const manifest = JSON.parse(manifestRaw); + const currentVersion = manifest?.version; + const nextVersion = incrementVersion(currentVersion); + + if (dryRun) { + console.log(`${currentVersion} -> ${nextVersion}`); + return; + } + + manifest.version = nextVersion; + await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8"); + console.log(`Updated manifest version: ${currentVersion} -> ${nextVersion}`); +} + +main().catch((error) => { + console.error(error instanceof Error ? error.message : String(error)); + process.exitCode = 1; +});