Compare commits

...

3 Commits

Author SHA1 Message Date
Superset Dev
0c21ba242b fix(ci): bump back to lychee-action v2.9.0, both versions are ASF-allowlisted
Checked apache/infrastructure-actions' approved_patterns.yml directly
(the actual source of truth for the org allowlist) instead of relying
on secondhand info: both v2.8.0 (8646ba30...) and v2.9.0
(e7477775...) are already present. The earlier repin to v2.8.0 assumed
only that SHA was allowed; that assumption was wrong, so bumping back
to the newer v2.9.0 costs nothing and there's no reason to stay on the
older tag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 22:47:40 -07:00
Superset Dev
51b1378bce fix(ci): pin lychee-action to the ASF-allowlisted v2.8.0 SHA
v2.9.0 (the version this PR originally pinned) isn't allowlisted for
this org yet, so the job would have failed to even start with an
"action is not allowed" error. v2.8.0 already is. Bumping past it later
needs an Infra ticket first, same as this file already required for
linkinator-action version bumps.

entrypoint.sh is byte-identical between v2.8.0 and v2.9.0 (diffed both
directly), so none of the args/fail/cache behavior this PR relies on
changes with the repin; the only differences between the two tags are
in the underlying `lychee` CLI binary's install/version-detection
mechanics.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 21:59:02 -07:00
Superset Dev
0ebad1bb7c chore(ci): swap linkinator-action for lychee-action in docs link checker
lychee (Rust, lycheeverse/lychee-action) replaces
JustinBeckwith/linkinator-action for the "Link Checking" job in
superset-docs-verify.yml:

- Pin to lychee-action v2.9.0
  (e7477775783ea5526144ba13e8db5eec57747ce8).
- Port all 24 linksToSkip regex patterns 1:1 to --exclude flags
  (verified by diffing the parsed pattern lists programmatically, not
  just by eye).
- Wire up real caching: an actions/cache step persists .lycheecache
  (lychee's on-disk request cache, enabled via --cache) across runs,
  keyed on github.run_id with a prefix restore-key so every run saves
  fresh while always restoring the nearest prior cache; --max-cache-age
  7d keeps entries from going stale forever. linkinator-action has no
  equivalent — every run re-checked every external link from scratch.
- Keep the job fully advisory like before: continue-on-error: true
  plus lychee-action's own fail: false input.
- Job key renamed linkinator -> lychee; the display name ("Link
  Checking") is unchanged, so this shouldn't affect any branch
  protection rule matching on it.

Validated locally: zizmor clean, YAML parses, and the rendered `args`
string was run through eval (matching lychee-action's entrypoint.sh)
to confirm every regex round-trips as a single argv token with parens/
pipes/backslashes intact.

Note: .mdx files aren't natively parsed by lychee (HTML/Markdown only);
it falls back to best-effort linkify-based extraction for them, same
as any other non-html/md format. Worth an eye on the first few runs
to see if that changes what gets caught relative to linkinator's mdx
handling.

Per an existing repo convention (see the comment this replaces),
bumping or replacing this action requires an ASF Infra ticket to
allowlist it org-side before it can actually execute in CI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 21:48:25 -07:00

View File

@@ -21,8 +21,8 @@ permissions:
contents: read
jobs:
linkinator:
# See docs here: https://github.com/marketplace/actions/linkinator
lychee:
# See docs here: https://github.com/lycheeverse/lychee-action
# Only run on pull_request, not workflow_run
if: github.event_name == 'pull_request'
name: Link Checking
@@ -31,37 +31,52 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
# Do not bump this linkinator-action version without opening
# an ASF Infra ticket to allow the new version first!
- uses: JustinBeckwith/linkinator-action@af984b9f30f63e796ae2ea5be5e07cb587f1bbd9 # v2.3
# Restores the on-disk request cache (.lycheecache) lychee writes when
# `--cache` is set, so re-runs don't re-check every external link from
# scratch. Key never matches exactly (github.run_id is unique per run),
# so actions/cache always saves a fresh copy afterwards; restore-keys
# falls back to the most recent prior cache on lookup.
- uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: .lycheecache
key: lychee-cache-${{ github.run_id }}
restore-keys: lychee-cache-
# v2.8.0 and v2.9.0 are both on ASF Infra's action allowlist
# (apache/infrastructure-actions approved_patterns.yml) as of this
# writing. Do not bump past v2.9.0 without opening an Infra ticket
# to allow the new SHA first!
- uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0
continue-on-error: true # This will make the job advisory (non-blocking, no red X)
with:
paths: "**/*.md, **/*.mdx"
linksToSkip: >-
^https://github.com/apache/(superset|incubator-superset)/(pull|issues)/\d+,
^https://github.com/apache/(superset|incubator-superset)/commit/[a-f0-9]+,
superset-frontend/.*CHANGELOG\.md,
http://localhost:8088/,
http://127.0.0.1:3000/,
http://localhost:9001/,
https://charts.bitnami.com/bitnami,
https://www.li.me/,
https://www.fanatics.com/,
https://tails.com/gb/,
https://www.techaudit.info/,
https://avetilearning.com/,
https://www.udemy.com/,
https://trustmedis.com/,
http://theiconic.com.au/,
https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html,
^https://img\.shields\.io/.*,
https://vkusvill.ru/,
https://www.linkedin.com/in/mark-thomas-b16751158/,
https://theiconic.com.au/,
https://wattbewerb.de/,
https://timbr.ai/,
https://opensource.org/license/apache-2-0,
https://www.plaidcloud.com/
fail: false
args: >-
--verbose --no-progress
--cache --max-cache-age 7d
--exclude '^https://github.com/apache/(superset|incubator-superset)/(pull|issues)/\d+'
--exclude '^https://github.com/apache/(superset|incubator-superset)/commit/[a-f0-9]+'
--exclude 'superset-frontend/.*CHANGELOG\.md'
--exclude 'http://localhost:8088/'
--exclude 'http://127.0.0.1:3000/'
--exclude 'http://localhost:9001/'
--exclude 'https://charts.bitnami.com/bitnami'
--exclude 'https://www.li.me/'
--exclude 'https://www.fanatics.com/'
--exclude 'https://tails.com/gb/'
--exclude 'https://www.techaudit.info/'
--exclude 'https://avetilearning.com/'
--exclude 'https://www.udemy.com/'
--exclude 'https://trustmedis.com/'
--exclude 'http://theiconic.com.au/'
--exclude 'https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html'
--exclude '^https://img\.shields\.io/.*'
--exclude 'https://vkusvill.ru/'
--exclude 'https://www.linkedin.com/in/mark-thomas-b16751158/'
--exclude 'https://theiconic.com.au/'
--exclude 'https://wattbewerb.de/'
--exclude 'https://timbr.ai/'
--exclude 'https://opensource.org/license/apache-2-0'
--exclude 'https://www.plaidcloud.com/'
'./**/*.md' './**/*.mdx'
build-on-pr:
# Build docs when PR changes docs/** (uses committed databases.json)