agentleFS
crux-clicrux-cli/crux/.claude/skills/release-workflow/SKILL.md

release-workflow

Skill0 starsChanged 8 months agoMITView on GitHub

Ship a feature branch: PR → CI → merge → release → docs. Invoke with: /release-workflow <version>

  • Pipes a download into a shell
  • Commits and pushes

3 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions3 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 3

    1. fxstein/ai-todo★ 16same name
    2. SUDARSHANCHAUDHARI/DroidForge★ 1same name
    3. sametbrr/github-manager★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository4 other files it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

16 rules. 0 are common, 11 are distinctive, and 5 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 11

    Distinctive

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before running this workflow, verify:

    line 15
  2. Distinctive:

    All work is committed (git status is clean)

    line 17
  3. Very specific:

    All tests pass locally: PYTHONPATH=src pytest tests/

    line 18
  4. Very specific:

    Update pyproject.toml with the release version:

    line 23
  5. Distinctive:

    All checks must pass. If any fail:

    line 61
  6. Very specific:

    Read the failure logs: gh run view <run-id> --log-failed

    line 62
  7. Distinctive:

    Wait for completion. If it fails:

    line 94
  8. Distinctive:

    Verify the release works end-to-end by reinstalling from scratch on this system.

    line 130
  9. Very specific:

    Do NOT remove ~/.crux/ — we want to verify the new version works with existing data.

    line 138
  10. Distinctive:

    If a new command was added: run it and check output

    line 161
  11. Distinctive:

    If a command was renamed: verify old name fails and new name works

    line 162
  12. Very specific:

    If auth was changed: run crux mcp auth and check the output

    line 163
  13. Distinctive:

    If the smoke test fails, investigate whether it's a packaging issue (wrong files included) or a code issue (bug in the release).

    line 176
  14. Distinctive:

    If something goes wrong after tagging but before PyPI publish:

    line 180
  15. Distinctive:

    If already published to PyPI, you cannot delete the version.

    line 186
  16. Distinctive:

    Always verify locally before creating the PR

    line 200

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Release Workflow

Ship a feature branch to production: PR → CI → merge → tag → PyPI → docs.

Version argument: The version number is passed as the first argument (e.g., /release-workflow 1.0.2). All steps below use this version.

Prerequisites

Before running this workflow, verify:

  1. You are on a feature branch (not main)
  2. All work is committed (git status is clean)
  3. All tests pass locally: PYTHONPATH=src pytest tests/
  4. The version number follows semver and is greater than the current version in pyproject.toml

Step 1: Bump Version

Update pyproject.toml with the release version:

# In pyproject.toml, change:
version = "<VERSION>"

Commit:

git add pyproject.toml
git commit -m "chore: bump version to <VERSION>"

Step 2: Push Branch & Create PR

git push -u origin HEAD
gh pr create --title "<PR title from branch context>" --body "$(cat <<'EOF'
## Summary
<summarize changes from git log>

## Test plan
- [ ] All unit tests pass
- [ ] All integration tests pass
- [ ] All E2E tests pass
- [ ] Lint passes (ruff check + format)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"

Step 3: Wait for CI

gh pr checks --watch

All checks must pass. If any fail:

  1. Read the failure logs: gh run view <run-id> --log-failed
  2. Fix the issue on the feature branch
  3. Push and re-check

Step 4: Merge PR

gh pr merge --squash --delete-branch

Step 5: Tag Release

git checkout main
git pull
git tag v<VERSION>
git push origin v<VERSION>

This triggers .github/workflows/release.yml which:

  • Runs full CI gate (validate, lint, security, unit tests, integration tests)
  • Builds sdist + wheel
  • Publishes to PyPI via trusted publisher
  • Creates GitHub Release with auto-generated changelog

Step 6: Verify Release Pipeline

gh run list --workflow=release.yml --limit=1
gh run watch

Wait for completion. If it fails:

  • CI gate failure: check test output
  • Build failure: check uv build / twine check output
  • PyPI publish failure: check trusted publisher config in repo settings

Step 7: Deploy Versioned Docs

The docs pipeline does NOT auto-trigger from releases created by GitHub Actions. You must manually dispatch with the version number:

gh workflow run docs.yml -f version=<VERSION>

This deploys the docs as version <VERSION> and sets it as the latest alias.

Verify:

gh run list --workflow=docs.yml --limit=1
gh run watch

Step 8: Final Verification — Remote

# PyPI package available
pip index versions crux-cli

# GitHub release page
gh release view v<VERSION>

# Docs site
open https://crux-cli.github.io/crux/

Step 9: Smoke Test — Fresh Install

Verify the release works end-to-end by reinstalling from scratch on this system.

9a. Uninstall current crux

uv tool uninstall crux-cli

Do NOT remove ~/.crux/ — we want to verify the new version works with existing data.

9b. Reinstall from PyPI via the install script

curl -LsSf https://raw.githubusercontent.com/crux-cli/crux/main/install.sh | sh

9c. Verify version number matches the release

crux version

Expected output should contain <VERSION>. If it shows an older version, the PyPI publish may not have propagated yet — wait 1-2 minutes and retry:

uv tool upgrade crux-cli
crux version

9d. Test a change that shipped with this release

Pick one user-facing change from the release and verify it works. Examples:

  • If a new command was added: run it and check output
  • If a command was renamed: verify old name fails and new name works
  • If auth was changed: run crux mcp auth and check the output
# Example: verify the CLI restructuring shipped
crux mcp --help          # should show add/remove/list/search/upgrade/auth/status
crux project --help      # should show create/install/uninstall/sync/status
crux task --help         # should show run/init/list/clean

# Example: verify a specific feature
crux mcp auth            # should show auth status table (not "not implemented")
crux doctor              # should NOT mention secrets

If the smoke test fails, investigate whether it's a packaging issue (wrong files included) or a code issue (bug in the release).

Rollback

If something goes wrong after tagging but before PyPI publish:

git tag -d v<VERSION>
git push origin :refs/tags/v<VERSION>

If already published to PyPI, you cannot delete the version. Instead:

# Revert the merge on main
git revert <merge-commit-sha>
git push

# Publish a patch version with the fix

Notes

  • The release pipeline requires a PyPI trusted publisher configured in GitHub repo settings
  • The docs pipeline uses mike for versioned documentation
  • Squash merge keeps main history clean — one commit per feature
  • Always verify locally before creating the PR

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.