AgentSkillsCN

release

升级版本、打上标签、推送代码、创建 GitHub Release,并验证 PyPI 发布流程。

SKILL.md
--- frontmatter
name: release
description: Bump version, tag, push, create GitHub Release, and verify PyPI publish.
user-invocable: true
allowed-tools: Read, Edit, Bash, Grep, Glob, AskUserQuestion

Release

Automates the full release process for edictum (Python).

Arguments

  • version (optional): The semver version to release, e.g. /release 0.1.0

Step 1: Pre-flight checks

Run all checks in sequence. Abort immediately on any failure.

  1. Tests:

    code
    Bash: pytest tests/ -v
    

    Abort if tests fail.

  2. Lint:

    code
    Bash: ruff check src/ tests/
    

    Abort if lint fails.

  3. Build (dry run):

    code
    Bash: python -m build --sdist --wheel
    

    Abort if build fails.

  4. Clean working tree:

    code
    Bash: git status --porcelain
    

    Abort if output is non-empty (dirty tree).

  5. Read current version:

    code
    Read: pyproject.toml
    

    Extract the version field from [project] section.

Step 2: Determine new version

  • If a version argument was provided (e.g. /release 0.1.0), use it.
  • If no argument, ask the user:
    code
    AskUserQuestion: "What version should this release be? Current version is {current_version}."
    
  • Validate the version:
    • Must be valid semver (MAJOR.MINOR.PATCH)
    • Must be strictly greater than the current version
    • Abort with a clear message if validation fails

Step 3: Bump version

  1. Edit pyproject.toml:

    code
    Edit: pyproject.toml
    old_string: version = "{current_version}"
    new_string: version = "{new_version}"
    
  2. Commit the change:

    code
    Bash: git add pyproject.toml && git commit -m "chore: bump version to {version}"
    
    • Do NOT include Co-Authored-By in the commit message.

Step 4: Tag and push

code
Bash: git tag v{version}
Bash: git push origin main && git push origin v{version}

Step 5: Create GitHub Release

code
Bash: gh release create v{version} --generate-notes

This auto-generates release notes from commits since the previous tag.

Step 6: Wait and verify

  1. Find the publish workflow run:

    code
    Bash: gh run list --workflow=publish.yml --limit=1 --json databaseId,status --jq '.[0]'
    
  2. Watch it:

    code
    Bash: gh run watch {run_id}
    
  3. Report result:

    • If the run succeeds, confirm to the user: "v{version} published to PyPI successfully."
    • If the run fails, show the logs:
      code
      Bash: gh run view {run_id} --log-failed
      
      And report the failure to the user.

Post-release

After successful publish:

  1. Verify on PyPI: pip index versions edictum
  2. Test install: pip install edictum=={version}

Important Notes

  • Always run pre-flight checks before anything else — never skip them.
  • Never amend a previous commit; always create a new one.
  • The publish workflow (publish.yml) is triggered by the GitHub Release published event.
  • Clean up build artifacts after dry run: rm -rf dist/ *.egg-info