potiuk opened a new pull request, #75919: URL: https://github.com/apache/airflow/pull/75919
Constraints for an Airflow release candidate pin the provider wave being voted on at its `rcN` versions and commit them onto the shared `constraints-X-Y` branch. Two things went wrong around that, and two more hid it: - **The regular generation undid the candidate's pins and called it a downgrade.** It resolves without pre-releases, so `common-ai 1.1.0rc1 → 1.0.0`, `microsoft-azure 15.3.0rc1 → 15.2.1` and `openlineage 2.21.0rc1 → 2.20.3` tripped the provider-downgrade guard. The v3-4-test canary has been red since `constraints-3.4.0rc1` for this reason ([example](https://github.com/apache/airflow/actions/runs/40729396847/job/123000060437)), although nothing was yanked. The candidates the baseline pins are now kept while PyPI still serves them. A candidate gives way to its final once that is published, and a yanked one is dropped without counting as a downgrade. - **A candidate published mid-run is not lost.** The pins are chosen from the baseline read before the resolution, which takes minutes. Afterwards the generation re-reads the baseline and fails if its release-candidate pins changed in between, so a re-run picks them up rather than overwriting them. - **The final release passed over candidates silently.** A provider whose newest version is an rc that was neither released nor yanked now fails the `Release constraints` run for a final version. The failure lists each provider and says to release it or yank it. Yanked versions are skipped. - **The downgrade alert never reached Slack.** The `slack-github-action` step had no `method:`, so it failed with `Missing input! Either a method or webhook is required`. - **The CI notification announced "All passing" for a failing run.** It read the newest `ci-amd.yml` run on `v3-4-test` while that run was still in progress. With no conclusion yet, it saw no failures and posted a recovery. It now reads only completed runs. The release guide gains a "Release or yank the outstanding provider candidates" step before the final release, and the breeze docs describe both flags. Checks run locally: - `scripts/tests/in_container/test_run_generate_constraints.py`: 39 passed - `dev/breeze/tests/test_workflow_status.py` and `test_shell_params.py`: 56 passed - prek pre-commit stage on the changed files: passed. The exceptions are `lychee`, which needs Docker and was not run, and `update-breeze-cmd-output`, which I skipped because the images were regenerated from the local breeze source and `--check-only` and `check-all-params-in-groups` both exit 0. --- ##### Was generative AI tooling used to co-author this PR? - [X] Yes (please specify the tool below) Generated-by: Claude Opus 5 following [the guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions) 🤖 Generated with [Claude Code](https://claude.com/claude-code) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
