Repository navigation
Run dependency explanations separately from main AMD canaries - #74311
Conversation
6491f0b to
9db131f
Compare
Detailed upgrade investigations grow with the number of outdated packages and delay canary completion even when test preparation gets faster. Maintainers need prompt test results while retaining reproducible upgrade diagnostics.
Diagnostic reruns must retain their original inputs without gaining cache write access on the default branch. The workflow-run event already provides that boundary and the standard rerun action preserves the source canary.
9db131f to
79998e9
Compare
potiuk
left a comment
There was a problem hiding this comment.
Thanks, moving the explanations out of the canary itself makes sense. Details are inline; the first one (a single missing artifact stops every report) looks likely to make the report fail on most runs.
Drafted-by: Claude Code (Opus 5.5); reviewed by @potiuk before posting
|
Could you also share some measurements of the actual savings: how much shorter the main AMD canary gets with the explanations moved out, against the runner time the separate report uses (up to 15 jobs of up to 90 minutes, three at a time)? Drafted-by: Claude Code (Opus 5.5); reviewed by @potiuk before posting |
Picks up the httpx2 Dag processor client fix (apache#74731) that the core test jobs and the airflow-core mypy check failed on. Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Skip entries whose saved constraints or CI image are missing or expired, with a warning and a summary line, instead of failing every report. - Name report inputs by canary attempt and explain each input once, so a re-run canary no longer queues a second report from the same inputs. - Post the same notice on every attempt when the canary saved no inputs. - Free up disk space and move Docker to /mnt before loading the image. - Save the checked constraints through breeze's --save-constraints-to, pinned to the resolved constraints commit; failing to save only warns, so the canary no longer depends on raw `gh api` calls. - Say that no cache step, not workflow_run, keeps the cache untouched, and skip the plan tests when node is unavailable. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
Thanks for the review. Here is where this stands. Review comments (all fixed in 5edef09 unless noted)
RunsOn canaries (35938b5): since #74889, scheduled canaries keep the CI image in RunsOn's S3 cache, and only its digest is a GitHub artifact. The plan accepts that digest, and the explain job runs on a RunsOn runner and fetches exactly that tarball by its digest, verified as Timeout (a505227): the explain job limit goes from 90 to 150 min. The Measurements from the four latest scheduled
How I estimated it:
Earlier failures: the 14 failing checks before main was merged in (6648f4f) were not caused by this PR. CI: 35938b5, which merges in main and adds the RunsOn change, is green: 137 checks passed, none failed. Still open
|
Explaining constraints-source-providers took 105-120 minutes per job in the last four main canaries, past the report job's 90-minute timeout. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
The measurements are now part of the updated summary: #74311 (comment) |
CONSTRAINTS_GITHUB_REPOSITORY names the repository holding the constraints-* branches, apache/airflow by default, and the Dockerfiles read it. Breeze's download_constraints_file and get_branch_commit always used apache/airflow instead, so setting it changed nothing for constraints-version-check, the SBOM and provider dependency downloads, or the constraints commit saved for the dependency report. Both functions now read CONSTRAINTS_GITHUB_REPOSITORY and fall back to apache/airflow when it is unset or empty, so existing callers and CI on apache/airflow behave as before, and a saved commit always comes from the repository its constraints were downloaded from. Other files fetched through download_file_from_github still come from apache/airflow.
Since apache#74889 scheduled canaries run on RunsOn, where the CI image stash goes to RunsOn's S3 cache and only its digest is a GitHub artifact, so every report entry was skipped as "CI image missing". The plan now also accepts that digest artifact; the explain job then runs on a RunsOn runner, downloads exactly that tarball by its digest and checks it like stash-restore does. It prepares the disk with the workflow version's runner scripts, as the image build job now does.
|
I merged Why: scheduled canaries now run on RunsOn. There the CI image stash goes to RunsOn's S3 cache, and only its digest is a GitHub artifact: the latest canaries, e.g. 40200075185, only have What changed in 35938b5:
@shahar1, this touches the RunsOn path; could you take a look? The CI run for this commit is also waiting for a maintainer to approve it. |
main changed breeze's RUNS_ON_AMD_RUNNER_TEMPLATE (instance families and spot strategy); the report's copy now matches it again, as the plan test that compares the two requires.
… the S3 stash An earlier canary attempt only saved the inputs; its report may have failed, so the summary should not call them explained. The stash tarball is extracted with tar -P, so an entry with a .. segment could leave /mnt even under the /mnt prefix check. Generated-by: Claude Opus 5
|
Thanks for merging |
potiuk
left a comment
There was a problem hiding this comment.
Thanks, this addresses everything from my review, and your last push already moved the S3 job to the current RunsOn label.
I pushed one small fixup commit (dd7d268) on top rather than going another round:
- An earlier canary attempt only saved the report inputs; its report may still have failed. The notice and the summary now say the inputs were "saved by an earlier attempt" instead of calling them explained, and the two test assertions follow.
- The stash tarball is extracted with
tar -P, so the/mnt/*prefix check alone still let an entry such as/mnt/../etc/xout. The check now also refuses/../and a trailing/..segment.
One note for later, not blocking: CONSTRAINTS_GITHUB_REPOSITORY is also read by cdxgen.py and provider_dependencies.py, so pointing it at a fork changes more than this report.
Approving with the fixup; auto-merge is on once CI is green.
Drafted-by: Claude Code (Opus 5.5); reviewed by @potiuk before posting
Backport successfully created: v3-4-testNote: As of Merging PRs targeted for Airflow 3.X In matter of doubt please ask in #release-management Slack channel.
|
…ries (#74311) (#76182) * Keep dependency upgrade explanations off the canary completion path Detailed upgrade investigations grow with the number of outdated packages and delay canary completion even when test preparation gets faster. Maintainers need prompt test results while retaining reproducible upgrade diagnostics. * Keep dependency reports from writing to the main branch cache Diagnostic reruns must retain their original inputs without gaining cache write access on the default branch. The workflow-run event already provides that boundary and the standard rerun action preserves the source canary. * Keep dependency reports aligned with supported Python versions * Keep dependency reports going when one input is gone - Skip entries whose saved constraints or CI image are missing or expired, with a warning and a summary line, instead of failing every report. - Name report inputs by canary attempt and explain each input once, so a re-run canary no longer queues a second report from the same inputs. - Post the same notice on every attempt when the canary saved no inputs. - Free up disk space and move Docker to /mnt before loading the image. - Save the checked constraints through breeze's --save-constraints-to, pinned to the resolved constraints commit; failing to save only warns, so the canary no longer depends on raw `gh api` calls. - Say that no cache step, not workflow_run, keeps the cache untouched, and skip the plan tests when node is unavailable. * Give dependency explanations room for the slowest constraints mode Explaining constraints-source-providers took 105-120 minutes per job in the last four main canaries, past the report job's 90-minute timeout. * Honor CONSTRAINTS_GITHUB_REPOSITORY when breeze downloads constraints CONSTRAINTS_GITHUB_REPOSITORY names the repository holding the constraints-* branches, apache/airflow by default, and the Dockerfiles read it. Breeze's download_constraints_file and get_branch_commit always used apache/airflow instead, so setting it changed nothing for constraints-version-check, the SBOM and provider dependency downloads, or the constraints commit saved for the dependency report. Both functions now read CONSTRAINTS_GITHUB_REPOSITORY and fall back to apache/airflow when it is unset or empty, so existing callers and CI on apache/airflow behave as before, and a saved commit always comes from the repository its constraints were downloaded from. Other files fetched through download_file_from_github still come from apache/airflow. * Explain dependencies from the image a RunsOn canary keeps in S3 Since #74889 scheduled canaries run on RunsOn, where the CI image stash goes to RunsOn's S3 cache and only its digest is a GitHub artifact, so every report entry was skipped as "CI image missing". The plan now also accepts that digest artifact; the explain job then runs on a RunsOn runner, downloads exactly that tarball by its digest and checks it like stash-restore does. It prepares the disk with the workflow version's runner scripts, as the image build job now does. * Use the current RunsOn runner label for dependency reports from S3 main changed breeze's RUNS_ON_AMD_RUNNER_TEMPLATE (instance families and spot strategy); the report's copy now matches it again, as the plan test that compares the two requires. * Describe re-used report inputs as saved and refuse parent segments in the S3 stash An earlier canary attempt only saved the inputs; its report may have failed, so the summary should not call them explained. The stash tarball is extracted with tar -P, so an entry with a .. segment could leave /mnt even under the /mnt prefix check. Generated-by: Claude Opus 5 --------- (cherry picked from commit ca68614) Co-authored-by: Yossi Eliaz <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Shahar Epstein <[email protected]> Co-authored-by: Jarek Potiuk <[email protected]>
…ries (#74311) (#76182) * Keep dependency upgrade explanations off the canary completion path Detailed upgrade investigations grow with the number of outdated packages and delay canary completion even when test preparation gets faster. Maintainers need prompt test results while retaining reproducible upgrade diagnostics. * Keep dependency reports from writing to the main branch cache Diagnostic reruns must retain their original inputs without gaining cache write access on the default branch. The workflow-run event already provides that boundary and the standard rerun action preserves the source canary. * Keep dependency reports aligned with supported Python versions * Keep dependency reports going when one input is gone - Skip entries whose saved constraints or CI image are missing or expired, with a warning and a summary line, instead of failing every report. - Name report inputs by canary attempt and explain each input once, so a re-run canary no longer queues a second report from the same inputs. - Post the same notice on every attempt when the canary saved no inputs. - Free up disk space and move Docker to /mnt before loading the image. - Save the checked constraints through breeze's --save-constraints-to, pinned to the resolved constraints commit; failing to save only warns, so the canary no longer depends on raw `gh api` calls. - Say that no cache step, not workflow_run, keeps the cache untouched, and skip the plan tests when node is unavailable. * Give dependency explanations room for the slowest constraints mode Explaining constraints-source-providers took 105-120 minutes per job in the last four main canaries, past the report job's 90-minute timeout. * Honor CONSTRAINTS_GITHUB_REPOSITORY when breeze downloads constraints CONSTRAINTS_GITHUB_REPOSITORY names the repository holding the constraints-* branches, apache/airflow by default, and the Dockerfiles read it. Breeze's download_constraints_file and get_branch_commit always used apache/airflow instead, so setting it changed nothing for constraints-version-check, the SBOM and provider dependency downloads, or the constraints commit saved for the dependency report. Both functions now read CONSTRAINTS_GITHUB_REPOSITORY and fall back to apache/airflow when it is unset or empty, so existing callers and CI on apache/airflow behave as before, and a saved commit always comes from the repository its constraints were downloaded from. Other files fetched through download_file_from_github still come from apache/airflow. * Explain dependencies from the image a RunsOn canary keeps in S3 Since #74889 scheduled canaries run on RunsOn, where the CI image stash goes to RunsOn's S3 cache and only its digest is a GitHub artifact, so every report entry was skipped as "CI image missing". The plan now also accepts that digest artifact; the explain job then runs on a RunsOn runner, downloads exactly that tarball by its digest and checks it like stash-restore does. It prepares the disk with the workflow version's runner scripts, as the image build job now does. * Use the current RunsOn runner label for dependency reports from S3 main changed breeze's RUNS_ON_AMD_RUNNER_TEMPLATE (instance families and spot strategy); the report's copy now matches it again, as the plan test that compares the two requires. * Describe re-used report inputs as saved and refuse parent segments in the S3 stash An earlier canary attempt only saved the inputs; its report may have failed, so the summary should not call them explained. The stash tarball is extracted with tar -P, so an entry with a .. segment could leave /mnt even under the /mnt prefix check. Generated-by: Claude Opus 5 --------- (cherry picked from commit ca68614) Co-authored-by: Yossi Eliaz <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Shahar Epstein <[email protected]> Co-authored-by: Jarek Potiuk <[email protected]>
Scheduled and manually dispatched AMD canaries on
maincurrently wait for detailed dependency upgrade explanations, which can require a full resolution for each outdated package. Keep the quick freshness summary in the canary and run the detailed explanations in a separate Dependency upgrade report workflow after the canary completes.Canary (
finalize-tests.yml)mainschedule and dispatch canaries, theDepsstep runsconstraints-version-check --no-explain-why --save-constraints-to files/dependency-report. Breeze resolves the constraints branch to a commit, downloads the constraints at that commit, and saves both. A failure to save only warns.continue-on-error, so the report path cannot turn the canary red.--explain-whyin the canary.Report (
dependency-upgrade-report.yml,workflow_run)mainschedule or dispatch AMD canary of this repository.stash-restoredoes. On public runners it downloads the image artifact as before.Breeze
constraints-version-checkgets a new--save-constraints-tooption. The report analyzes the saved file with--constraints-file.download_constraints_fileand the newget_branch_commithonourCONSTRAINTS_GITHUB_REPOSITORY, defaulting toapache/airflow.Measurements from the four latest scheduled
mainAMD canaries (38993077423, 39038765293, 39088484466, 39133923075):constraints-source-providers) take 105–120 min per job, hence the 150-minute limit.Validation
nodeis not installed.workflow_runhandoff and the--save-constraints-topath only run onmaincanaries, so the first real report will come from the first canary after merge.Was generative AI tooling used to co-author this PR?
Generated-by: Codex (GPT-6) and Claude Code (Opus 5.5), following the guidelines