release-workflow
Guides release preparation and execution for ai-todo. Use when the user asks to 'prepare release', 'execute release', 'release', or mentions creating a new version.
Best use case
release-workflow is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Guides release preparation and execution for ai-todo. Use when the user asks to 'prepare release', 'execute release', 'release', or mentions creating a new version.
Teams using release-workflow should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/release-workflow/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How release-workflow Compares
| Feature / Agent | release-workflow | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Guides release preparation and execution for ai-todo. Use when the user asks to 'prepare release', 'execute release', 'release', or mentions creating a new version.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Release Workflow for ai-todo ## Quick Reference - **Prepare:** `./release/release.sh --prepare [--beta] [--set-version X.Y.Z] --summary release/AI_RELEASE_SUMMARY.md` - **Dry Run:** `./release/release.sh --prepare --dry-run` (preview without committing) - **Execute:** `./release/release.sh --execute` - **Abort:** `./release/release.sh --abort [version]` (cleanup failed release) - **Linear Tracking:** Release workflow integrated with Linear issues (auto-updates status) - **Detailed docs:** [release/RELEASE_PROCESS.md](../../../release/RELEASE_PROCESS.md) ## Prepare a Release When user asks to "prepare release" or "prepare beta release": 1. **Check Linear for release issue:** - Search Linear for release-related issues: `user-linear.list_issues` with filters for release keywords - **If no issue found:** ⚠️ Warn "No Linear release issue found. Do you want to proceed anyway?" - **If one issue found:** Show issue details and confirm - **If multiple issues found:** Present list and ask user to select one - **Once confirmed:** Mark issue as "In Progress" using `user-linear.update_issue` - **Store issue ID** for later updates 2. **Pre-flight checks:** Verify repository is ready for release: - **Check branch:** `git branch --show-current` (must be `main`) - **Check sync:** `git fetch origin && git status` (must be in sync with origin/main) - **Check clean:** `git status --porcelain` (must be empty - no uncommitted changes) - **If any check fails:** ⚠️ Warn user with specific issue and ask "Do you want to proceed anyway?" - **If user declines:** Stop and let them fix the issue first. 3. **Wait for CI:** `./scripts/wait-for-ci.sh` 4. **Generate summary:** Create 2-4 paragraphs highlighting user-facing changes. Save to `release/AI_RELEASE_SUMMARY.md`. - **For beta-to-beta releases:** Analyze commits since the last beta tag. - **For stable releases (graduating from beta):** Analyze ALL commits since the last **stable** release (not the last beta). This ensures the summary covers the entire beta cycle. - See "Generating Release Summary" section below for detailed guidance. 5. **Commit and push summary:** The release script requires a clean repository. - `git add release/AI_RELEASE_SUMMARY.md` - `git commit -m "release: Add AI-generated summary for v[version]"` - `git push` 6. **Run prepare:** `./release/release.sh --prepare [--beta] --summary release/AI_RELEASE_SUMMARY.md` 7. **Show preview to user:** Display the proposed release notes with clickable link. - Show `release/RELEASE_NOTES.md` summary/preview (first ~20 lines) - Provide clickable markdown link: `[release/RELEASE_NOTES.md](release/RELEASE_NOTES.md)` (not inline code) 8. **Update Linear issue:** - Read `release/RELEASE_NOTES.md` content - Post content to Linear issue as comment using `user-linear.create_comment` - **Include clickable link:** Add link to full notes at top of comment: `📋 Full Release Notes: [release/RELEASE_NOTES.md](https://github.com/fxstein/ai-todo/blob/main/release/RELEASE_NOTES.md)` - Mark issue as "In Review" using `user-linear.update_issue` 9. **STOP.** Wait for user approval before proceeding. ## Generating Release Summary **Role:** You are a Technical Release Manager for a professional Open Source project. **Task:** Draft a release summary based on commit messages for **end-users** (not developers). **Commit Range:** - **For beta-to-beta releases:** Analyze commits since the last beta tag (e.g., `v4.0.0b2..HEAD`) - **For stable releases (graduating from beta):** Analyze ALL commits since the last stable release (e.g., `v3.0.2..HEAD`) **Constraints & Formatting:** 1. **Format:** Write exactly 2-4 paragraphs of narrative text. Do not use bulleted lists or markdown headers (e.g., no `#` or `##`). 2. **Content:** Focus only on the most significant features, user-facing changes, and critical fixes. Filter out minor chores, typo fixes, or internal refactors unless they directly impact end users. 3. **Documentation:** If commits added new documentation files (`.md`, `.pdf`), mention them with direct GitHub links: - Get repo URL: `git remote get-url origin` (convert SSH to HTTPS if needed) - Format: `[filename](https://github.com/user/repo/blob/main/path/to/file.md)` 4. **Tone:** Professional, concise, and encouraging. Write for users who want to understand what's new and why they should upgrade. 5. **Output:** Save to `release/AI_RELEASE_SUMMARY.md` **Example Structure:** ``` This release focuses on [theme/primary improvement]. [Key feature 1] provides [user benefit]. [Key feature 2] enhances [capability]. [Second major area of improvement]. [Specific change] now allows users to [benefit]. [Another change] improves [aspect] by [improvement]. Additional improvements include [grouped minor features]. Several bug fixes improve robustness including [specific fixes that matter to users]. ``` **Generate Commits:** ```bash # For beta-to-beta: git log v4.0.0b2..HEAD --pretty=format:"%h %s" --no-merges # For stable (graduating from beta): git log v3.0.2..HEAD --pretty=format:"%h %s" --no-merges ``` ## Execute a Release When user asks to "execute release": 1. **Run execute:** `./release/release.sh --execute` 2. **Monitor CI:** Watch GitHub Actions until successful deployment: - Poll `gh run list` for latest workflow run - Wait for "completed" status with "success" conclusion - If CI fails, report error and STOP (see Error Handling section) 3. **Update Linear issue:** - Read `release/RELEASE_SUMMARY.md` content - Post release summary to Linear issue using `user-linear.create_comment` - Include PyPI link: `https://pypi.org/project/ai-todo/[version]/` - Include GitHub release link from workflow output - Mark issue as "Done" using `user-linear.update_issue` ## Abort a Release When user asks to "abort release": 1. **Run abort:** `./release/release.sh --abort [version]` 2. **Update Linear issue (if exists):** - Post abort summary to Linear issue using `user-linear.create_comment` - Include: reason for abort, version that was aborted, current state - Mark issue as "Todo" using `user-linear.update_issue` (reset for retry) ## Error Handling **If ANY error occurs:** 1. **STOP IMMEDIATELY.** 2. Report the error. 3. **If Linear issue exists:** Post error details to issue 4. **WAIT FOR USER.** Do not attempt auto-recovery. ## Forbidden Actions - ❌ Never auto-execute after prepare. - ❌ Never bypass CI/CD failures. - ❌ **NEVER use `--no-verify` on git commits.** ## Additional Resources - **Detailed Process:** [release/RELEASE_PROCESS.md](../../../release/RELEASE_PROCESS.md) - **Version Strategy:** Beta vs Stable release guidelines in RELEASE_PROCESS.md - **Migration Handling:** See RELEASE_PROCESS.md for adding migrations to releases - **Release Scripts:** All scripts are in `release/` directory