From 550a350734c2d004e692f8159a346e98fb4c74ee Mon Sep 17 00:00:00 2001 From: Wikid82 Date: Sun, 16 Aug 2026 22:59:08 -0400 Subject: [PATCH 1/8] ci: add weekly development-to-main promotion workflow --- .github/workflows/promote-dev-to-main.yml | 212 ++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 .github/workflows/promote-dev-to-main.yml diff --git a/.github/workflows/promote-dev-to-main.yml b/.github/workflows/promote-dev-to-main.yml new file mode 100644 index 0000000..f3cd6ca --- /dev/null +++ b/.github/workflows/promote-dev-to-main.yml @@ -0,0 +1,212 @@ +name: Promote development to main + +# Weekly PR development -> main, human-reviewed (unlike sync-development.yml's +# direct development -> development push). Gated on CI having actually passed +# for development's current HEAD, so a broken development doesn't get promoted just +# because a week went by. + +on: + schedule: + - cron: '23 12 * * 1' # Mondays ~12:23 UTC, off the top of the hour + workflow_dispatch: + inputs: + reason: + description: 'Why are you running this manually?' + required: true + default: 'Ad-hoc promotion request' + skip_health_check: + description: 'Skip the CI health check on development?' + required: false + type: boolean + default: false + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: false + +env: + SOURCE_BRANCH: development + TARGET_BRANCH: main + +permissions: + contents: read + pull-requests: write + +jobs: + check-development-health: + runs-on: ubuntu-latest + outputs: + is_healthy: ${{ steps.check.outputs.is_healthy }} + run_url: ${{ steps.check.outputs.run_url }} + steps: + - name: Check CI status on development HEAD + id: check + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 + env: + SKIP: ${{ inputs.skip_health_check }} + with: + script: | + if (process.env.SKIP === 'true') { + core.info('Health check skipped by workflow_dispatch input'); + core.setOutput('is_healthy', 'true'); + core.setOutput('run_url', 'N/A - check skipped'); + return; + } + + const { data: branch } = await github.rest.repos.getBranch({ + owner: context.repo.owner, + repo: context.repo.repo, + branch: 'development', + }); + const headSha = branch.commit.sha; + core.info(`development HEAD: ${headSha}`); + + // sync-development.yml never creates a new commit — development is always + // either untouched or fast-forwarded/reset to development's exact + // SHA. So a completed CI run on 'development' at this same SHA is + // equally valid proof of health, and covers two gaps in checking + // 'development' alone: (1) if development was synced with the GITHUB_TOKEN + // fallback (doesn't trigger downstream workflows), CI never ran on + // development at all; (2) if development already matched development when + // the sync ran, no push happened, so no development-branch run exists + // for this SHA even with a trigger token configured. + let run = null; + for (let attempt = 1; attempt <= 4; attempt += 1) { + const { data } = await github.rest.actions.listWorkflowRuns({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'ci.yml', + status: 'completed', + per_page: 20, + }); + run = data.workflow_runs.find( + (r) => r.head_sha === headSha && (r.head_branch === 'development' || r.head_branch === 'development'), + ); + if (run) break; + core.info(`No completed CI run for development HEAD yet (attempt ${attempt}/4), waiting...`); + await new Promise((resolve) => setTimeout(resolve, 15000)); + } + + if (!run) { + core.setOutput('is_healthy', 'false'); + core.setOutput('run_url', `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/workflows/ci.yml`); + core.warning('No completed CI run found for development HEAD — blocking promotion'); + return; + } + + core.setOutput('is_healthy', run.conclusion === 'success' ? 'true' : 'false'); + core.setOutput('run_url', run.html_url); + if (run.conclusion !== 'success') { + core.warning(`CI on development HEAD concluded '${run.conclusion}' — blocking promotion`); + } + + create-promotion-pr: + needs: check-development-health + if: needs.check-development-health.outputs.is_healthy == 'true' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + ref: ${{ env.TARGET_BRANCH }} + fetch-depth: 0 + + - name: Check for differences + id: diff + run: | + git fetch origin "${{ env.SOURCE_BRANCH }}" + AHEAD=$(git rev-list --count "origin/${{ env.TARGET_BRANCH }}..origin/${{ env.SOURCE_BRANCH }}") + echo "development is $AHEAD commits ahead of main" + echo "ahead=$AHEAD" >> "$GITHUB_OUTPUT" + + - name: Generate commit summary + if: steps.diff.outputs.ahead != '0' + id: commits + run: | + { + echo "log<> "$GITHUB_OUTPUT" + + - name: Create or update promotion PR + if: steps.diff.outputs.ahead != '0' + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 + env: + COMMIT_LOG: ${{ steps.commits.outputs.log }} + TRIGGER_REASON: ${{ inputs.reason || 'Scheduled weekly promotion' }} + RUN_URL: ${{ needs.check-development-health.outputs.run_url }} + with: + script: | + const source = process.env.SOURCE_BRANCH || 'development'; + const target = process.env.TARGET_BRANCH || 'main'; + + const { data: existing } = await github.rest.pulls.list({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open', + head: `${context.repo.owner}:development`, + base: 'main', + }); + + const date = new Date().toISOString().slice(0, 10); + const body = `## Promote development to main + + **Date:** ${date} + **Trigger:** ${process.env.TRIGGER_REASON} + **CI on development HEAD:** ${process.env.RUN_URL} + + ### Commits being promoted + \`\`\` + ${process.env.COMMIT_LOG} + \`\`\` + + ## Merge instructions — important + + **Use "Create a merge commit", not squash or rebase.** Squashing collapses every + \`feat:\`/\`fix:\` commit into one bullet-list body, which release-please can't parse — + version bumps and changelog entries silently stop working. + + --- + _Opened automatically by [Promote development to main](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})._ + `; + + if (existing.length > 0) { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: existing[0].number, + body: `Nightly has moved on since this PR opened. New commits may be included.\n\n_Triggered by [this run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})._`, + }); + core.info(`Updated existing PR #${existing[0].number}`); + return; + } + + const pr = await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: `chore: promote development to main (${date})`, + head: 'development', + base: 'main', + body, + }); + core.info(`Created PR #${pr.data.number}: ${pr.data.html_url}`); + + for (const label of ['automated', 'promotion']) { + try { + await github.rest.issues.getLabel({ owner: context.repo.owner, repo: context.repo.repo, name: label }); + } catch { + await github.rest.issues.createLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + name: label, + color: label === 'automated' ? '0e8a16' : '5319e7', + }); + } + } + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.data.number, + labels: ['automated', 'promotion'], + }); From 4974efa5162def29c4836c51c73b2eaaf9fee70c Mon Sep 17 00:00:00 2001 From: Wikid82 Date: Wed, 19 Aug 2026 23:06:58 -0400 Subject: [PATCH 2/8] chore: bump @types/vscode to ^1.134.0 and update dependencies --- package-lock.json | 63 ++++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b92776..7ba4c70 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.5.0", "devDependencies": { "@types/node": "^26.2.0", - "@types/vscode": "^1.125.0", + "@types/vscode": "^1.134.0", "@vscode/vsce": "^3.9.2", "esbuild": "^0.28.2", "typescript": "~6.0.3" @@ -82,6 +82,16 @@ "node": ">=22.0.0" } }, + "node_modules/@azure/core-process": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-process/-/core-process-1.0.0.tgz", + "integrity": "sha512-/shnJ+ooO8WPxDhPEeI/2oRQuubn16gZ6CvlbpWbEswZfzwI9tI/sMAHmF3x1LuQ9yZYXfLW3TjzGMLEC5blKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.0.0" + } + }, "node_modules/@azure/core-rest-pipeline": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", @@ -130,26 +140,27 @@ } }, "node_modules/@azure/identity": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.1.tgz", - "integrity": "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.2.tgz", + "integrity": "sha512-NXL2/pCJctLxgw8bvrwwgge743kEq8LBT+O1pmV0vyUwetzFPH9auP6jhkU/cgZCPPtWoewAe3ncaGCgPo07fA==", "dev": true, "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", + "@azure/core-process": "^1.0.0", "@azure/core-rest-pipeline": "^1.17.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^5.5.0", - "@azure/msal-node": "^5.1.0", + "@azure/msal-node": "^5.1.5", "open": "^10.1.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/logger": { @@ -167,22 +178,22 @@ } }, "node_modules/@azure/msal-browser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.18.0.tgz", - "integrity": "sha512-SPTeHYZghdEdRddJzNjhH+CI5MSQtquNYwGJnYXfOHIBRXCmrWimBS85OhwXpXFIlrCtNTbBPm5mPAWRNEoktA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.19.0.tgz", + "integrity": "sha512-DHe9iRcyByGJuLPkl0K31a1JjOdRY2zX38Q07mQpSbR8zOj1EIgsWfTXhSQVyyijUxlcofVy/br7qWJbrMwVXQ==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.12.0" + "@azure/msal-common": "16.13.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.12.0.tgz", - "integrity": "sha512-hgLgfRdbG2AmhXPygebf1KYJEvse86+ZZLWufdiTKaGRYEUqOzHdlf6AS1IiuUCHWbynkgbHc451jSNkbfhWlg==", + "version": "16.13.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.13.0.tgz", + "integrity": "sha512-rOAy0KUcyBbdwVJ+f3uPpthXatFLLZN+/KWAsTLzk1aB23Xl9DRmmXYwSvBFOZyXj4jUQQ5FKxxRkhAFW1fOow==", "dev": true, "license": "MIT", "engines": { @@ -190,13 +201,13 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.5.0.tgz", - "integrity": "sha512-A/2WIsuH0vsC6JVkkafjS4kHpi2LDR4AzDT0kJ+oIRtXYeYtvGQ2pwN2X88thQPhSek+82ela3MprsKXWQRrhQ==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.6.0.tgz", + "integrity": "sha512-uFY9NxrWHw8PwZx7gAX6PDn+9vdfS05+levc/kwkx77IkjfaldnQbbcQzzDIZ5Hq5Zdr6/z92oAIoRWKp6MnOA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.12.0", + "@azure/msal-common": "16.13.0", "jsonwebtoken": "^9.0.0" }, "engines": { @@ -1006,9 +1017,9 @@ "license": "MIT" }, "node_modules/@types/vscode": { - "version": "1.125.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.125.0.tgz", - "integrity": "sha512-0icm/ZQAaism87P0ekHqi4/Ju9du+Tm0RUW+y7vqRsxY2cY0FNRX1nAnaW7nT6npPt2tfHiheZ55Zm9UhqonFA==", + "version": "1.134.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.134.0.tgz", + "integrity": "sha512-NDEu0hg4sF7+vvFsADsktqUJ6f80LHSZvVK2Ovo1XiQ0/VHck1O3zst+ZZyVA/uvz6vo6LcuoqU2q48YMqOwWw==", "dev": true, "license": "MIT" }, @@ -1075,9 +1086,9 @@ } }, "node_modules/@vscode/vsce-sign": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", - "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.1.0.tgz", + "integrity": "sha512-9AQrqazrBgTgRSuwleLVXUrIUphY02/SFCh2TKYoLV/xifJAdblhdmEmw5gUrYSPQ3sRwNs9iyCMD14sATEE6g==", "dev": true, "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE.txt", @@ -1716,9 +1727,9 @@ } }, "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 58d5e45..532af70 100644 --- a/package.json +++ b/package.json @@ -212,7 +212,7 @@ }, "devDependencies": { "@types/node": "^26.2.0", - "@types/vscode": "^1.125.0", + "@types/vscode": "^1.134.0", "@vscode/vsce": "^3.9.2", "esbuild": "^0.28.2", "typescript": "~6.0.3" From 66fd45066c9f7af06f38ebd21adfa91de27c9271 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Aug 2026 10:45:15 -0400 Subject: [PATCH 3/8] chore(main): release workspace-file-bookmarks 1.5.1 (#30) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index dd8fde7..e20d7e8 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.5.0" + ".": "1.5.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index d3a09da..c673a23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [1.5.1](https://github.com/Wikid82/Workspace-File-Bookmarks/compare/workspace-file-bookmarks-v1.5.0...workspace-file-bookmarks-v1.5.1) (2026-08-20) + + +### Bug Fixes + +* derive pre-release version from live registry state, not local package.json ([92cb0ea](https://github.com/Wikid82/Workspace-File-Bookmarks/commit/92cb0ea51b7bf383b8d1b292a04e78a750dd86ee)) +* update ansi-regex version to 6.3.0 ([253850d](https://github.com/Wikid82/Workspace-File-Bookmarks/commit/253850d6faba8cfeb3f00b201c89994d2a51dd4c)) +* update TypeScript and @types/node versions; adjust tsconfig module settings ([7c30fff](https://github.com/Wikid82/Workspace-File-Bookmarks/commit/7c30fff555f1b2659578555f92cfdff7508234b8)) +* update typescript version to ~7.0.0 ([32f6cfb](https://github.com/Wikid82/Workspace-File-Bookmarks/commit/32f6cfbebe8dd4ca11989b02dea992f1967f62a3)) + ## [1.5.0](https://github.com/Wikid82/Workspace-File-Bookmarks/compare/workspace-file-bookmarks-v1.4.3...workspace-file-bookmarks-v1.5.0) (2026-08-11) diff --git a/package-lock.json b/package-lock.json index 7ba4c70..6fc14c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "workspace-file-bookmarks", - "version": "1.5.0", + "version": "1.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "workspace-file-bookmarks", - "version": "1.5.0", + "version": "1.5.1", "devDependencies": { "@types/node": "^26.2.0", "@types/vscode": "^1.134.0", diff --git a/package.json b/package.json index 532af70..0ca0a9b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Bookmark files across multi-repo VS Code workspaces for quick access.", "publisher": "Wikid82", "private": false, - "version": "1.5.0", + "version": "1.5.1", "icon": "media/icon.png", "categories": [ "Other" From 0a929498970e903b3d879f6ed4c4c66636fe301b Mon Sep 17 00:00:00 2001 From: Wikid82 Date: Thu, 20 Aug 2026 10:54:06 -0400 Subject: [PATCH 4/8] chore: bump minimum VS Code engine version to ^1.134.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6fc14c0..f302ca2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "typescript": "~6.0.3" }, "engines": { - "vscode": "^1.133.0" + "vscode": "^1.134.0" } }, "node_modules/@azu/format-text": { diff --git a/package.json b/package.json index 0ca0a9b..a4e87e1 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/Wikid82/Workspace-File-Bookmarks#readme", "engines": { - "vscode": "^1.133.0" + "vscode": "^1.134.0" }, "activationEvents": [], "main": "./dist/extension.cjs", From a0e3f5460d717e89afffe749f569644985938b13 Mon Sep 17 00:00:00 2001 From: Wikid82 Date: Thu, 20 Aug 2026 10:56:57 -0400 Subject: [PATCH 5/8] chore(scripts): sync engines.vscode with @types/vscode in dep update --- scripts/wfb_dep_update.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scripts/wfb_dep_update.sh b/scripts/wfb_dep_update.sh index 3bf71e9..95cec09 100755 --- a/scripts/wfb_dep_update.sh +++ b/scripts/wfb_dep_update.sh @@ -48,6 +48,19 @@ for MODULE in "${NPM_MODULES[@]}"; do # support yet, which crashes `npm run lint`. Keep pinned to ^9 until # eslint-config-next ships a compatible eslint-plugin-react. npx --yes npm-check-updates -u --reject "typescript,@typescript-eslint/*" + + # ncu only touches dependency ranges, not engines.vscode, so keep the + # minimum supported VS Code version in lockstep with @types/vscode here. + # vsce refuses to package when engines.vscode is behind @types/vscode. + node -e ' + const fs = require("fs"); + const pkg = JSON.parse(fs.readFileSync("package.json", "utf8")); + const typesVersion = pkg.devDependencies?.["@types/vscode"]?.replace(/^[^0-9]*/, ""); + if (typesVersion && pkg.engines?.vscode) { + pkg.engines.vscode = `^${typesVersion}`; + fs.writeFileSync("package.json", JSON.stringify(pkg, null, 2) + "\n"); + } + ' rm -rf node_modules package-lock.json npm install --legacy-peer-deps npm dedupe --legacy-peer-deps From ba6719d230139f9ffd611d057ad70ea25ff3a336 Mon Sep 17 00:00:00 2001 From: Wikid82 Date: Thu, 20 Aug 2026 11:09:33 -0400 Subject: [PATCH 6/8] fix(ci): allow manual re-run of publish job for existing releases --- .github/workflows/release-please.yml | 41 +++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 1ef3843..4d8d078 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -4,6 +4,15 @@ on: push: branches: [main] workflow_dispatch: + inputs: + tag: + description: >- + Release tag to publish (e.g. v1.5.1). Only needed to manually + (re)run the publish job for a release that already exists — e.g. + after a packaging fix, when the tag itself predates the fix. + Leave blank for a normal run. + required: false + type: string permissions: contents: write @@ -29,7 +38,7 @@ jobs: # workflow would silently never run. publish: needs: release-please - if: ${{ needs.release-please.outputs.release_created == 'true' }} + if: ${{ needs.release-please.outputs.release_created == 'true' || (github.event_name == 'workflow_dispatch' && github.event.inputs.tag != '') }} runs-on: ubuntu-latest permissions: contents: write @@ -37,10 +46,28 @@ jobs: VS_MARKETPLACE_TOKEN: ${{ secrets.VS_MARKETPLACE_TOKEN }} OPEN_VSX_TOKEN: ${{ secrets.OPEN_VSX_TOKEN }} steps: + # On a normal run, release-please just created the release and handed us its tag/upload_url + # directly. On a manual re-run (release already exists, e.g. retrying after a packaging fix), + # those outputs are empty, so look the release up by the tag the user supplied instead. + - name: Resolve release tag and upload URL + id: resolve + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + if [ "${{ needs.release-please.outputs.release_created }}" = "true" ]; then + echo "tag=${{ needs.release-please.outputs.tag_name }}" >> "$GITHUB_OUTPUT" + echo "upload_url=${{ needs.release-please.outputs.upload_url }}" >> "$GITHUB_OUTPUT" + else + TAG="${{ github.event.inputs.tag }}" + UPLOAD_URL=$(gh api "repos/${{ github.repository }}/releases/tags/${TAG}" --jq '.upload_url') + echo "tag=${TAG}" >> "$GITHUB_OUTPUT" + echo "upload_url=${UPLOAD_URL}" >> "$GITHUB_OUTPUT" + fi + - name: Checkout release tag uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: - ref: ${{ needs.release-please.outputs.tag_name }} + ref: ${{ steps.resolve.outputs.tag }} - name: Setup Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 @@ -68,10 +95,15 @@ jobs: # # Lets users grab the .vsix straight from the GitHub Release and "Install from VSIX...", # no Marketplace/Open VSX account or token needed for this path. + # + # Only meaningful right after release-please creates the (draft) release. On a manual + # re-run the release is already published and non-draft, so attaching again would just + # 422 on the duplicate asset name — skip both steps in that case. - name: Attach VSIX to GitHub Release + if: ${{ needs.release-please.outputs.release_created == 'true' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - UPLOAD_URL: ${{ needs.release-please.outputs.upload_url }} + UPLOAD_URL: ${{ steps.resolve.outputs.upload_url }} run: | VSIX_FILE=$(ls *.vsix) BASE_URL="${UPLOAD_URL%%\{*}" @@ -82,9 +114,10 @@ jobs: "${BASE_URL}?name=${VSIX_FILE}" - name: Publish GitHub Release + if: ${{ needs.release-please.outputs.release_created == 'true' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - UPLOAD_URL: ${{ needs.release-please.outputs.upload_url }} + UPLOAD_URL: ${{ steps.resolve.outputs.upload_url }} run: | RELEASE_ID=$(echo "${UPLOAD_URL}" | sed -E 's#.*/releases/([0-9]+)/.*#\1#') gh api -X PATCH "repos/${{ github.repository }}/releases/${RELEASE_ID}" -f draft=false From a22b97ca9c9d1bf5210a9b87e0435d8c5ccb358d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Aug 2026 11:12:21 -0400 Subject: [PATCH 7/8] chore(main): release workspace-file-bookmarks 1.5.2 (#32) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e20d7e8..453ca4c 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.5.1" + ".": "1.5.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index c673a23..df62f18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.5.2](https://github.com/Wikid82/Workspace-File-Bookmarks/compare/workspace-file-bookmarks-v1.5.1...workspace-file-bookmarks-v1.5.2) (2026-08-20) + + +### Bug Fixes + +* **ci:** allow manual re-run of publish job for existing releases ([ba6719d](https://github.com/Wikid82/Workspace-File-Bookmarks/commit/ba6719d230139f9ffd611d057ad70ea25ff3a336)) + ## [1.5.1](https://github.com/Wikid82/Workspace-File-Bookmarks/compare/workspace-file-bookmarks-v1.5.0...workspace-file-bookmarks-v1.5.1) (2026-08-20) diff --git a/package-lock.json b/package-lock.json index f302ca2..343c9c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "workspace-file-bookmarks", - "version": "1.5.1", + "version": "1.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "workspace-file-bookmarks", - "version": "1.5.1", + "version": "1.5.2", "devDependencies": { "@types/node": "^26.2.0", "@types/vscode": "^1.134.0", diff --git a/package.json b/package.json index a4e87e1..f2beadd 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Bookmark files across multi-repo VS Code workspaces for quick access.", "publisher": "Wikid82", "private": false, - "version": "1.5.1", + "version": "1.5.2", "icon": "media/icon.png", "categories": [ "Other" From 56cebf510c3369efbed39f25f5cd62787507198b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Aug 2026 11:25:57 -0400 Subject: [PATCH 8/8] chore(main): release workspace-file-bookmarks 1.5.3 (#34) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 453ca4c..1adaf63 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.5.2" + ".": "1.5.3" } diff --git a/CHANGELOG.md b/CHANGELOG.md index df62f18..8ef69c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.5.3](https://github.com/Wikid82/Workspace-File-Bookmarks/compare/workspace-file-bookmarks-v1.5.2...workspace-file-bookmarks-v1.5.3) (2026-08-20) + + +### Bug Fixes + +* **scripts:** use built-in npm audit instead of missing audit:ci script ([f281cab](https://github.com/Wikid82/Workspace-File-Bookmarks/commit/f281cab4a11c7483b741f20fb711808e36d4333b)) + ## [1.5.2](https://github.com/Wikid82/Workspace-File-Bookmarks/compare/workspace-file-bookmarks-v1.5.1...workspace-file-bookmarks-v1.5.2) (2026-08-20) diff --git a/package-lock.json b/package-lock.json index 343c9c0..d5878f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "workspace-file-bookmarks", - "version": "1.5.2", + "version": "1.5.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "workspace-file-bookmarks", - "version": "1.5.2", + "version": "1.5.3", "devDependencies": { "@types/node": "^26.2.0", "@types/vscode": "^1.134.0", diff --git a/package.json b/package.json index f2beadd..236ab63 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Bookmark files across multi-repo VS Code workspaces for quick access.", "publisher": "Wikid82", "private": false, - "version": "1.5.2", + "version": "1.5.3", "icon": "media/icon.png", "categories": [ "Other"