Skip to content

fix(migrator): add addForeignKeyOptions to PostgreSQL adapter so FK migrations run #809

fix(migrator): add addForeignKeyOptions to PostgreSQL adapter so FK migrations run

fix(migrator): add addForeignKeyOptions to PostgreSQL adapter so FK migrations run #809

Workflow file for this run

name: Wheels Bot — Reviewer B
on:
pull_request_review:
types: [submitted]
permissions:
contents: read
concurrency:
group: wheels-bot-review-b-${{ github.event.pull_request.number }}-${{ github.event.review.id }}
cancel-in-progress: false
jobs:
review-the-review:
name: Reviewer B
runs-on: ubuntu-latest
timeout-minutes: 15
# Critiques Reviewer A's reviews on human ready-for-review PRs AND on
# the bot's own PRs (even draft). The bot-PR draft case lets the human
# merge decision benefit from both Reviewer A's findings and Reviewer
# B's quality check before the PR is marked ready.
if: |
vars.WHEELS_BOT_ENABLED == 'true'
&& github.event.review.user.login == 'wheels-bot[bot]'
&& (
github.event.pull_request.user.login == 'wheels-bot[bot]'
|| github.event.pull_request.draft == false
)
steps:
# SECURITY: check out the BASE branch, never the reviewed commit. This
# workflow runs on `pull_request_review`, which carries the base repo's
# secrets + write token even for fork PRs. Checking out
# `github.event.review.commit_id` (a fork commit on fork PRs) and then
# running the local `./.github/actions/wheels-bot-skip-check` composite
# action below would execute fork-controlled code with the bot's token
# (the classic pwn-request). The reviewed commit's objects are fetched
# read-only after the token step so the review's git commands still
# resolve; nothing from the fork is ever executed. The marker still keys
# off review.commit_id (passed via `with:`/prompt, not shell), so the gate
# and emitted marker stay aligned with the commit A reviewed (#2848).
- name: Checkout BASE branch (trusted — never the reviewed/fork commit)
uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.base.ref }}
persist-credentials: false
fetch-depth: 0
- name: Generate App token
id: app-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ secrets.WHEELS_BOT_APP_ID }}
private-key: ${{ secrets.WHEELS_BOT_PRIVATE_KEY }}
- name: Fetch PR head commit objects (read-only; never checked out)
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
set -euo pipefail
if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then
echo "::error::PR number is not numeric: $PR_NUMBER"
exit 1
fi
# Objects only — the working tree stays on the trusted base branch.
# Best-effort: B reviews A's review via gh, so a fetch miss is non-fatal.
git fetch --no-tags origin "refs/pull/${PR_NUMBER}/head" || true
- name: Skip check
id: gate
uses: ./.github/actions/wheels-bot-skip-check
with:
target-type: pr
target-number: ${{ github.event.pull_request.number }}
# Key off the reviewed commit (same SHA checked out above and threaded
# into the prompt) so the gate and the emitted marker agree (#2848).
marker-pattern: 'wheels-bot:review-b:${{ github.event.pull_request.number }}:${{ github.event.review.commit_id }}:'
github-token: ${{ steps.app-token.outputs.token }}
- name: Run Reviewer B
if: steps.gate.outputs.skip == 'false'
uses: anthropics/claude-code-action@v1
with:
# This workflow is triggered by `wheels-bot[bot]` submitting a review.
# The action defaults to blocking bot-initiated runs; explicitly allow
# our App's bot identity (and github-actions[bot] for any future cron
# triggers). Specific allowlist preferred over '*' — the repo is public.
allowed_bots: 'wheels-bot[bot],github-actions[bot]'
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
github_token: ${{ steps.app-token.outputs.token }}
prompt: |
/review-the-review ${{ github.event.pull_request.number }} ${{ github.event.review.id }} ${{ github.event.review.commit_id }}
claude_args: |
--model claude-sonnet-4-6
--max-turns 300
--allowedTools "Bash(gh:*),Bash(git log:*),Bash(git diff:*),Bash(git show:*),Bash(git grep:*),Bash(git status),Read,Grep,Glob"