Skip to content

ci(NOJIRA-1234): extend bot PR automerge to smartling and aikido - #171

Open
Jlougedo-TF wants to merge 4 commits into
mainfrom
NOJIRA-1234/bot-pr-automerge
Open

ci(NOJIRA-1234): extend bot PR automerge to smartling and aikido#171
Jlougedo-TF wants to merge 4 commits into
mainfrom
NOJIRA-1234/bot-pr-automerge

Conversation

@Jlougedo-TF

Copy link
Copy Markdown
Contributor

Gate on the PR author login instead of a single actor, so translation PRs from smartling-github-connector[bot] and security fixes from aikido-autofix[bot] are auto-approved and auto-merged alongside dependabot.

Titles are not a reliable signal for these bots, so the allowlist keys off github.actor only.

Gate on the PR author login instead of a single actor, so translation PRs
from smartling-github-connector[bot] and security fixes from
aikido-autofix[bot] are auto-approved and auto-merged alongside dependabot.

Titles are not a reliable signal for these bots, so the allowlist keys off
github.actor only.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Jlougedo-TF Jlougedo-TF self-assigned this Sep 9, 2026
@Jlougedo-TF
Jlougedo-TF requested a review from a team as a code owner September 9, 2026 13:29
@pr-auditor

pr-auditor Bot commented Sep 9, 2026

Copy link
Copy Markdown

⚠️ Security Analysis Results

🟡 1 medium · 1 files reviewed

🟡 Medium severity

1. broken_trust_boundary · .github/workflows/dependabot-automerge.yml:14 · confidence 3/5

The auto-merge gate now trusts aikido-autofix[bot] (and is described as extending to smartling-github-connector[bot]) based solely on github.actor, but the 'risk assessment' heuristics added in this workflow only detect dependency-bump signals (manifest overrides, go.mod +incompatible bumps, lockfile churn, PR title wording) that are specific to dependabot's use case. aikido-autofix produces security code fixes that can touch arbitrary source files, CI workflows, or scripts — none of which are covered by these five dependency-specific checks — so such PRs are still auto-approved and auto-merged with a write-permission GITHUB_TOKEN and zero human review whenever they don't happen to touch package.json/go.mod/lockfiles.

Exploit: If the aikido-autofix bot's token/app is compromised, buggy, or manipulated (e.g., via a malicious upstream advisory influencing its patch generation) into opening a PR that modifies a GitHub Actions workflow file, an install/build script, or application source code rather than a manifest/lockfile, none of the risk heuristics fire, 'risky' stays false, and the PR is auto-approved and auto-merged into main without any human review — allowing injected code or workflow changes (including privilege escalation via workflow modification) to land automatically.

Fix: Add risk checks appropriate to aikido-autofix's actual change surface (e.g., treat any modification to .github/workflows/**, package.json 'scripts', Dockerfiles, or install/build scripts as risky regardless of the dependency-specific heuristics), or require mandatory human approval in addition to bot self-approval for any actor other than dependabot[bot] until content-aware validation exists for that actor's typical change set.


@pr-auditor rescan to re-run · Powered by Claude Sonnet 5 · Docs · #security-engineering-team

Jlougedo-TF and others added 3 commits September 9, 2026 15:36
This repo has no Smartling-managed content: the smartling-github-connector[bot]
has never opened a PR here and there is no Smartling config. Narrow the
allowlist to the bots that actually raise PRs in this repo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A green CI run does not prove a transitive dependency bump is safe: the
repo's own tests never exercise how the intermediate package uses the changed
API. Approve as before, but only arm auto-merge when the diff looks routine.

Held back for a human when any of these match:
  - the bot's title declares a major version upgrade
  - a JS manifest touches resolutions/overrides (a forced transitive pin)
  - go.mod gains a +incompatible major bump
  - more than 6 manifest dependency lines change at once
  - the lockfile rewrite exceeds 600 lines

Validated against 13 real bot PRs: correctly holds xfiles#543 (docker v24->v25
+incompatible), blocks#3039 (major axios), renderer#1481 and mail-composer#400
(forced resolutions), and correctly passes the single direct minor bumps such
as embed#760, pages#620 and purgatory#314.

Also drops the checkout and 'apt-get install gh' steps: nothing read the working
tree (gh is API-only) and gh ships on ubuntu-latest. All repos now hold a
byte-identical file apart from the allowlist line.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assess risk first, then approve only when the diff looks routine. A risky PR
now gets no approval at all, so it cannot satisfy the required-review count and
a human has to sign it off - the label alone was advisory, since a bot approval
already met the review requirement.

Also close the stale-arming gap: a PR can open looking routine (approved,
auto-merge armed) and then be force-pushed into something risky. On the risky
path the workflow now calls 'gh pr merge --disable-auto' and dismisses its own
earlier approval before labelling and commenting.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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