Skip to content

ci: call the fleet release-please workflow instead of hardcoding the action - #32

Merged
forkwright merged 1 commit into
mainfrom
ci/release-please-reusable
Aug 25, 2026
Merged

ci: call the fleet release-please workflow instead of hardcoding the action#32
forkwright merged 1 commit into
mainfrom
ci/release-please-reusable

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Finding

Every release-please PR in this repo is held pending manual approval, and the cause is not this repo's workflow logic.

A GitHub platform policy in force since 2026-06-11 ("Bot-created pull requests can run workflows if approved") gates any workflow run triggered by a PR authored via the default GITHUB_TOKEN — the github-actions[bot] identity. This includes same-repo PRs, not only forks, and there is no repository or organization setting to disable it (probed: actions/permissions/access 404s on public repos; the private-repo controls govern cross-repo access, PR creation and token scope, none of which gate run execution).

Measured on a blocked run elsewhere in the fleet: jobs.total_count = 0. No job is ever created, so no workflow condition evaluates.

The fix

Run release-please under a token that is not GITHUB_TOKEN. The fleet reusable already does:

token: ${{ secrets.RELEASE_PLEASE_TOKEN || secrets.GITHUB_TOKEN }}

This repo hardcoded googleapis/release-please-action instead — one of twelve copies of something the fleet publishes centrally and correctly (kanon#3653).

Safe to land before the secret exists

An undefined repository secret resolves to an empty string, which is falsy, so the reusable's || fallback preserves today's behaviour exactly. Provisioning RELEASE_PLEASE_TOKEN then unblocks every migrated repo at once, with no further edits anywhere.

Decisions made deliberately

  • secrets: inherit not used. The secret is passed by name. inherit forwards every repository secret to a workflow hosted in another repo, for no capability gain.
  • Pinned @main, not a SHA. forkwright/.github publishes no tags, so a SHA pin there is one dependabot cannot bump — which is how a consumer elsewhere froze on a revision predating a fix while its own comment asserted dependabot was maintaining it.
  • Nothing repo-specific was normalised. This repo's own triggers, permissions, concurrency group and cancel-in-progress choice are preserved exactly as found, even where they differ from the rest of the fleet. Any downstream attestation job is carried over verbatim and still resolves, because the reusable keeps the same job id (release-please) and output names (release_created, tag_name).

One thing does not survive

timeout-minutes cannot be set on a job that calls a reusable workflow. release-please normally finishes in well under a minute, so the practical cost is that a hung run reaches GitHub's default instead of being cut at ten. Giving the reusable's own job a timeout would restore it fleet-wide.

Part of kanon#3653. Verified: this repo used only the default config-file / manifest-file and no input the reusable cannot express.

…action

Every release-please PR in this repo is held pending manual approval. A GitHub
platform policy in force since 2026-06-11 gates any workflow run triggered by a
PR authored via the default GITHUB_TOKEN -- the github-actions[bot] identity --
same-repo PRs included, with no repository or organization setting to disable it.
Measured on a blocked run elsewhere in the fleet: jobs.total_count is 0, so no
workflow condition ever evaluates.

The fix is a token that is not GITHUB_TOKEN, and the fleet reusable already
carries it. This repo hardcoded the action instead, one of twelve copies of
something published centrally and correctly.

The secret is passed explicitly by name rather than by `secrets: inherit`, which
would forward every repository secret to a workflow in another repo for no
capability gain. Safe to land before the secret exists: an undefined secret
resolves to an empty string, which is falsy, so the reusable's fallback preserves
today's behaviour until it is provisioned.

Pinned @main, not by SHA. forkwright/.github publishes no tags, so a SHA pin
there is one dependabot cannot bump -- which is how a consumer elsewhere froze on
a revision predating a fix while its own comment claimed otherwise.

Triggers, permissions, concurrency and any downstream attestation job stay in
the caller, unchanged and unnormalised; the attestation job still resolves
because the reusable keeps the same job id and output names.

`timeout-minutes` does not survive: it cannot be set on a job that calls a
reusable workflow. release-please runs well under a minute, so the practical
cost is that a hung run reaches GitHub's default rather than being cut at ten.
@forkwright
forkwright merged commit 1dfb712 into main Aug 25, 2026
13 checks passed
@forkwright
forkwright deleted the ci/release-please-reusable branch August 25, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant