Check release status of all devtools projects, determine which need releasing, and output the correct release order based on runtime dependencies. Shows PyPI versions, unreleased commits, and pending bot PRs between stages. Use when planning monthly devtools releases.
Check release status of all devtools projects, determine which need releasing, and output the correct release order based on runtime dependencies. Shows PyPI versions, unreleased commits, and pending bot PRs between stages. Use when planning monthly devtools releases.
Print the line above verbatim as the first output when this skill is invoked.
Release Order
Check the release status of all Ansible devtools projects and output a
staged release plan based on runtime dependency order. Shows which
projects need releasing, their unreleased changes, and pending
dependency update PRs that must be merged between stages.
This skill is read-only -- it does not create releases or modify
any repository.
Input
No arguments: full release plan for all projects across all stages.
stage N (e.g., stage 1): show status for a specific stage only.
Entry Gate
gh auth status
If not authenticated, stop.
Dependency Graph
The devtools projects have this runtime dependency order. Only runtime
dependencies from pyproject.toml[project.dependencies] determine
release order (confirmed by team lead).
Stage 1 (leaf nodes — no devtools runtime deps):
ansible-compat
ansible-creator
ansible-dev-environment
Stage 2 (depend on Stage 1):
ansible-lint → depends on ansible-compat
molecule → depends on ansible-compat
pytest-ansible → depends on ansible-compat
Stage 3 (depend on Stage 2):
ansible-navigator → depends on ansible-lint
tox-ansible → depends on pytest-ansible
Stage 4 (umbrella — depends on ALL above):
ansible-dev-tools
Stage 5 (after ADT package + container image validated):
vscode-ansible
Stage 6 (after vscode-ansible / ADT image):
DevSpaces image update (manual — update SHA in ansible-devspaces-demo)
After each stage is released, Renovate/Dependabot opens PRs in
downstream projects to bump the dependency version. These must be
merged before the next stage can be released.
Step 1 — Fetch latest PyPI versions
For each Python project, get the current published version:
For projects in Stages 2-4, check if there are open Renovate or
Dependabot PRs that bump a devtools dependency. These must be merged
before the downstream project can be released.
gh pr list --repo ansible/REPO \
--author "app/renovate" --state open \
--json number,title,url,headRefName \
--jq '.[] | select(.title | test("ansible-compat|ansible-lint|ansible-navigator|molecule|pytest-ansible|tox-ansible|ansible-dev-tools|ansible-creator|ansible-dev-environment"))'
STATUS is one of: NEEDS RELEASE, UP TO DATE, BLOCKED
BOT_PR_STATUS is: open (pending), merged (done)
Compact mode (single stage)
If invoked with stage N, show only that stage with full detail
including all commit messages.
Step 6 — Recommendations
After the release plan, add actionable next steps:
Next steps:
1. Release Stage 1 projects that need it: {list}
2. After Stage 1 releases, wait for bot PRs in Stage 2 projects
3. Merge bot PRs, then release Stage 2: {list}
4. Continue through stages...
If all projects are up to date:
All projects are up to date. No releases needed this cycle.
Error Handling
If PyPI returns an error for a package, note it and continue with
other projects.
If a repo has no releases/tags, report it as "NO RELEASES FOUND"
and skip commit comparison.
If GitHub API rate limit is hit, report how many projects were
checked and suggest retrying later.
If a compare API call fails (tag not found), try alternate tag
formats: v{VERSION}, {VERSION}, release/{VERSION}.
CalVer Reference
All devtools projects use CalVer YY.MM.MICRO:
25.3.0 = first release in March 2025
25.3.1 = patch release for same version
Month only increments on feature releases
Target cadence: monthly, first Wednesday of the month