Repository navigation
Run Dependabot pull requests on GitHub-hosted runners - #646
Conversation
Reviewer's GuideThe PR mechanically rolls out the established fork-runner pattern so Dependabot pull requests use Sequence diagram for Dependabot runner and coverage cache selectionsequenceDiagram
participant GitHub
participant Workflow
participant Coverage
participant Cache
GitHub->>Workflow: pull_request event
Workflow->>Workflow: github.event.pull_request.user.login
alt fork or Dependabot author
Workflow->>Workflow: select ubuntu-latest
Workflow->>Coverage: skip export-ubicloud-cache-credentials
Coverage->>Cache: use backend local
Cache-->>Coverage: compile cold
else owned pull request
Workflow->>Workflow: select ubicloud-standard-2
Workflow->>Coverage: run export-ubicloud-cache-credentials
Coverage->>Cache: use backend gha
end
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
Summary
ValidationThe author reports 795 tests passed, 49 fixture errors because WalkthroughCI runner conditions now send fork and Dependabot pull requests to ChangesPull-request runner placement and cache handling
Suggested labels: Priority: ⬇️ Low Change: Feature Merge Risk: ⚪ Minimal · up to
|
GitHub-hosted minutes cost nothing on a public repository, so a pull request authored by dependabot[bot] now falls back to ubuntu-latest like a fork's. The expression tests pull_request.user.login rather than github.actor, which changes when someone re-runs or pushes. A push to main has no pull_request payload and stays on Ubicloud, so main still writes the cache. Besides `runs-on`, the `coverage` lane's sccache credentials-step guard and `backend` input were keyed on the fork field alone, so a Dependabot pull request on the hosted arm would have tried the Ubicloud cache proxy and failed closed; both now carry the combined condition. `tests/helpers/ci_placement.py` reads the combined expression (references: the fork and author fields), `test_ci_runner_placement.py` and `test_ci_compiler_cache_backend.py` require it, `test_ci_placement_reader.py` gains positive and actor-stand-in cases, and `test_ci_harness_boundary.py` no longer mistakes the `'dependabot[bot]'` operand for a runner label. Bespoke contract, so this PR takes the full review gate.
1f488f4 to
19f2110
Compare
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4da3a8e661
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@coderabbitai The latest pre-merge table shows an error row (Testing (Unit And Behavioural)) asking for a workflow-level end-to-end test. Please assess this argument and say whether the error row is cleared at the current head. GitHub Actions evaluates |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
git rev-parse HEAD
fd -H '^(AGENTS\.md|ci_placement\.py|test_ci_runner_placement\.py|test_ci_compiler_cache_backend\.py|test_ci_placement_reader\.py)$' .
for f in tests/helpers/ci_placement.py tests/test_ci_runner_placement.py tests/test_ci_compiler_cache_backend.py tests/test_ci_placement_reader.py; do
ast-grep outline "$f"
done
gh pr view 646 --repo leynos/cuprum --json headRefOid,body,statusCheckRollup
gh api repos/leynos/cuprum/issues/646/comments --paginate --jq '.[] | {id,user:.user.login,body}'
gh pr view 152 --repo leynos/typos-config-builder --json body,state,mergedAt,commentsLength of output: 94599 🏁 Script executed: #!/bin/bash
cat AGENTS.md
sed -n '40,135p' tests/helpers/ci_placement.py
sed -n '245,335p' tests/helpers/ci_placement.py
sed -n '50,145p' tests/test_ci_runner_placement.py
sed -n '20,32p' tests/test_ci_placement_reader.py
sed -n '105,147p' tests/test_ci_placement_reader.py
sed -n '35,110p' tests/test_ci_compiler_cache_backend.py
sed -n '135,260p' tests/test_ci_compiler_cache_backend.py
ast-grep outline tests/helpers/ci_events.py
sed -n '1,210p' tests/helpers/ci_events.py
cat tests/features/ci_runner_selection.feature
rg -n -C 4 'runs-on:|dependabot|export-ubicloud-cache-credentials|backend:' .github/workflows/ci.yml .github/workflows/build-wheels.yml
git diff 4da3a8e661004faf4ea91a900e8ecb906f57c1b1 HEAD --stat
gh api repos/leynos/typos-config-builder/issues/152/comments --paginate --jq '.[] | select(.body | test("actions/runs/")) | {html_url,body}'Length of output: 72058 🤖 web_search executed:
Length of output: 16225
The current table requests a Dependabot event fixture and a scenario through the existing composed-workflow evaluator. It does not require a paid GitHub Actions job. The source inspection confirms two separate facts:
Correct one premise: GitHub evaluates runner selection before routing the job, not on a GitHub-hosted runner. See the GitHub contexts documentation. A local test cannot prove GitHub’s implementation, but it can exercise the repository’s event model against the checked-in composed workflows. Close the remaining gap without adding a proof workflow:
Keep live-run evidence separate. The retrieved pilot discussion accepts contract coverage and describes the real runs as pending post-merge validation. I found no linked completed selector runs in its comments, so I cannot confirm that part of the argument. This is a source-based assessment, not a test execution result. It does not change the displayed table or the PR’s approval status. You are interacting with an AI system. |
|
@coderabbitai Following your assessment, the existing behavioural model now has a Dependabot event: |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
git rev-parse HEAD
gh pr view 646 --repo leynos/cuprum --json headRefOid
fd -H '^AGENTS\.md$' .
cat AGENTS.md
for f in tests/helpers/ci_events.py tests/features/ci_runner_selection.feature tests/test_ci_compiler_cache_backend.py; do
ast-grep outline "$f"
done
rg -n -C 3 'DEPENDABOT_PULL_REQUEST|ci_runner_selection\.feature|Dependabot.s pull request selects only hosted runners|schedulable|dependabot' tests --glob '*.py' --glob '*.feature'Length of output: 50923 🏁 Script executed: #!/bin/bash
ast-grep outline tests/behaviour/test_ci_runner_selection.py
sed -n '1,210p' tests/helpers/ci_events.py
cat tests/features/ci_runner_selection.feature
sed -n '1,190p' tests/behaviour/test_ci_runner_selection.py
sed -n '260,320p' tests/behaviour/test_ci_runner_selection.py
sed -n '15,105p' tests/test_ci_compiler_cache_backend.py
sed -n '135,260p' tests/test_ci_compiler_cache_backend.py
rg -n -C 3 'runs-on:|dependabot|export-ubicloud-cache-credentials|backend:' .github/workflows/ci.yml .github/workflows/build-wheels.ymlLength of output: 39391 🏁 Script executed: #!/bin/bash
sed -n '190,223p' tests/behaviour/test_ci_runner_selection.py
git rev-parse HEADLength of output: 1738
Keep this verdict separate from test execution and PR approval. I did not run repository tests or reproduce the reported mutation check. This reply does not update the displayed table or change the provider’s approval status. No self-dispatching proof workflow is needed to close this finding. You are interacting with an AI system. |
Part of DF12-89
Rollout of the pattern in leynos/typos-config-builder#152 (reviewed and merged): Dependabot pull requests on a public repository run on GitHub-hosted runners, not Ubicloud. User decision of 19 October 2026.
Change
Every Ubicloud
runs-onthat has the fork fallback gains the Dependabot arm, in the pilot's shape:pull_request.user.login(the author), notgithub.actor, which changes on a re-run.mainhave nopull_requestpayload and stay on Ubicloud, so main's caches stay warm.runs-on, thecoveragelane's sccache credentials-step guard andbackendinput were keyed on the fork field alone, so a Dependabot pull request on the hosted arm would have tried the Ubicloud cache proxy and failed closed; both now carry the combined condition.tests/helpers/ci_placement.pyreads the combined expression (references: the fork and author fields),test_ci_runner_placement.pyandtest_ci_compiler_cache_backend.pyrequire it,test_ci_placement_reader.pygains positive and actor-stand-in cases, andtest_ci_harness_boundary.pyno longer mistakes the'dependabot[bot]'operand for a runner label. Bespoke contract, so this PR takes the full review gate.docs/developers-guide.mdrecords the reason and the cold-cache consequence.Check script row (before)
["cuprum", "pending", "8 ubicloud jobs, 7 lacking the arm"]from~/docs/jm5-dependabot-runners/bin/check.pyonorigin/HEADbefore this change.Gates
Focused:
pytest tests/test_ci_*.py tests/test_*workflow*.pywith--noconftest(795 passed; the 49 errors aretest_ci_setup_sccache_server_startfixtures that need a built sccache and the 1 failure found was fixed here),yamllint --strictandruff@0.16.4check/format on the changed tests clean,mdtablefix --checkclean.Mutation proof
build-wheels.yml:user.loginreplaced byactor(all jobs)build-wheels.yml: Dependabot arm removed (first job)ci.yml:user.loginreplaced byactor(all jobs)ci.yml: Dependabot arm removed (first job)tests/helpers/ci_placement.py:frozenset({hosted.group("fork_ref"), hosted.group("author_ref")})->frozenset({hosted.group("fork_ref")})Merge class
Mechanical rollout of the pilot's shape (same expression, same form of contract change, docs paragraph, mutation proof), per the lead's ruling of 19 October.
Overlapping open PRs
These open PRs touch the same kind of files; per the standing rulings they do not hold this PR and are left untouched:
Summary by Sourcery
Run Dependabot pull requests on GitHub-hosted runners while preserving consistent cache handling and CI placement contracts.
New Features:
Bug Fixes:
Enhancements:
Documentation:
Tests:
Selector proof
Selector proof: natural Dependabot runs on ubuntu-latest, all green: https://github.com/leynos/actix-v2a/actions/runs/39958329992, https://github.com/leynos/typos-config-builder/actions/runs/39990740324, https://github.com/leynos/agentland/actions/runs/39965006591; and a main push staying on ubicloud-standard-2: https://github.com/leynos/typos-config-builder/actions/runs/39181228629.