Skip to content

ci(NOJIRA-1234): Extend bot automerge to smartling and aikido - #761

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

ci(NOJIRA-1234): Extend bot automerge to smartling and aikido#761
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.

Overview

Jira ticket: https://typeform.atlassian.net/browse/<TICKET_ID>

Changes

Testing

Docs

  • Yes! ✋ I have updated the documentation.

For contributions to the Typeform/.github repo

Note: Please do not use this repository for new internal shared workflows and actions. Use https://github.com/Typeform/.github-private instead!

Please check that your contribution applies to one of these cases below. If this is not the case, please contribute to https://github.com/Typeform/.github-private instead.

  • This PR only changes an existing workflow.
  • This PR adds a new workflow that is needed in a public Typeform repository.

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:28
@pr-auditor

pr-auditor Bot commented Sep 9, 2026

Copy link
Copy Markdown

⚠️ Security Analysis Results

🟡 1 medium · 1 files reviewed

🟡 Medium severity

1. business_logic · .github/workflows/dependabot-automerge.yml:12

The auto-approve/auto-merge trust boundary (contents:write permission, pull_request_target trigger, and access to GITHUB_TOKEN/secrets) is gated solely on github.actor matching 'aikido-autofix[bot]'. The new 'Assess dependency risk' heuristics added in this workflow only inspect package.json/go.mod/lockfile diffs and dependency-bump title phrasing — they are structurally irrelevant to aikido-autofix[bot], whose commits are source-code security fixes rather than manifest changes. As a result, aikido PRs pass the risk gate by default (no manifest/lockfile changes to trigger any REASON) and are auto-approved and auto-merged with no additional scrutiny beyond actor-string identity.

Exploit: If the aikido-autofix[bot] GitHub App's installation token or the upstream Aikido service credentials were ever compromised, or if GitHub's actor-spoofing protections were bypassed via a misconfigured app, an attacker-controlled pull_request_target event appearing to originate from aikido-autofix[bot] would sail through the risk-assessment step (since it only checks dependency manifests) and be auto-approved and auto-merged into the default branch with contents:write access and no human review, enabling a supply-chain compromise via arbitrary source code changes.

Fix: Add a control for aikido-autofix[bot] specifically, independent of the dependency-risk heuristics — e.g., restrict allowed file paths to the bot's known autofix scope, require a passing security-specific CI check before enabling auto-merge, or verify the GitHub App installation ID via the API rather than relying solely on github.actor within a pull_request_target context.

Resolved Issues (1)
Status Category File Details
Accepted Risk business_logic .github/workflows/dependabot-automerge.yml Developer removed smartling-github-connector[bot] from the allowlist with an explicit comment ('Smartling is omitted: no translated content in this repo'), narrowing the scope of the original finding. The aikido-autofix[bot] portion of the concern remains and is re-reported.

@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:35
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