Pin the reviewer, bound its run, and wake it when a pull request reopens

Junie has been reviewing pull requests here since the key was added, and eight
of the last eight runs succeeded. What it was not, was configured like the
sibling repositories, and three of those differences are worth closing.

The action was referenced as `@v1`. It is the only third-party action in this
repository and the only one handed a repository secret, so its definition
should not be able to change under us. `v1` and `v1.7.5` resolve to the same
commit today — the pin is not about which code runs now, it is about who gets
to decide that later.

There was no timeout. A run that goes wrong hangs rather than stops, and the
pull request shows a pending check until Actions gives up on its own six hours
later. Forty-five minutes, not the thirty the siblings use: the longest review
this repository has actually had ran thirty-five, on the largest diff so far,
and a ceiling that cuts a successful review short is worse than none.

And a pull request closed and reopened had had no review since it was closed.

Left alone deliberately: the absent-key step, which says so in the run summary
instead of failing a pull request for a reason that has nothing to do with its
code, and the lack of a `branches:` filter — work here stacks feature onto
feature, and filtering on main would skip every pull request in a chain but the
last.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016jxMkwA2rbicdGxHosecYi
This commit is contained in:
2026-08-20 17:59:15 +02:00
co-authored by Claude Fable 5
parent 9ae87e83fb
commit c1e7f6363d
+17 -2
View File
@@ -5,7 +5,11 @@ name: Junie review
# it reads well, and a review comment should never be able to turn the build red. # it reads well, and a review comment should never be able to turn the build red.
on: on:
pull_request: pull_request:
types: [opened, synchronize, ready_for_review] # `reopened` because a pull request closed and reopened has had no review since it was
# closed, and `ready_for_review` because the draft guard below would otherwise skip a pull
# request opened as a draft forever. No `branches:` filter: work here stacks feature onto
# feature, so filtering on main would skip every pull request in a chain but the last.
types: [opened, synchronize, reopened, ready_for_review]
# A review of the previous push is stale the moment a new one lands, so supersede it rather than # A review of the previous push is stale the moment a new one lands, so supersede it rather than
# letting two reviews comment on the same pull request. Keyed by pull request rather than by ref # letting two reviews comment on the same pull request. Keyed by pull request rather than by ref
@@ -25,6 +29,11 @@ jobs:
review: review:
name: Review the diff name: Review the diff
runs-on: ubuntu-latest runs-on: ubuntu-latest
# A ceiling, not a target: a run that goes wrong hangs rather than stops, and the pull
# request shows a pending check until it does. Set above the longest review this repository
# has actually had — 35 minutes, on the largest diff so far — rather than at the sibling
# repositories' 30, which would have cut that one short.
timeout-minutes: 45
# Drafts are work in progress and forks cannot see `JUNIE_API_KEY` — GitHub withholds secrets # Drafts are work in progress and forks cannot see `JUNIE_API_KEY` — GitHub withholds secrets
# from `pull_request` runs on forked branches, so the job would fail on a missing key rather # from `pull_request` runs on forked branches, so the job would fail on a missing key rather
# than say anything useful about the code. # than say anything useful about the code.
@@ -54,7 +63,13 @@ jobs:
# clone is never used. # clone is never used.
fetch-depth: 1 fetch-depth: 1
- uses: JetBrains/junie-github-action@v1 # Pinned to a commit rather than to `v1`: this is the only third-party action here and it
# is handed a repository secret, so its definition should not be able to change under us.
# `v1` resolves to this same commit today; the pin is about who gets to move it. The pin
# covers this definition only — the composite pulls its own dependencies by tag and fetches
# the Junie CLI over the network. Bump by resolving the new release's commit, never by
# moving a tag name.
- uses: JetBrains/junie-github-action@3f6a906f11c6f67c76efaf3d3264bbb615f9ce29 # v1.7.5
if: env.HAS_JUNIE_KEY == 'true' if: env.HAS_JUNIE_KEY == 'true'
# An opinion, not a gate. If Junie is down or rate-limited that is worth seeing in the # An opinion, not a gate. If Junie is down or rate-limited that is worth seeing in the
# log, but it is not a reason to hold a pull request whose tests pass. # log, but it is not a reason to hold a pull request whose tests pass.