一键导入
release
Cut a new Bloom Engine release — bump package.json if requested, commit, tag, push, create GitHub Release, and watch the gated release pipeline
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Cut a new Bloom Engine release — bump package.json if requested, commit, tag, push, create GitHub Release, and watch the gated release pipeline
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | release |
| description | Cut a new Bloom Engine release — bump package.json if requested, commit, tag, push, create GitHub Release, and watch the gated release pipeline |
Bloom is a library, not a CLI. It's consumed by games as "bloom": "file:../../" or (eventually) via npm. The release event therefore is:
package.json is the version to ship.vX.Y.Z..github/workflows/release.yml, which gates on the Tests workflow passing for the same SHA and then creates the GitHub Release.Unlike Perry, Bloom does not bump the patch version on every commit. The version in package.json is bumped explicitly at release time. /release can do the bump for you if you pass patch / minor / major, or you can bump it in a regular commit first and just run /release to tag HEAD.
git status — must be clean (unless we're about to do a patch/minor/major bump, in which case a dirty package.json alone is acceptable only if you are the one about to edit it).git rev-parse --abbrev-ref HEAD — must be main. If not, STOP and ask.git fetch origin && git log HEAD..origin/main --oneline — must be empty. If origin is ahead, pull first.package.json version field.$ARGUMENTS is patch / minor / major:
package.json.git add package.json && git commit -m "chore(release): vX.Y.Z".package.json version is the release version. Do not bump.git rev-parse "vX.Y.Z" 2>/dev/null && echo "tag exists — aborting" && exit 1
git ls-remote --tags origin "vX.Y.Z" | grep -q "vX.Y.Z" && echo "tag exists on origin — aborting" && exit 1
If the tag already exists locally or on origin, STOP. Either the release already shipped or someone started it and didn't finish — don't silently duplicate. Retagging a published version is a cardinal sin.
last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$last_tag" ]; then
git log "$last_tag"..HEAD --oneline
else
git log --oneline -20 # first release — no previous tag
fi
Group the subjects mentally by feat: / fix: / perf: / docs: / chore:. These become the "Highlights / Features / Fixes" sections in the release body.
# If step 2 created a bump commit:
git push origin main
git tag "vX.Y.Z"
git push origin "vX.Y.Z"
The tag push fires two workflows in parallel:
test.yml — full CI matrix (macOS / Linux / Windows builds, shared-crate tests, WASM build)release.yml — its await-tests job polls for the test.yml run on the same SHA and gates the release on itgh release create "vX.Y.Z" \
--title "vX.Y.Z" \
--notes "$(cat <<'EOF'
## Highlights
- ...
## Features
- ...
## Fixes
- ...
## Infrastructure
- ...
EOF
)"
If $ARGUMENTS contained free-text highlights (anything other than the patch/minor/major keywords), seed the "Highlights" section from it.
If you skip the gh release create step, release.yml's github-release job will auto-create a release with --generate-notes once the gate passes. The explicit-body path is preferred when there's narrative worth writing; the auto-notes fallback keeps the release from just not existing if something goes sideways.
gh run watch $(gh run list --workflow="Release" --limit 1 --json databaseId --jq '.[0].databaseId')
Expected timeline:
Tests finishes in ~15-25 min (Linux + Windows Jolt cmake build dominates cold runs)Release await-tests unblocks, then github-release creates the release if neededIf Tests failed, await-tests will fail loudly and the release will not be created. Do not re-tag vX.Y.Z — fix on main, bump to vX.Y.(Z+1), and /release that. Retagging a published tag breaks npm/git consumers that already resolved the old SHA.
Tests + Release both went greenpackage.json version + tagawait-tests blocks release creation. Fix on main, bump patch, /release again. The stale tag is harmless noise — no GH release body, no assets.chore(release): vX.Y.Z, one file.git add -A anywhere in this skill — scoped git add package.json only.gh release edit vX.Y.Z --notes "...".workflow_dispatch of release.yml exists for emergencies only.