Repository navigation
ci(gha): check workflow actions against the ASF allowlist - #9260
Merged
Merged
Conversation
GitHub blocks actions that are not on the ASF org-wide allow list, and a blocked action fails with "Startup failure": no logs, no annotation, and a PR that looks green because the job never ran. The allow list lives in apache/infrastructure-actions and is only updated after infra reviews the matching Dependabot PR there, so this project can reference a version that is not approved yet without noticing. Add the check ASF ships for exactly this: a job running apache/infrastructure-actions/allowlist-check on any change under .github/, which fails the PR naming the offending ref, and warns ahead of time when an approved pin is nearing its expiry date. Dependabot cannot consult the allow list, so also set the ASF-recommended cooldown of 4 days on the github-actions ecosystem to give that review time to land before a bump is proposed here. Current main passes the check: 13 unique refs, all trusted or allowlisted.
DoDiODev
added a commit
to DoDiODev/devlake
that referenced
this pull request
Oct 27, 2026
The cooldown block added in apache#9260 used 'default', which is not a valid key. Dependabot rejects the whole configuration, so no update jobs run. The schema only accepts default-days, semver-{major,minor,patch}-days, include and exclude.
klesh
pushed a commit
that referenced
this pull request
Oct 28, 2026
The cooldown block added in #9260 used 'default', which is not a valid key. Dependabot rejects the whole configuration, so no update jobs run. The schema only accepts default-days, semver-{major,minor,patch}-days, include and exclude.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
GitHub blocks actions that are not on the ASF org-wide allow list, and a blocked action fails with "Startup failure" — no logs, no annotation, and a PR that looks green because the job never ran.
The allow list lives in
apache/infrastructure-actions:actions.ymlis the source of truth (peraction@sha, withtagand optionalexpires_at), andapproved_patterns.ymlis the generated list GitHub enforces.actions/*,github/*andapache/*are implicitly trusted; everything else needs a reviewed entry.Dependabot does not consult that list. It resolves the newest upstream tag and opens a PR whether or not ASF has reviewed the release. The allow list is only updated when infra merges the matching Dependabot PR in
apache/infrastructure-actions, so this project can reference a version that isn't approved yet without noticing.Concrete example: #9116 proposed
docker/setup-qemu-actionv4.3.0 on 2026-09-05, whileactions.ymlas of that date still stopped at v4.2.0.Changes
.github/workflows/asf-allowlist-check.yml(new)Runs the check ASF ships for exactly this problem:
pull_requestandpushtomain,paths: .github/**only, so ordinary PRs pay nothing.::error file=...::X is not on the ASF allowlist, naming the offending ref and file.expires_at, which is the early signal for pins that are about to be dropped from the allow list.permissions: contents: read,persist-credentials: false.apache/*is implicitly trusted, but the pin is reproducible and Dependabot can track the monorepo's# allowlist-check/vX.Y.Zcomment..github/dependabot.ymlAdds the ASF-recommended cooldown to the
github-actionsecosystem, so ASF review has time to land before a bump is proposed here:Other ecosystems are untouched. The comment block records the reasoning and the #9116 example so it survives without this PR's context.
Verification
Ran ASF's own checker against the repo rather than eyeballing it:
Both files parse as YAML; the new workflow carries the ASF license header
.licenserc.yamlrequires.Follow-up
Not part of this PR, but note that
main's Docker pins expire 2026-11-30 (setup-qemu-action) and 2026-12-09 (setup-buildx-action,build-push-action). #9255 ismergeable: cleanand moves all four to their current approved versions — merging it is what prevents this new check from going red in five weeks.