Skip to content

ci(backport): open backport PRs with the cozystack-ci App token - #3896

Draft
myasnikovdaniil wants to merge 1 commit into
mainfrom
ci/backport-app-token
Draft

ci(backport): open backport PRs with the cozystack-ci App token#3896
myasnikovdaniil wants to merge 1 commit into
mainfrom
ci/backport-app-token

Conversation

@myasnikovdaniil

Copy link
Copy Markdown
Contributor

Backport PRs opened by bot wait for maintainer to click "Approve and run workflows" before any check starts. Nine of them were parked like that today and nothing surfaces them, so backports carrying fixes to release lines are exactly the ones sitting still.

Reason is not in this workflow but in repo policy:

GET /repos/cozystack/cozystack/actions/permissions/fork-pr-contributor-approval
{"approval_policy":"all_external_contributors"}

github-actions[bot] is external under that policy, so every run triggered by PR it authors lands in action_required, even when branch is same-repo. Org installed App is not external contributor. #3550 was opened by cozystack-ci[bot] with this same App token and got full check set without any approval, including 54 minutes e2e job.

So this PR mints App token and passes it to backport-action, same as retention, cut-prerelease, promote-rc, tags, pull-requests and pull-requests-release already do. Same action pin and same owner: cozystack as other ten call sites.

This moves only PR authorship. backport-action documents github_token as "used to create and label pull requests and to comment", git push still uses credentials that actions/checkout persists, so backport carrying .github/workflows/ change is still rejected. That needs workflows: write on the App and I don't ask for it here, App able to rewrite CI can reach every secret, and hand-porting those is rare (#3893, #3894).

Token step gated on same already_merged guard as two steps around it, so backport that guard already rejected mints no credential. That makes three gated steps where contract test counted exactly two, so count updated to three. It still fails if any single gate dropped.

#3844 edits same file and is open, whichever lands second needs rebase.

Backport PRs opened by the bot sat waiting for a maintainer to click
"Approve and run workflows" before any check would start. Nine were
parked that way on 2026-08-18, and nothing surfaces them, so the
backports that carry fixes to the release lines were the ones sitting
still.

The cause is not this workflow but the repository's policy:

  GET /repos/cozystack/cozystack/actions/permissions/fork-pr-contributor-approval
  {"approval_policy":"all_external_contributors"}

github-actions[bot] is external under that policy, so every run
triggered by a PR it authors lands in action_required, even though the
branch is same-repo (isCrossRepository: false). An org-installed App is
not an external contributor. #3550, opened by cozystack-ci[bot] through
this same App token, drew its full check set unapproved, including a
54-minute E2E job.

So mint the App token and hand it to backport-action, matching the
pattern already used by retention, cut-prerelease, promote-rc, tags,
pull-requests and pull-requests-release. Same action pin and the same
owner: cozystack as the other ten call sites.

Scope worth being precise about: backport-action documents github_token
as "used to create and label pull requests and to comment", so this
moves PR authorship and nothing else. The git push still runs on the
credentials actions/checkout persists, so a backport carrying a
.github/workflows/ change is still rejected, and that stays true until
the App is granted workflows: write -- a permission that would let
anything able to trigger the App rewrite CI and reach every secret, and
one this change deliberately does not ask for.

The token step is gated on the same already_merged guard as the two
steps around it, so a backport the guard has already decided against
mints no credential. That makes three gated steps where the contract
test counted exactly two; it now counts three, and the count still
fails if any single gate is dropped.

Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f8539541-d7ff-49a2-a379-08a6da3aa5c8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added size/M This PR changes 30-99 lines, ignoring generated files area/release Issues or PRs related to release tooling (changelog, backport, release pipeline) labels Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/release Issues or PRs related to release tooling (changelog, backport, release pipeline) size/M This PR changes 30-99 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant