mirror of
https://github.com/apache/airflow.git
synced 2026-11-04 07:12:48 +00:00
* Add lychee prek hook (offline mode) and fix internal markdown links
* Add the lychee link checker as a prek hook in offline mode
(`--offline --no-progress --root-dir .`) so we catch broken
intra-repo links in Markdown files before they land. The hook
excludes auto-generated content (the Python OpenAPI client docs
under `clients/python/`, JS `node_modules`, build output) and runs
on every Markdown file otherwise. The lychee binary version is
pinned via `LYCHEE_VERSION=0.24.2` as the first arg, alongside the
SHA-pinned `rev`, so we keep the airflow SHA-pinning convention
while satisfying lychee's pre-commit script which expects a
version tag.
* Fix the 13 broken links the hook surfaced on `main`:
- Add minimum-stub locale guideline files for active locales that
were referenced from the airflow-translations skill table but had
no file yet (`ar`, `it`, `tr`). The stub points the reader at the
parent SKILL.md so the global rules apply until a real guide is
written.
- `airflow-core/src/airflow/_shared/{AGENTS,README}.md`: correct the
`../../shared` path (which resolved inside `airflow-core/`) to
`../../../../shared` so it lands on the repo-root `shared/` dir.
- `airflow-core/src/airflow/api_fastapi/execution_api/AGENTS.md`:
add the missing `../` so the `contributing-docs/...` link resolves
to repo root instead of `airflow-core/contributing-docs/`.
- `airflow-core/src/airflow/ui/tests/e2e/README.md`: replace the
reference to a no-longer-existing `dag-trigger.spec.ts` example
with the existing `dag-runs.spec.ts`.
- `dev/breeze/doc/ci/02_images.md`: docs were moved from
`docs/docker-stack/` to `docker-stack-docs/`; update the link.
- `dev/README_RELEASE_HELM_CHART.md`: helm-chart docs moved from
`docs/helm-chart/` to `chart/docs/`; update the link.
- `dev/system_tests/README.md`: drop the dangling reference to a
`dev/requirements.txt` that no longer exists; replace with a
`uv run --with PyGithub --with rich-click --with rich` invocation
that picks up the script's actual dependencies.
* Switch lychee hook to docker variant; check anchor fragments too
Two follow-ups for #66356:
* CI failure: the `lychee` script-based hook auto-installs the
pre-built `lychee` binary via cargo-binstall, but lychee 0.24.x
binaries are linked against `GLIBC_2.38` / `GLIBC_2.39`, which
the ubuntu-22.04 CI runners do not ship (they have glibc 2.35).
Switch to the upstream `lychee-docker` variant — it runs the
official `lycheeverse/lychee` Docker image and bundles its own
libc, so it is portable across runners.
* Reviewer feedback (@parkhojeong): pass `--include-fragments` so
lychee also reports broken Markdown anchor fragments. That
surfaced three real broken fragments which are also fixed here:
- `.github/skills/pr-triage/actions.md`: add explicit
`<a id="mark-ready"></a>` and `<a id="mark-ready-with-ping"></a>`
anchors before the `## ` headings, since GitHub's auto-generated
anchors include the full descriptive heading (e.g.
`mark-ready--add-ready-for-maintainer-review-label`) rather than
the short action name that the existing cross-references expect.
- `dev/README_RELEASE_AIRFLOW.md`: the link was pointing at
`#removing-or-replacing-ownership` but the section is called
"Relinquishing translation/code ownership" — fix to
`#relinquishing-translationcode-ownership`.
The `LYCHEE_VERSION=0.24.2` arg used by the script-based hook is
no longer needed for the docker variant; the docker entry pins the
version itself.
Small tool to update status of all AIP-47 issues.
Simply:
-
Set
GITHUB_TOKENto a repo-writeable token. -
Run the script via
uv(it pulls in the few third-party deps it needs —PyGithub,rich-click,rich):
uv run --with PyGithub --with rich-click --with rich python dev/system_tests/update_issue_status.py
It will automatically update status of all the AIP-47 issues based on the presence of files in the repo.
You can also run it with --dry-run mode - useful when you have no write permission to the repository.
You can generate a read-only token (or hope you will not hit rate limits if you do not have one)
In this case it will only show what would have happened if you had the access and print stats.