From 54bf3d7d528667c36cf21df985c632c4d057867a Mon Sep 17 00:00:00 2001 From: "Calum H. (IMB11)" Date: Wed, 6 May 2026 23:59:36 +0100 Subject: [PATCH] fix: virt version bumping npm --- .github/workflows/api-client-release.yml | 76 +++++++++--------------- 1 file changed, 29 insertions(+), 47 deletions(-) diff --git a/.github/workflows/api-client-release.yml b/.github/workflows/api-client-release.yml index 16ea576d28..9f777e913c 100644 --- a/.github/workflows/api-client-release.yml +++ b/.github/workflows/api-client-release.yml @@ -12,7 +12,7 @@ concurrency: cancel-in-progress: false permissions: - contents: write + contents: read id-token: write jobs: @@ -78,32 +78,37 @@ jobs: if: steps.changes.outputs.changed == 'true' id: version run: | - CURRENT_VERSION="$(node --print "require('./${PACKAGE_DIR}/package.json').version")" - - set +e - PUBLISHED_VERSION_JSON="$(pnpm view "${PACKAGE_NAME}" version --json)" - VIEW_STATUS="$?" - set -e - - if [ "$VIEW_STATUS" -eq 0 ]; then - PUBLISHED_VERSION="$(node --eval "const raw = process.argv[1] || ''; const value = raw ? JSON.parse(raw) : ''; console.log(Array.isArray(value) ? value.at(-1) || '' : value || '')" "$PUBLISHED_VERSION_JSON")" - else - PUBLISHED_VERSION="" - fi - - VERSION_RESULT="$(node --eval "const [current, published, bumpType] = process.argv.slice(1); const parse = (version) => { const match = /^([0-9]+)\\.([0-9]+)\\.([0-9]+)$/.exec(version || ''); if (!match) throw new Error('Unsupported semver version: ' + version); return match.slice(1).map(Number); }; const compare = (left, right) => { const a = parse(left); const b = parse(right); for (let i = 0; i < 3; i++) { if (a[i] !== b[i]) return a[i] - b[i]; } return 0; }; const bump = (version, type) => { const next = parse(version); if (type === 'major') { next[0]++; next[1] = 0; next[2] = 0; } else if (type === 'minor') { next[1]++; next[2] = 0; } else if (type === 'patch') { next[2]++; } else { throw new Error('Unsupported bump type: ' + type); } return next.join('.'); }; const shouldBump = Boolean(published) && compare(current, published) <= 0; const next = shouldBump ? bump(published, bumpType) : current; console.log(JSON.stringify({ current, published, next, shouldBump }));" "$CURRENT_VERSION" "$PUBLISHED_VERSION" "$BUMP_TYPE")" - - NEXT_VERSION="$(node --eval "console.log(JSON.parse(process.argv[1]).next)" "$VERSION_RESULT")" - SHOULD_BUMP="$(node --eval "console.log(JSON.parse(process.argv[1]).shouldBump ? 'true' : 'false')" "$VERSION_RESULT")" - - if [ "$SHOULD_BUMP" = "true" ]; then - node --eval "const fs = require('node:fs'); const path = process.argv[1]; const version = process.argv[2]; const pkg = JSON.parse(fs.readFileSync(path, 'utf8')); pkg.version = version; fs.writeFileSync(path, JSON.stringify(pkg, null, '\t') + '\n');" "$PACKAGE_DIR/package.json" "$NEXT_VERSION" - fi + CURRENT_VERSION_JSON="$(npm view "${PACKAGE_NAME}" version --json)" + CURRENT_VERSION="$( + jq -nr \ + --argjson version "$CURRENT_VERSION_JSON" \ + 'if ($version | type) == "array" then $version[-1] else $version end' + )" + + NEXT_VERSION="$( + jq -nr \ + --arg version "$CURRENT_VERSION" \ + --arg bump "$BUMP_TYPE" ' + def semver: + capture("^(?[0-9]+)\\.(?[0-9]+)\\.(?[0-9]+)$") + | with_entries(.value |= tonumber); + + ($version | semver) as $current + | if $bump == "major" then "\($current.major + 1).0.0" + elif $bump == "minor" then "\($current.major).\($current.minor + 1).0" + elif $bump == "patch" then "\($current.major).\($current.minor).\($current.patch + 1)" + else error("Unsupported bump type: \($bump)") + end + ' + )" + + PACKAGE_JSON="$(mktemp)" + jq --tab --arg version "$NEXT_VERSION" '.version = $version' "$PACKAGE_DIR/package.json" > "$PACKAGE_JSON" + mv "$PACKAGE_JSON" "$PACKAGE_DIR/package.json" echo "current_version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT" - echo "published_version=$PUBLISHED_VERSION" >> "$GITHUB_OUTPUT" + echo "published_version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT" echo "version=$NEXT_VERSION" >> "$GITHUB_OUTPUT" - echo "bumped=$SHOULD_BUMP" >> "$GITHUB_OUTPUT" - name: Build api-client if: steps.changes.outputs.changed == 'true' @@ -114,29 +119,6 @@ jobs: working-directory: packages/api-client run: pnpm pack --dry-run - - name: Configure git - if: steps.changes.outputs.changed == 'true' && steps.version.outputs.bumped == 'true' - run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - - - name: Commit version bump - if: steps.changes.outputs.changed == 'true' && steps.version.outputs.bumped == 'true' - run: | - git add "$PACKAGE_DIR/package.json" - git commit -m "Release @modrinth/api-client v${{ steps.version.outputs.version }} [skip ci]" - - - name: Push version bump - if: steps.changes.outputs.changed == 'true' && steps.version.outputs.bumped == 'true' - env: - GH_ACCESS_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} - run: | - if [ -n "$GH_ACCESS_TOKEN" ]; then - git remote set-url origin "https://x-access-token:${GH_ACCESS_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" - fi - - git push origin HEAD:main - - name: Publish api-client if: steps.changes.outputs.changed == 'true' working-directory: packages/api-client