The GitHub Actions job "npm_and_yarn in /providers/common/ai/src/airflow/providers/common/ai/plugins/www, /ts-sdk for brace-expansion - Update #1503251490" on airflow.git/main has failed. Run started by GitHub user dependabot[bot] (triggered by dependabot[bot]).
Head commit for run: 115eb43aba8b7989be377e682f6cdb2aedb631a0 / Jarek Potiuk <[email protected]> Build docs and registry CI images separately so docs stay on default Python (#70959) * Build docs and registry CI images separately so docs stay on default Python The docs build and the provider registry shared a single CI image, so they also shared its Python. That image is built at 3.12 because the registry has always extracted on 3.12, which silently moved the docs build there too and broke publishing on 2026-07-28: Sphinx mocks third-party modules while building provider docs, and from 3.12 functools copies __type_params__, for which a mock hands back another mock rather than a tuple. Any provider decorating methods with functools.wraps over a mocked callable then fails to import, and the build also began reporting cross-reference ambiguities it had not reported before. The image job already matrixes over the Python versions it is given, and every cache it touches - registry buildx tag, image stash, commit marker and mount cache - is keyed by Python version. Asking it for both versions therefore builds them in parallel, each seeding and storing its own cache, and needs no second job. Docs go back to the default Python and the registry keeps 3.12. The stashes are also named for what they are rather than for the ref alone, so release images stop sharing a key with anything else that stashes an image for the same ref. * Build each CI image in the job that uses it instead of a shared job Docs and the registry now want different Pythons, and a job that builds an image for another job has to hand it over as a multi-gigabyte tarball - exported, stashed, restored and imported - for an image whose only consumer is a single downstream job. Building in place skips that round trip entirely, and the two builds still run in parallel because both jobs now wait only on build-info. What is worth keeping between runs is the BuildKit mount cache rather than the image, so the docs job restores and stashes it under this ref and its own Python. The registry side already knew how to build its own image when the caller had not stashed one; it just could not be told which ref to build, so it would have documented main rather than the tag being published. * Pin the docs build to the default Python again `breeze build-docs` gained a --python option, and because that option reads PYTHON_MAJOR_MINOR_VERSION, which every job of the docs publishing workflow sets, the docs quietly started building on whatever the workflow happened to export rather than on the Python they are meant for. That is how they ended up on 3.12, where Sphinx's mocking of third-party modules makes functools.wraps raise and providers fail to import. Which interpreter documents Airflow is not a per-invocation choice, so the option is gone and the build pins itself to the default again. The workflow reads the same constant instead of naming a version of its own, so the image it prepares cannot drift away from the one the docs build asks for. * Name the docs publishing stashes after the workflow that writes them The prefix exists to keep these images from sharing a key with anything else stashing an image for the same ref, so it should say which workflow put them there rather than describe them as release artifacts. * Build the CI image in the job that uses it, cache and all Each image now has a single consumer, so a job that only builds one can do no more than export it and have the consumer import it straight back. Both docs and the registry build in place instead, which leaves the registry workflow with one job as well. What that job hands to the next run is unchanged: the image, the commit it was built from and the mount cache are stashed under the ref, so a later run for the same ref seeds its build from them and skips the build entirely when the sources have not moved. That is the whole reason the stash exists - publishing an RC and then the final docs is the same ref twice - so it moves into the jobs with the build rather than being dropped along with the job that used to do it. The logic lives in a composite action so both jobs share one copy; ci-image-build.yml stays for callers that do want an image job of their own. * Balance the registry job condition after dropping the image dependency Removing the build-ci-image guard left the parenthesis that opened its group, so GitHub refused to parse the workflow and the dispatch failed before any job ran. * Wait for the registry before reporting the docs publish done The registry still runs alongside the docs build - nothing it does depends on them - but the publish now waits for it, so a green run means both halves of a publish are actually out rather than only the S3 upload. Its result is checked explicitly because the registry is skipped for non-provider distributions, and a skipped dependency would otherwise skip the publish with it. * Read the image-build action from the workflow's own version A local action is resolved against the workspace, not against the ref the workflow definition came from, so publishing a tag cut before the action existed found nothing to run and both image builds failed immediately. The workflow's own version is now checked out alongside the sources being published and the action is taken from there, which is what lets a workflow branch be tested against an older tag at all. The image itself is still built from the checked out sources. Report URL: https://github.com/apache/airflow/actions/runs/30845175497 With regards, GitHub Actions via GitBox --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
