with one click
release
// Create and publish a new release of airflow-blueprint. Bumps version, runs checks, opens a PR, merges, tags, publishes to PyPI, and creates GitHub release notes.
// Create and publish a new release of airflow-blueprint. Bumps version, runs checks, opens a PR, merges, tags, publishes to PyPI, and creates GitHub release notes.
| name | release |
| description | Create and publish a new release of airflow-blueprint. Bumps version, runs checks, opens a PR, merges, tags, publishes to PyPI, and creates GitHub release notes. |
| disable-model-invocation | true |
| user-invocable | true |
| argument-hint | ["version"] |
You are releasing version $ARGUMENTS of the airflow-blueprint package. Follow every step in order. Do not skip steps. Stop and ask the user if anything fails.
0.3.0, 1.0.0). Reject pre-release suffixes unless the user explicitly asked for one.blueprint/__init__.py and confirm the current __version__ is older than $ARGUMENTS.0.2.1) or a minor/major release (patch component is 0, e.g. 0.3.0, 1.0.0).Run all three in parallel:
uv run ruff check blueprint/ tests/uv run ruff format --check blueprint/ tests/uv run pytest tests/ -v (unit and integration tests)All must pass before continuing.
Patch releases are made from a release branch off the previous tag, not from main. This allows bug fixes to be released without pulling in unreleased feature work on main.
Find the previous tag in the same minor series (e.g. for 0.2.1 use v0.2.0, for 0.2.2 use v0.2.1).
git checkout -b release/v$ARGUMENTS <previous_tag>Ask the user which commits to include. Show them the commits on main since the previous tag to help them choose:
git log <previous_tag>..main --onelineCherry-pick each selected commit onto the release branch:
git cherry-pick <commit_sha>If any cherry-pick has conflicts, stop and ask the user for guidance.
blueprint/__init__.py: set __version__ = "$ARGUMENTS"git add blueprint/__init__.pygit commit -m "Release v$ARGUMENTS"git push -u origin release/v$ARGUMENTSgit tag v$ARGUMENTSgit push origin v$ARGUMENTSThis triggers the release workflow which builds and publishes to PyPI and TestPyPI.
Minor and major releases are made from main via a PR.
git checkout -b release/v$ARGUMENTSblueprint/__init__.py: set __version__ = "$ARGUMENTS"git add blueprint/__init__.pygit commit -m "Release v$ARGUMENTS"git push -u origin release/v$ARGUMENTSgh pr create --title "Release v$ARGUMENTS" --body "Bump version to $ARGUMENTS."
gh pr checks <PR_NUMBER> --watchgh pr merge <PR_NUMBER> --squash
git checkout main && git pullgit tag v$ARGUMENTSgit push origin v$ARGUMENTSThis triggers the release workflow which builds and publishes to PyPI and TestPyPI.
gh run list --branch v$ARGUMENTS --limit 1gh run watch <RUN_ID>Before creating the release, analyze all commits since the last tag to draft release notes. Use git log <previous_tag>..v$ARGUMENTS --oneline and read the relevant diffs to understand each change.
Structure the notes as:
## What's new
### Feature title (PR #)
Short description of the feature and how to use it.
(repeat for each feature)
---
## Breaking changes
### Change title
Description of what changed, what the old behavior was, and how to migrate.
(only include this section if there are breaking changes)
---
**Full Changelog**: https://github.com/astronomer/blueprint/compare/<previous_tag>...v$ARGUMENTS
Guidelines:
gh release create v$ARGUMENTS --title "v$ARGUMENTS" --notes "<drafted notes>"
git branch -d release/v$ARGUMENTS