with one click
publish
// Bump version, update CHANGELOG, package the VSIX, publish to Open VSX and VS Code Marketplace, then commit and tag. Invoke via /publish [patch|minor|major] — default patch.
// Bump version, update CHANGELOG, package the VSIX, publish to Open VSX and VS Code Marketplace, then commit and tag. Invoke via /publish [patch|minor|major] — default patch.
| name | publish |
| description | Bump version, update CHANGELOG, package the VSIX, publish to Open VSX and VS Code Marketplace, then commit and tag. Invoke via /publish [patch|minor|major] — default patch. |
End-to-end release flow for this VSCode extension. Every step is mandatory; stop and report if any step fails — do NOT continue past a failure.
patch, minor, or major. Default: patch.Run these checks in parallel and abort on any failure:
git rev-parse --abbrev-ref HEAD — must be main.git status --porcelain — must be empty (clean working tree). If dirty, stop and list the dirty files; do not stash.test -n "$OVSX_PAT" (via printenv OVSX_PAT | head -c 4) — must be non-empty. If missing, stop with:
OVSX_PATnot set. Create a token at https://open-vsx.org/user-settings/tokens thenexport OVSX_PAT=<token>and retry.
test -n "$VSCE_PAT" (via printenv VSCE_PAT | head -c 4) — must be non-empty. If missing, stop with:
VSCE_PATnot set. Create an Azure DevOps PAT (scope: Marketplace → Manage, org: All accessible) at https://dev.azure.com → User settings → Personal access tokens, thenexport VSCE_PAT=<token>and retry.
version from packages/extension/package.json. The repo-root package.json has no version — it's the monorepo manifest.Semver bump based on arg:
x.y.z → x.y.(z+1)x.y.z → x.(y+1).0x.y.z → (x+1).0.0State the old → new version in one line before proceeding.
Get commits since the last tag:
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$LAST_TAG" ]; then
git log "$LAST_TAG"..HEAD --pretty=format:'- %s'
else
git log --pretty=format:'- %s'
fi
Filter the output:
Merge ..., Bump version ..., Release v..., and any line matching the auto-generated commit from step 7.If the list is empty, stop and report: "No commits since $LAST_TAG — nothing to release."
Bump the extension's package.json (NOT the repo root — that one has no version). pnpm-workspace, no lockfile to bump:
(cd packages/extension && npm version <patch|minor|major> --no-git-tag-version)
Verify the new version in packages/extension/package.json matches what you computed in step 2.
Prepend a new section to packages/extension/CHANGELOG.md directly under the # Changelog heading. Format:
## <new-version>
<bullets from step 3>
Leave a blank line between the new section and the previous one. Preserve all existing content.
CRITICAL: do NOT just
tscandvsce packageseparately. The TS output is unbundled — itrequire()s@aidlc/coreandjs-yaml, which aren't shipped with--no-dependencies. That produces a VSIX that throws on activation (command 'aidlc.openBuilder' not found). Thepackagescript in packages/extension/package.json does typecheck → esbuild bundle →vsce package --no-dependenciesin the right order; always go through it.
Run from the repo root:
pnpm package:extension
This script (see root package.json) runs pnpm --filter aidlc package, which produces packages/extension/aidlc-<new-version>.vsix. The bundled out/extension.js should be ~600–700kb; if you see ~10kb, the bundle step didn't run — stop and investigate before publishing.
Verify the .vsix file exists before moving on:
ls packages/extension/aidlc-<new-version>.vsix
git add packages/extension/package.json packages/extension/CHANGELOG.md
git commit -m "Release v<new-version>"
git tag "v<new-version>"
Do NOT amend. Do NOT use --no-verify.
npx -y --registry=https://registry.npmjs.org/ ovsx publish packages/extension/aidlc-<new-version>.vsix -p "$OVSX_PAT"
If this fails, the commit and tag already exist locally — report the failure clearly and tell the user:
Local commit + tag
v<new-version>created, but Open VSX publish failed. Fix the error, then retry withnpx -y --registry=https://registry.npmjs.org/ ovsx publish packages/extension/aidlc-<new-version>.vsix -p "$OVSX_PAT". Do NOT re-run /publish.
npx -y --registry=https://registry.npmjs.org/ @vscode/vsce publish --packagePath packages/extension/aidlc-<new-version>.vsix -p "$VSCE_PAT"
If this fails, Open VSX already succeeded and the commit/tag exist locally — report the failure and tell the user:
Open VSX published + local tag
v<new-version>created, but VS Code Marketplace publish failed. Fix the error (usually a stale/invalidVSCE_PAT), then retry withnpx -y --registry=https://registry.npmjs.org/ @vscode/vsce publish --packagePath packages/extension/aidlc-<new-version>.vsix -p "$VSCE_PAT". Do NOT re-run /publish.
git push origin main
git push origin "v<new-version>"
One concise block:
git push --force, git reset --hard, or delete tags without explicit user instruction..vsix file (it's gitignored — confirm by checking .gitignore has *.vsix).[HINT] Download the complete skill directory including SKILL.md and all related files