potiuk opened a new pull request, #72852:
URL: https://github.com/apache/airflow/pull/72852

   A large share of our workflow jobs never build an image, never install 
Airflow
   and never run a test suite — they compute a matrix, post a Slack message, 
close
   a stale issue, check a newsfragment name. They were holding a 2-core runner 
for
   their whole (short) lifetime, competing with the builds and test shards that
   genuinely need one.
   
   `ubuntu-slim` (1 core, 5 GB RAM, 14 GB disk, unprivileged container) is the 
right
   size for that class of work. 22 jobs across 19 workflows move onto it.
   
   ### What decided the cut
   
   `ubuntu-slim`'s constraints, verified against the runner image rather than 
assumed:
   
   * **No Docker daemon** — client only, unprivileged, no DinD. Everything 
touching
     Breeze, image builds or Docker-container actions stays put.
   * **`python3` is Ubuntu's system interpreter** — PEP 668 externally managed, 
so a
     bare `pip install` fails.
   * **Minimal toolset** — `git`, `gh`, `jq`, `node`, `curl` present; no Java, 
no Go.
     `actions/setup-*` still works (tool-cache downloads).
   * **One core** — jobs doing real work need timeout headroom.
   
   So every moved job is one that only shuffles metadata: matrix computation
   (`detect-languages`, `registry-backfill`'s `prepare`), notifications 
(`notify-slack`,
   `notify-on-failure`, the CI-duration and flaky-test reports), issue/PR 
housekeeping
   (`stale`, `recheck-old-bug-report`, `milestone-tag-assistant`, 
`automatic-backport`),
   and cheap guards (`check-newsfragment-pr-number`, the two 
`dependency-review` jobs,
   `registry-tests`). I checked that every Python script involved is 
stdlib-only.
   
   ### uv installs
   
   Three moved jobs installed uv by `sed`-ing the version out of `uv.lock` and
   pip-installing it into the system interpreter — which this image refuses. 
They now use:
   
   ```yaml
   - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d  # 
v10.0.1
     with:
       version-file: uv.lock
   ```
   
   `setup-uv`'s `uv.lock` parser finds the package named `uv` and returns its 
version —
   exactly what the `sed` did — so the pin is preserved. `ci-notification` was 
previously
   installing *unpinned* uv, so it gains determinism here. All three scripts 
carry PEP 723
   inline metadata, so `uv run` provisions its own Python; no `setup-python` 
needed. The
   pinned SHA is already used in `registry-tests.yml` and is on the ASF 
approved allowlist.
   
   ### Not moved
   
   `asf-allowlist-check` is the one obvious candidate left behind: the blocker 
is inside
   the upstream `apache/infrastructure-actions/allowlist-check` composite, 
which does a
   bare `pip install ruyaml` with no `setup-python`. Fixing that belongs 
upstream — PR to
   follow.
   
   `registry-tests` is the only moved job doing real work, so its timeout goes 
5 → 10 min
   for the single core.
   
   Also documents the two runner tiers and the slim constraints in
   `dev/breeze/doc/ci/05_workflows.md`, so new jobs land on the right one.
   
   ---
   
   ##### Was generative AI tooling used to co-author this PR?
   
   - [X] Yes — Claude Code (Opus 5)
   
   Generated-by: Claude Code (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)
   
   https://claude.ai/code/session_01UL4HBX63zq4um1L4XBcJYy
   


-- 
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]

Reply via email to