Adds an optional step to the release-verify-rc skill for Airflow provider
waves: after (or instead of) the artefact checks, verify that every change the
person running the skill authored is in the release candidate, and let them test
those changes against the RC distributions running in Breeze. Run it when the user
asks to "check my changes in the RC", "test my changes in the providers release",
"tick my boxes", or similar. It is not part of the mechanical PASS / FAIL verdict
and never replaces it.
Everything below is read-only on GitHub except the two steps marked
confirm first, which follow the draft-then-confirm rule in
airflow-pr-draft-summary.
- Find the testing issue:
gh issue list -R apache/airflow --search "Status of testing Providers in:title" --state all --limit 3. The newest open one is the wave; the previous one is needed in step 3. - From the issue body, take the checkbox lines that end in
: @<handle>— those are the user's PRs. Lines underLinked issues:that mention the user are issues they reported on someone else's PR, not their boxes. - List the user's merged PRs touching
providers/since the previous wave (gh pr list --author <handle> --state merged --search "merged:<prev>..<this>"), ignoring[v3-*-test]backports — providers are released frommain. Any PR not in the current issue must be either in the previous issue (already released) or in a provider of this wave that has no section in the issue — report the latter, since it has no box to tick.
The wave's RC tags are providers-<name>/<version>rcN created on the preparation
date. For every (PR, provider) pair confirm all three, and report any gap:
- the PR's squash commit on
upstream/mainis an ancestor of the RC tag (git merge-base --is-ancestor); providers/<path>/docs/changelog.rstat the tag mentions#<PR>;- the RC wheel from PyPI contains the changed code — download it with
pip download --no-depsand look for a distinctive added line inside the wheel (zipfile). Docs-only and test-only PRs have nothing in the wheel; say so.
Git refuses shell loops that call git in some agent sandboxes; a small Python
script calling git via subprocess works.
-
Make sure
dist/of the checkout Breeze will run from is empty, then download every RC distribution of the wave plus the latest releasedapache-airflowandapache-airflow-coreinto it (pip download --no-deps --only-binary=:all: --dest dist -r <requirements>). -
Write one verification Dag to
files/dags/(gitignored; Breeze's Dags folder), with one task per changed behaviour. Each task exercises the changed code path through the RC distribution, replaces external services withunittest.mock(no real credentials), prints what it checked, and raises on the old behaviour. Skip — do not fail — a task whose optional extra is not installed. Runruff formatandruff checkon it. -
Hand the user the command to run from that same checkout —
breeze start-airflowneeds Docker and an interactive terminal, so the agent does not run it:breeze start-airflow --mount-sources remove --use-distributions-from-dist \ --use-airflow-version wheel --python 3.11 --backend postgres --load-default-connections
-
Show the user a table of the tasks and what each log should contain, plus any change they can additionally check by hand in the UI.
Known pitfalls: No airflow package found means dist/ of the checkout Breeze runs
from is empty (e.g. it was started from the main checkout instead of a worktree) or
DISTRIBUTION_FORMAT is set to sdist. A Docker build failing with
error getting credentials … "pass": executable file not found is the user's
credsStore helper, not Airflow — point it out and let the user fix it.
Once the user says the Dag passed:
- Tick the boxes (confirm first). Re-fetch the issue body immediately before
editing, change only
[ ]→[x]on lines ending in: @<handle>for PRs verified in step B, and abort if the number of matched lines differs from what was reported. - Draft the testing-issue comment (confirm first) listing what was tested per
provider, including changes that are in the wave but missing from the issue. End
it with the
Drafted-by:footer. - When the user drafts their
[VOTE]reply, mention that they used this check to test all their changes in the candidate. - Offer cleanup: delete the downloaded wheels and the verification Dag, and suggest
breeze down.
Contributors are asked to test their changes in every providers wave, but finding the right distributions, installing them all together, and building a quick reproduction for each change is tedious enough that it is often skipped. The agent can do the mechanical part — inclusion checks, download, test Dag — so the human spends their time on actually looking at the behaviour.