From 77bded8842ae5c7854a804e22f9942b5eab74322 Mon Sep 17 00:00:00 2001 From: Rhuan Barreto Date: Tue, 17 Mar 2026 13:58:02 +0100 Subject: [PATCH 1/3] fix: pin platform package versions to exact release version Users were getting stale platform binaries after upgrade because the optional dependencies used >=0.1.1 which allowed package managers to resolve any cached older version. Pin to exact version and add a release workflow step to keep them in sync. --- .github/workflows/release.yml | 27 +++++++++++++++++++++++++++ package.json | 6 +++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8f1b6a07..7bb77a4b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,6 +83,33 @@ jobs: workflow: pull-request github-token: ${{ github.token }} branch: release + - name: Sync optional dependency versions on release branch + run: | + git fetch origin release || exit 0 + git checkout release + VERSION=$(node -p "require('./package.json').version") + node -e " + const fs = require('fs'); + const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); + let changed = false; + for (const dep of Object.keys(pkg.optionalDependencies || {})) { + if (pkg.optionalDependencies[dep] !== pkg.version) { + pkg.optionalDependencies[dep] = pkg.version; + changed = true; + } + } + if (changed) { + fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n'); + process.stdout.write('updated'); + } else { + process.stdout.write('unchanged'); + } + " + if ! git diff --quiet package.json 2>/dev/null; then + git add package.json + git commit -m "chore: sync platform package versions to $VERSION" + git push origin release + fi validate-release-pr: name: Validate release PR needs: pull-request diff --git a/package.json b/package.json index c07417ba..384e3003 100644 --- a/package.json +++ b/package.json @@ -76,8 +76,8 @@ "typescript": "^5" }, "optionalDependencies": { - "archgate-darwin-arm64": ">=0.1.1", - "archgate-linux-x64": ">=0.1.1", - "archgate-win32-x64": ">=0.1.1" + "archgate-darwin-arm64": "0.11.0", + "archgate-linux-x64": "0.11.0", + "archgate-win32-x64": "0.11.0" } } From 4ad0480946cd012bd383e9994cf6e930931471ed Mon Sep 17 00:00:00 2001 From: rhuanbarreto <283004+rhuanbarreto@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:05:50 +0000 Subject: [PATCH 2/3] Apply automatic changes --- bun.lock | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index 41d4d65c..4ad0a9cd 100644 --- a/bun.lock +++ b/bun.lock @@ -19,9 +19,9 @@ "zod": "4.3.6", }, "optionalDependencies": { - "archgate-darwin-arm64": ">=0.1.1", - "archgate-linux-x64": ">=0.1.1", - "archgate-win32-x64": ">=0.1.1", + "archgate-darwin-arm64": "0.11.0", + "archgate-linux-x64": "0.11.0", + "archgate-win32-x64": "0.11.0", }, "peerDependencies": { "typescript": "^5", @@ -147,6 +147,12 @@ "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + "archgate-darwin-arm64": ["archgate-darwin-arm64@0.11.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-fKkDfgPfiucngfRbP1p1nfTT08aKHBVX4L9JqfFPotaYorS8uLUThcQY33pJ1mESgFAXcqC5rLCmIYxTgPl0gA=="], + + "archgate-linux-x64": ["archgate-linux-x64@0.11.0", "", { "os": "linux", "cpu": "x64" }, "sha512-JRvbWC4LySfj5EhcQFA7LlhDOpsvv7qU3GOuxQURwOm8+brjmI9Rk0BRrhowKDZcqk2QswC6xkvwZTJ53eGdvQ=="], + + "archgate-win32-x64": ["archgate-win32-x64@0.11.0", "", { "os": "win32", "cpu": "x64" }, "sha512-dQ3t74V8BRJVFHERwymHKZBp/2FkxKgMxkhs/T/r+G5wmnbZmFml6ojX+LI47Ohp97NeTfgf1CRjeyrlQrSYFA=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "array-ify": ["array-ify@1.0.0", "", {}, "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng=="], From ee58e3bcc0424d212a6606c1d83a6949508b5937 Mon Sep 17 00:00:00 2001 From: Rhuan Barreto Date: Tue, 17 Mar 2026 14:08:39 +0100 Subject: [PATCH 3/3] refactor: move platform version sync into simple-release config Override NpmProject.bump() to sync optionalDependencies after version bump, removing the need for a separate workflow step. --- .github/workflows/release.yml | 27 --------------------------- .simple-release.js | 29 ++++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7bb77a4b..8f1b6a07 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,33 +83,6 @@ jobs: workflow: pull-request github-token: ${{ github.token }} branch: release - - name: Sync optional dependency versions on release branch - run: | - git fetch origin release || exit 0 - git checkout release - VERSION=$(node -p "require('./package.json').version") - node -e " - const fs = require('fs'); - const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); - let changed = false; - for (const dep of Object.keys(pkg.optionalDependencies || {})) { - if (pkg.optionalDependencies[dep] !== pkg.version) { - pkg.optionalDependencies[dep] = pkg.version; - changed = true; - } - } - if (changed) { - fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n'); - process.stdout.write('updated'); - } else { - process.stdout.write('unchanged'); - } - " - if ! git diff --quiet package.json 2>/dev/null; then - git add package.json - git commit -m "chore: sync platform package versions to $VERSION" - git push origin release - fi validate-release-pr: name: Validate release PR needs: pull-request diff --git a/.simple-release.js b/.simple-release.js index 7de9a124..2aa2e355 100644 --- a/.simple-release.js +++ b/.simple-release.js @@ -1,3 +1,30 @@ +import { readFileSync, writeFileSync } from "node:fs"; import { NpmProject } from "@simple-release/npm"; -export const project = new NpmProject(); +class ArchgateProject extends NpmProject { + async bump(options) { + const result = await super.bump(options); + + if (result) { + const pkgPath = "package.json"; + const pkg = JSON.parse(readFileSync(pkgPath, "utf8")); + const version = pkg.version; + let changed = false; + + for (const dep of Object.keys(pkg.optionalDependencies || {})) { + if (pkg.optionalDependencies[dep] !== version) { + pkg.optionalDependencies[dep] = version; + changed = true; + } + } + + if (changed) { + writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n"); + } + } + + return result; + } +} + +export const project = new ArchgateProject();