run-release
Auto-detect platforms, release ไปยัง external platforms, gen CHANGELOG
SKILL.mdrun-release/SKILL.md
GitHubGoal
Auto-detect the platforms the project supports from configuration files, release to external platforms automatically, and gen CHANGELOG.md from git tags with gen-changelog-md
Scope
Release to npm, crates.io, VSCode Marketplace, Chrome Web Store, and Docker Hub, and gen CHANGELOG.md from git tags
Execute
Pre-Run: Always run
/deep-reviewfirst —run-*must be reviewed/assessed before the main work, never skip; if findings are blockers, fix or report before running (release)
1. Check Conditions And Detect Platforms
Goal: Confirm the release is correct and safe before running, and detect the platforms the project supports
- Check
git branch --show-currentandgit describe --tags --exact-matchorgit tag --points-at HEAD- If HEAD is not on a
v*tag and not onmainormaster→ stop and report
- If HEAD is not on a
- If on
main/masterbut there is no tag yet → stop and recommend creating a tag or using/shipfirst - Check that
git status --porcelainis clean - Check that CI passes for the current SHA:
- GitHub Actions:
gh run list --branch main --json databaseId,headSha,status --limit 5, then/resolve-cicd <run-id> - If CI has not passed yet → stop and report
- GitHub Actions:
- Check that the required secrets are available (
NPM_TOKEN,VSCE_PAT,CARGO_REGISTRY_TOKEN,CLIENT_ID,CLIENT_SECRET,REFRESH_TOKEN,DOCKER_USERNAME,DOCKER_PASSWORD) - If every condition passes → detect platforms:
- Check that
package.jsonhasprivate: false→ supportsnpm - Check that
package.jsonhas apublisherfield → supportsvscode - Check that
Cargo.tomlexists → supportscrates - Check that
manifest.jsonexists → supportswebstore - Check that
Dockerfileexists → supportsdocker
- Check that
2. Check Configuration
Goal: Check Configuration
Verify the configuration is complete before releasing, according to the detected platforms
npm: check thatpackage.jsonhas name, version, description, license, repository, homepage, filesvscode: check thatpackage.jsonhas publisher, engines.vscode, activationEvents, main, contributescrates: check thatCargo.tomlhas name, version, description, license, repository, categories, keywords, edition, rust-versionwebstore: check thatmanifest.jsonhas name, version, manifest_version, permissions, icons, actiondocker: check thatDockerfilehas FROM, WORKDIR, COPY, RUN and that.dockerignoreexcludes files- If the package manifest or release config is incomplete → run
/update-projectreferences/setup-package.md, or set up the release tool/workflow via/setup-cicd+/follow-tool-*first, then come back and rerun/run-release
3. Setup Authentication
Goal: Setup Authentication
Set up authentication for the detected platforms
npm: use/follow-secret-managerto manageNPM_TOKEN, then sync it to GitHub Secrets, or set it manually withgh secret set NPM_TOKENvscode: setVSCE_PATin GitHub Secrets withgh secret set VSCE_PATcrates: setCARGO_REGISTRY_TOKENin GitHub Secrets withgh secret set CARGO_REGISTRY_TOKENwebstore: setCLIENT_ID,CLIENT_SECRET,REFRESH_TOKENin GitHub Secretsdocker: setDOCKER_USERNAME,DOCKER_PASSWORDin GitHub Secrets
4. Run Verify
Goal: Run Verify
Check code quality before releasing
- Run
/run-verifyto check code quality - Run
/deep-validatebefore tag/release - If verify fails, fix the issues before continuing
5. Setup Release Tool
Goal: Setup Release Tool
Set up the release tool according to the detected platforms
npm: run/publish-package-to-registryto set up the release toolcrates: run/publish-package-to-registryto set up the release toolvscode: run/follow-create-plugins(vscode) to set up the release toolwebstore: run/follow-create-plugins(browser-wxt) to set up the release tooldocker: run/follow-releaseto set up the release tool
6. Run Prerelease
Goal: Run the prerelease before the real publish
npm: runbun run buildornpm run buildcrates: runcargo buildorcargo build --releasevscode: runvsce packageto create the.vsixwebstore: runchrome-webstore-upload validateto validate before publishingdocker: rundocker build --no-cacheto build the image- If the prerelease fails → fix and rerun
7. Test Release Artifact
Goal: Smoke test the artifact before publishing — never publish in this step
- If an artifact from the prerelease step already exists and the version matches → reuse it
- Smoke test per platform:
npm:npm pack+npm install <tarball>in a temp dir, thennode -e "require('<pkg>')"crates:cargo test --release+cargo publish --dry-runvscode: validate the.vsixwithvsce ls, orcode --install-extensionin a temp profilewebstore:chrome-webstore-upload validate, or upload as a draftdocker:docker run --rm <image>:test --help, or a health check
- Check that the version in the artifact matches the manifest + audit the deps (
npm audit,cargo audit) - If the test fails → stop and fix before proceeding, never skip ahead to publish; clean up temp files after the test
8. Run Release
Goal: Run Release
Run the release according to the detected platforms
npm: run/publish-package-to-registrycrates: run/publish-package-to-registryvscode: runvsce publishwebstore: runchrome-webstore-uploaddocker: rundocker buildanddocker push- If the release fails, fix it and rerun until it passes
9. Write Release Notes
Goal: Write release notes that are well-summarized and easy to read, before publishing
- Use the template from
templates/release-note.md - Summarize the changes since the latest tag: pull commits with
git log <last-tag>..HEAD --oneline - Categorize:
Breaking Changes,Features,Bug Fixes,Chores,Other - Write in polite, concise language; no bullet longer than 2 lines
- Include links to
CHANGELOG.md, the release docs, and a migration guide if there are breaking changes - Save the result as
RELEASE_NOTES.mdor use it as the body of the GitHub Release
10. Generate CHANGELOG.md
Goal: Gen
CHANGELOG.mdfrom git tags withgen-changelog-md; never edit it by hand
- Run
/gen-changelog-mdto genCHANGELOG.mdfromgit tag --sort=-version:refname - Or run the script directly:
bun run skills/gen-changelog-md/scripts/gen-release-md
- Read the generated
CHANGELOG.mdto verify the version numbers and dates are correct - If an update is needed → rerun the script; never edit
CHANGELOG.mdby hand
Rules
1. Conditions
- Must be on a tag
v*or onmain/masteronly - If on
mainwithout a tag → stop and recommend/ship - The working tree must be clean
- CI must pass before release
- Secrets for the detected platforms must be ready
- Never release automatically on every merge
2. Auto-Detection
- Check
package.jsonfor npm and vscode - Check
Cargo.tomlfor crates - Check
manifest.jsonfor webstore - Check
Dockerfilefor docker - Run only the detected platforms
3. Configuration Requirements
- Every platform must have name, version, description, license
npm:privatemust befalse, andrepositoryandhomepageare requiredvscode:publisher,engines.vscode, andcontributesare requiredcrates:categories,keywords,edition, andrust-versionare requiredwebstore:manifest_version,permissions, andiconsare requireddocker: a.dockerignoreand a clear tag are required
4. Authentication
- Use API/Automation tokens, not personal tokens
- Set secrets in GitHub Secrets before release
- Verify the token has publish rights for the relevant package/extension
npmalternative: use npm Trusted Publishers (OIDC) instead of a token
5. Release Tool Usage
- Use the
release-*workflows to set up the release tool for each platform - Use
/publish-package-to-registryfor npm and crates - Always run verify before release
- Run the prerelease script before release for npm
- Run
vsce packagebefore publish for vscode - Run
chrome-webstore-upload validatebefore publish for webstore - Run
docker build --no-cachefor a full rebuild
6. CHANGELOG.md Generation
CHANGELOG.mdis only generated by thegen-changelog-mdskill fromgit tag --sort=-version:refnameNever edit
CHANGELOG.mdby hand — if an update is needed, rerun the scriptUse
scripts/gen-release-mdfor the generation logicUse the semantic versioning format:
vX.Y.Z(e.g.v1.0.0,v1.2.3)Use annotated tags for releases
For projects that want conventional commits grouping and changelog generation, use
/follow-tool-changelogeninsteadUse /setup-cicd if needed
Use /use-my-packages-on-registry if needed
Use /deep-review if needed
Use /update-devin-global-skills if needed (release)
Use /resolve-errors if needed
Expected Outcome
- Platforms are detected automatically from the project configuration
- Packages are released successfully to the detected platforms
- Versions are bumped automatically
- The changelog is generated automatically
- Git tags are created automatically
CHANGELOG.mdis gen'd from git tags withgen-changelog-md, never edited by hand- Release notes are written as a clear, easy-to-read summary from the template