一键导入
eforge-release
Release a new version of eforge with release notes, changelog, and GitHub Release - supports patch, minor, and major release types
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Release a new version of eforge with release notes, changelog, and GitHub Release - supports patch, minor, and major release types
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Enqueue a source for the eforge daemon to build — PRD file, inline description, or conversation context. Use when the user wants to hand work off to eforge.
Initialize or edit eforge/config.yaml team-wide settings, with validation via daemon tools
Author eforge TypeScript extensions from a natural-language request using the existing extension tooling and docs/examples
Inspect the recovery verdict for a failed PRD and apply the recommended action (retry, continue-repair, abandon, or manual)
Create a new agent runtime profile in eforge/profiles/
List, inspect, and switch agent runtime profiles
| name | eforge-release |
| description | Release a new version of eforge with release notes, changelog, and GitHub Release - supports patch, minor, and major release types |
| argument-hint | [--patch|--minor|--major] |
| disable-model-invocation | true |
Release a new version of eforge. Parses the release type from arguments, checks git status, optionally commits staged changes, generates release notes from the git log, updates CHANGELOG.md, bumps the version on a release PR, tags merged main, pushes the tag, and creates a GitHub Release.
Read $ARGUMENTS to determine the release type:
--patch or empty/unrecognized - patch (default)--minor - minor--major - majorStore the resolved bump type (one of patch, minor, major) for use in later steps.
Run git status --porcelain to determine the repo state.
Three possible outcomes:
M , A , D , R - no ?? or M or D lines) - proceed to Step 3??, M, D, or MM lines) - STOP. Tell the user there are unstaged/untracked changes and they need to stage or stash them first. List the problematic files.Use the /git:commit-message-policy skill to create a commit for the staged changes. Follow the standard commit workflow:
git diff --cached to see what's stagedgit log --oneline -5 for recent commit styleGenerate release notes from the git log between the previous tag and HEAD.
Find the previous tag:
git describe --tags --abbrev=0
If no tags exist, fall back to the root commit:
git rev-list --max-parents=0 HEAD
Collect commits:
git log <PREV_TAG>..HEAD --oneline
Filter noise - remove any lines matching these patterns:
^\w+ \d+\.\d+\.\d+$ (e.g., 0.2.5)enqueue( (eforge queue entries)cleanup( (eforge cleanup commits)plan( (eforge planning artifacts)Merge (merge commits)bump plugin versionClean up commit messages:
plan-NN- and hardening-NN- prefixes from conventional commit scopes (e.g., feat(plan-01-foo): bar becomes feat(foo): bar, feat(hardening-03-foo): bar becomes feat(foo): bar): )coreKnown scope → package mappings:
engine → engineclient → clientmonitor → monitormonitor-ui → monitor-uieforge → eforge (CLI)pi-eforge → pi-eforgeplugin → plugin (Claude Code plugin)mcp → mcpbackends → backendsdeps, dependencies → depsqueue → queuerevert-* or revert → coregap-close → corecleanup → skip these commits entirely (they're PRD cleanup)backend-new → backend-new)Deduplicate by description text - keep only the first occurrence of each description.
Group by conventional commit type into markdown sections:
feat - ### Featuresfix - ### Bug Fixesrefactor - ### Refactoringperf - ### Performancedocs - ### Documentationchore, ci, build, test - ### Maintenance### OtherWithin each section, format entries as:
- **<package>**: <description>
For example:
- **pi-eforge**: add searchable overlays for provider and model selection
- **engine**: subprocess-per-build with crash-safe reconciler
- **core**: Parent scheduler owns sessionId and emits session:start at spawn
Sort entries alphabetically by package name within each section.
Omit empty sections. If no meaningful commits remain after filtering, use "Maintenance release" as the release notes.
Store the generated markdown for use in Steps 5 and 7.
Compute the new version before bumping by reading the source-of-truth version from packages/eforge/package.json and incrementing the appropriate component:
node -e "
const v = require('./packages/eforge/package.json').version.split('.');
const bump = '$BUMP_TYPE';
if (bump === 'major') { v[0]++; v[1]=0; v[2]=0; }
else if (bump === 'minor') { v[1]++; v[2]=0; }
else { v[2]++; }
console.log(v.join('.'));
"
(Where $BUMP_TYPE is the resolved bump type from Step 1.)
Note: the root package.json has no version field - this is a pnpm workspace and packages/eforge/package.json is the lockstep source of truth.
Create or update CHANGELOG.md:
CHANGELOG.md does not exist, create it with a # Changelog heading# Changelog heading line:## [X.Y.Z] - YYYY-MM-DD
<release notes from Step 4>
## [ sections. If entries are removed, ensure this footer exists at the bottom of the file:---
For older releases, see [GitHub Releases](https://github.com/eforge-build/eforge/releases).
Commit the changelog:
git add CHANGELOG.md
git commit -m "docs: update CHANGELOG.md for vX.Y.Z"
Use the protected-main flow. Create a release branch, bump without tagging, open a PR, and enable auto-merge:
git checkout -b release/v<version>
pnpm release <bump-type> --no-tag
git push -u origin release/v<version>
gh pr create --base main --head release/v<version> --title "release: v<version>" --body-file <notes-file>
gh pr merge release/v<version> --auto --merge --delete-branch
(Where <bump-type> is the resolved bump type from Step 1.)
pnpm release --no-tag (scripts/bump-version.mjs) bumps packages/eforge/package.json (source of truth), propagates the version to the other lockstep packages (client, engine, monitor, pi-eforge), and commits the lockstep package/version surfaces with message X.Y.Z, but does not create a tag.
After the PR merges, update main, verify the version, create the annotated tag on the merged main commit, and push only that tag:
git checkout main
git pull --ff-only origin main
git tag -a v<version> -m "v<version>"
git push origin refs/tags/v<version>
Create a GitHub Release from the generated release notes:
gh release create v<version> --title "v<version>" --notes-file <notes-file>
Report: