원클릭으로
release
Cut a bnot release — compute next version, push main, and create a GitHub release that triggers the build/sign/notarize workflow.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Cut a bnot release — compute next version, push main, and create a GitHub release that triggers the build/sign/notarize workflow.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | release |
| description | Cut a bnot release — compute next version, push main, and create a GitHub release that triggers the build/sign/notarize workflow. |
| disable-model-invocation | true |
| argument-hint | [patch|minor|major|x.y.z] # omit for patch bump |
| allowed-tools | Bash(gh:*), Bash(git:*) |
Cut a new bnot release. The user invoked /release $ARGUMENTS.
The release is triggered by creating a GitHub Release (gh release create) with a semver tag. The release.yml workflow fires on release: created, reads the version from the tag, writes it into apps/desktop/tauri.conf.json and apps/desktop/Cargo.toml inside the runner only (not committed back), then builds, signs, notarizes, and uploads the universal .app + DMG + updater artifacts.
Never bump version strings in the repo. The workflow owns them.
Run these in parallel, then report any failures and stop:
git rev-parse --abbrev-ref HEAD — must be main. If not, stop and ask.git status --porcelain — must be empty (no dirty working tree). If dirty, stop and tell the user to commit or stash first. Do NOT auto-commit.git log origin/main..HEAD --oneline — capture the unpushed commits; they're the release payload.gh auth status — must be authenticated. If not, stop.Get the latest release tag:
gh release list --limit 1 --json tagName,isDraft,isPrerelease
Strip the leading v to get the base version (e.g., v0.1.16 → 0.1.16). Then apply $ARGUMENTS:
patch → bump patch (0.1.16 → 0.1.17)minor → bump minor, reset patch (0.1.16 → 0.2.0)major → bump major, reset minor+patch (0.1.16 → 1.0.0)x.y.z (exact semver) → use as-isValidate the final version against ^[0-9]+\.[0-9]+\.[0-9]+$ — the workflow rejects non-semver tags. If $ARGUMENTS is none of the above, stop and ask.
Check the tag doesn't already exist on remote:
git ls-remote --tags origin "refs/tags/v$VERSION"
If it returns anything, stop — the tag already exists.
State in one line: "Cutting vX.Y.Z from main at <short-sha> with N commits since vPREVIOUS." Show the commit subjects (one line each). Then ask for confirmation before pushing. In auto mode, proceed if there are no red flags; otherwise still ask.
git push origin main
Must succeed before creating the release, or the workflow would check out code without the commits being released.
gh release create "v$VERSION" --title "v$VERSION" --generate-notes --target main
--generate-notes fills the body from PRs/commits since the previous tag. --target main pins the tag to the pushed HEAD.
Print the release URL from gh release view "v$VERSION" --json url -q .url and mention that the workflow is running — direct the user to gh run list --workflow=release.yml --limit=1 or the Actions tab to watch it. Do NOT poll the workflow unless the user asks.
version fields in apps/desktop/tauri.conf.json, packages/sidecar/package.json, apps/desktop/Cargo.toml, or packages/bridge/Cargo.toml. The workflow handles it.git tag locally — gh release create creates the tag on the remote as part of the release.--force push or reuse an existing tag.