Skip to content

Run Dependabot pull requests on GitHub-hosted runners - #646

Merged
leynos merged 1 commit into
mainfrom
dependabot-hosted-runners
Oct 24, 2026
Merged

leynos merged 1 commit into
mainfrom
dependabot-hosted-runners

Conversation

@leynos

@leynos leynos commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

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-on that has the fork fallback gains the Dependabot arm, in the pilot's shape:

runs-on: >-
  ${{ (github.event.pull_request.head.repo.fork
  || github.event.pull_request.user.login == 'dependabot[bot]')
  && 'ubuntu-latest' || 'ubicloud-standard-N' }}
  • pull_request.user.login (the author), not github.actor, which changes on a re-run.
  • Pushes to main have no pull_request payload and stay on Ubicloud, so main's caches stay warm.
  • Every Ubicloud lane that had the fork fallback gains the Dependabot arm (workflow runs-on lines, plus the runner:/os: matrix keys in ci.yml, rust-toy-app.yml and the test-install-* and test-setup-rust-mold workflows). The two test-ubicloud-sccache-proxy.yml jobs carry a dependabot-runner: exempt comment: they prove the Ubicloud cache proxy, which a hosted runner cannot show; test-upload-codescene-coverage.yml and the push/dispatch-only lanes were already exempt. test_runner_placement.py and test_coverage_watchdog_lane.py read only the exact combined condition. The 35 mutations cover every armed workflow file plus the contract regex. Heavy-repository note: the repository's own Dependabot PRs (shared-actions pin bumps) are the ones that run here, so the first natural one is the measured run.
  • docs/developers-guide.md records the reason and the cold-cache consequence.

Check script row (before)

["shared-actions", "pending", "44 ubicloud jobs, 34 lacking the arm; 10 without fork fallback"] from ~/docs/jm5-dependabot-runners/bin/check.py on origin/HEAD before this change.

Gates

pytest tests/workflows as the Makefile runs it with the act lane off: 1352 passed, 144 skipped; mdtablefix --check and markdownlint-cli2 clean.

Mutation proof

Mutation Result
ci.yml: user.login replaced by actor (all jobs) killed
ci.yml: Dependabot arm removed (first job) killed
rust-toy-app.yml: user.login replaced by actor (all jobs) killed
rust-toy-app.yml: Dependabot arm removed (first job) killed
test-coverage-watchdog.yml: user.login replaced by actor (all jobs) killed
test-coverage-watchdog.yml: Dependabot arm removed (first job) killed
test-cv005-contracts.yml: user.login replaced by actor (all jobs) killed
test-cv005-contracts.yml: Dependabot arm removed (first job) killed
test-determine-release-modes.yml: user.login replaced by actor (all jobs) killed
test-determine-release-modes.yml: Dependabot arm removed (first job) killed
test-export-cargo-metadata.yml: user.login replaced by actor (all jobs) killed
test-export-cargo-metadata.yml: Dependabot arm removed (first job) killed
test-install-makeutil.yml: user.login replaced by actor (all jobs) killed
test-install-makeutil.yml: Dependabot arm removed (first job) killed
test-install-mdtablefix.yml: user.login replaced by actor (all jobs) killed
test-install-mdtablefix.yml: Dependabot arm removed (first job) killed
test-install-tool.yml: user.login replaced by actor (all jobs) killed
test-install-tool.yml: Dependabot arm removed (first job) killed
test-install-whitaker.yml: user.login replaced by actor (all jobs) killed
test-install-whitaker.yml: Dependabot arm removed (first job) killed
test-install-yaml-lint.yml: user.login replaced by actor (all jobs) killed
test-install-yaml-lint.yml: Dependabot arm removed (first job) killed
test-rust-build-release-root-discovery.yml: user.login replaced by actor (all jobs) killed
test-rust-build-release-root-discovery.yml: Dependabot arm removed (first job) killed
test-setup-rust-clang-lld.yml: user.login replaced by actor (all jobs) killed
test-setup-rust-clang-lld.yml: Dependabot arm removed (first job) killed
test-setup-rust-mold.yml: user.login replaced by actor (all jobs) killed
test-setup-rust-mold.yml: Dependabot arm removed (first job) killed
test-setup-rust-sccache.yml: user.login replaced by actor (all jobs) killed
test-setup-rust-sccache.yml: Dependabot arm removed (first job) killed
test-stage-release-artefacts.yml: user.login replaced by actor (all jobs) killed
test-stage-release-artefacts.yml: Dependabot arm removed (first job) killed
test-upload-release-assets.yml: user.login replaced by actor (all jobs) killed
test-upload-release-assets.yml: Dependabot arm removed (first job) killed
contract tests/workflows/test_runner_placement.py: r"\s*==\s*'dependabot\[bot\]'\s*\)" -> r"\s*==\s*'x'\s*\)" killed

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

Extend hosted-runner fallback coverage to Dependabot pull requests across the CI workflows while preserving Ubicloud-specific cache-proxy lanes.

Enhancements:

  • Route Dependabot pull requests through GitHub-hosted runners alongside fork pull requests while keeping main and other non-PR workflows on Ubicloud.
  • Document the runner-selection rationale, author-based detection, cache implications, and explicit Ubicloud exceptions.

Tests:

  • Update workflow placement contracts to require the combined fork-or-Dependabot runner condition and verify both parts through mutation coverage.

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.

Every Ubicloud lane that had the fork fallback gains the Dependabot arm (workflow `runs-on` lines, plus the `runner:`/`os:` matrix keys in `ci.yml`, `rust-toy-app.yml` and the `test-install-*` and `test-setup-rust-mold` workflows). The two `test-ubicloud-sccache-proxy.yml` jobs carry a `dependabot-runner: exempt` comment: they prove the Ubicloud cache proxy, which a hosted runner cannot show; `test-upload-codescene-coverage.yml` and the push/dispatch-only lanes were already exempt. `test_runner_placement.py` and `test_coverage_watchdog_lane.py` read only the exact combined condition. The 35 mutations cover every armed workflow file plus the contract regex. Heavy-repository note: the repository's own Dependabot PRs (shared-actions pin bumps) are the ones that run here, so the first natural one is the measured run.
@sourcery-ai

sourcery-ai Bot commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

Sorry @leynos, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 5 days and 10 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-24T11:55:11.740660Z d73bb96 PR opened
🔒 Security Review ✅ Completed 2026-10-24T11:56:15.708682Z d73bb96 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Team
  • Run ID: 75bac1f0-1459-4a06-8ba9-4b3d78a67921
Commits

Reviewing files that changed from the base of the PR and between 27e97be and d73bb96.

Files selected for processing: 21
  • .github/workflows/ci.yml
  • .github/workflows/rust-toy-app.yml
  • .github/workflows/test-coverage-watchdog.yml
  • .github/workflows/test-cv005-contracts.yml
  • .github/workflows/test-determine-release-modes.yml
  • .github/workflows/test-export-cargo-metadata.yml
  • .github/workflows/test-install-makeutil.yml
  • .github/workflows/test-install-mdtablefix.yml
  • .github/workflows/test-install-tool.yml
  • .github/workflows/test-install-whitaker.yml
  • .github/workflows/test-install-yaml-lint.yml
  • .github/workflows/test-rust-build-release-root-discovery.yml
  • .github/workflows/test-setup-rust-clang-lld.yml
  • .github/workflows/test-setup-rust-mold.yml
  • .github/workflows/test-setup-rust-sccache.yml
  • .github/workflows/test-stage-release-artefacts.yml
  • .github/workflows/test-ubicloud-sccache-proxy.yml
  • .github/workflows/test-upload-release-assets.yml
  • docs/developers-guide.md
  • tests/workflows/test_coverage_watchdog_lane.py
  • tests/workflows/test_runner_placement.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.

Summary

Route Dependabot-authored pull requests to ubuntu-latest in the affected workflows. Check github.event.pull_request.user.login for dependabot[bot], alongside the existing fork check. Keep other pull requests on ubicloud-standard-2; pushes to main remain on Ubicloud.

Keep the Ubicloud sccache proxy test jobs on Ubicloud because they test the Ubicloud cache proxy. Update the developer guide and workflow tests to document and check the runner-selection condition.

Validation

The PR description reports that pytest tests/workflows passed with 1,352 tests and 144 skips. It also reports clean mdtablefix --check and markdownlint-cli2 results. These results were not independently verified.

Walkthrough

Workflow runner conditions now select ubuntu-latest for pull requests from forks or authored by dependabot[bot]. The developer guide and workflow tests describe or check this condition. Two Ubicloud proxy test lanes are marked as exempt.

Changes

Runner placement

Layer / File(s) Summary
Apply runner conditions
.github/workflows/ci.yml, rust-toy-app.yml, test-coverage-watchdog.yml, test-cv005-contracts.yml, test-determine-release-modes.yml, test-export-cargo-metadata.yml, test-install-*.yml, test-rust-build-release-root-discovery.yml, test-setup-rust-*.yml, test-stage-release-artefacts.yml, test-upload-release-assets.yml
The affected jobs select ubuntu-latest for fork or Dependabot-authored pull requests. Other cases retain ubicloud-standard-2.
Document and check the policy
.github/workflows/test-ubicloud-sccache-proxy.yml, docs/developers-guide.md, tests/workflows/*
The guide and test patterns describe or check the runner condition. Comments mark the Ubicloud proxy lanes as exempt.

Possibly related PRs

  • leynos/vk#335: Applies the same fork-or-Dependabot runner condition in a separate repository.
  • leynos/wireframe#783: Adds the same runner routing rule and its own contract checks.
  • leynos/podbot#267: Uses the pull request author to apply the same runner rule in a separate repository.

Suggested reviewers: codescene-access

Priority: Low

Change: Other

Merge Risk: Minimal · up to d73bb

No actionable merge risk was identified in the Dependabot runner-placement changes.

Pre-merge checks: Passed 12 · Failed 3

Failed Failed checks: 3 warnings

Check name Status Explanation Resolution
User-Facing Documentation Warning Document the changed runner behaviour in docs/users-guide.md. The PR adds a Dependabot author condition that sends affected pull-request jobs to ubuntu-latest instead of ubicloud-standard-2 (for… Add a concise users-guide section that explains the Dependabot author check, the hosted-runner selection, the unchanged Ubicloud behaviour for pushes and other pull requests, the cold-cache consequence, and the explicit Ubicloud cache-proxy…
Developer Documentation Warning Document the new Dependabot runner policy in docs/developers-guide.md, including the author check and the hosted fallback. However, the new exception text is inaccurate. Lines 3708–3711 state that b… Correct the developer guide. State separately that the two test-ubicloud-sccache-proxy.yml jobs are marked dependabot-runner: exempt and run on Ubicloud for same-repository Dependabot pull requests. Describe `test-upload-codescene-cover…
Observability Warning The pull request changes CI runner placement for Dependabot pull requests. This changes runner resource consumption and cache behaviour, but the diff adds no metric or telemetry update. The affected w… Add bounded CI telemetry for the affected lanes. Record the selected runner pool, job outcome and duration, plus cache outcome where a cache is used. Use fixed labels such as github-hosted and ubicloud; do not emit author names, URLs, c…
Passed Passed checks: 12 passed
Check name Status Explanation
Title check Passed The title clearly describes the main change: routing Dependabot pull requests to GitHub-hosted runners. No roadmap or GitHub issue number is required by the provided context.
Description check Passed The description directly explains the runner changes, author-based Dependabot detection, exceptions, documentation updates, and validation results.
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Testing (Overall) Passed PASS: The runner-selection change has substantive static contract coverage. tests/workflows/test_runner_placement.py:49-84 requires the exact parenthesised `head.repo.fork || pull_request.user.login…
Module-Level Documentation Passed Pass the module-level documentation check. The pull request changes workflow YAML, Markdown, and two existing Python test modules. Both changed Python modules already have module docstrings at `tests/…
Testing (Unit And Behavioural) Passed Accept the testing coverage. tests/workflows/test_runner_placement.py now requires the exact fork-or-Dependabot condition and checks the runner arms across every workflow job and matrix value. `test…
Testing (Property / Proof) Passed Keep the existing parameterized contract tests. The change updates finite workflow runner declarations and their exact selector regex; it does not introduce an algorithm or invariant over a broad inpu…
Testing (Compile-Time / Ui) Passed The pull request changes GitHub Actions YAML, developer documentation, and Python contract tests. It introduces no Rust or TypeScript compile-time behaviour and no text-based or UI-adjacent runtime ou…
Unit Architecture Passed Pass the check. The pull request changes only GitHub Actions runner-selection expressions, explanatory documentation, and regular-expression contract tests. It adds no query or command implementation,…
Domain Architecture Passed Mark PASS. The pull request changes only GitHub Actions runner expressions, workflow comments, developer documentation, and workflow contract tests. It does not change domain logic, domain models, com…
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2 files. (19 skipped: 19 unsupported.)

Full details: Testing (Overall)

Explanation

PASS: The runner-selection change has substantive static contract coverage. tests/workflows/test_runner_placement.py:49-84 requires the exact parenthesised head.repo.fork || pull_request.user.login == 'dependabot[bot]' selector and extracts both runner arms. TestLinuxPlacementRule at :208-271 applies this check to every discovered runner job, including matrix runner values, and rejects missing, inverted, or unrecognised expressions. The watchdog contract independently applies the same exact selector to every watchdog job at tests/workflows/test_coverage_watchdog_lane.py:343 and :510-543. The test discovery covers all workflow runner jobs through _workflow_reading.runner_job_ids() (:274-288). Therefore plausible regressions such as removing the Dependabot arm, using github.actor, applying the condition to the wrong field, omitting one lane, or reversing the runner arms would fail.

Full details: Module-Level Documentation

Explanation

Pass the module-level documentation check. The pull request changes workflow YAML, Markdown, and two existing Python test modules. Both changed Python modules already have module docstrings at tests/workflows/test_coverage_watchdog_lane.py:1-14 and tests/workflows/test_runner_placement.py:1-26. These docstrings explain each module's purpose, utility, and relationship to related workflow checks. The Python changes only update regex conditions; they do not add a module or remove documentation.

Full details: Testing (Unit And Behavioural)

Explanation

Accept the testing coverage. tests/workflows/test_runner_placement.py now requires the exact fork-or-Dependabot condition and checks the runner arms across every workflow job and matrix value. tests/workflows/test_coverage_watchdog_lane.py applies the same contract to every watchdog job and also checks malformed multi-line runs-on values. These tests read the actual workflow YAML at the workflow contract boundary. They do not only exercise mocks or private helpers. The anchored expressions verify the author field, the Dependabot login, the hosted runner arm, and the Ubicloud fallback arm.

Full details: Testing (Property / Proof)

Explanation

Keep the existing parameterized contract tests. The change updates finite workflow runner declarations and their exact selector regex; it does not introduce an algorithm or invariant over a broad input, state, ordering, or transition space. test_runner_placement.py parametrizes every runner job and checks the exact hosted and Ubicloud arms, while test_coverage_watchdog_lane.py parametrizes every watchdog job and checks the same selector. A property test or exhaustive proof is not warranted.

Full details: Testing (Compile-Time / Ui)

Explanation

The pull request changes GitHub Actions YAML, developer documentation, and Python contract tests. It introduces no Rust or TypeScript compile-time behaviour and no text-based or UI-adjacent runtime output. The changed tests assert the exact Dependabot/fork runner expression and its runner arms, which is focused structural coverage; snapshot tests are not appropriate here.

Full details: Unit Architecture

Explanation

Pass the check. The pull request changes only GitHub Actions runner-selection expressions, explanatory documentation, and regular-expression contract tests. It adds no query or command implementation, external client, clock, storage access, global state, or new side-effect path. The workflow side effect remains explicit in runs-on, and the tests keep the runner policy visible through an exact pattern.

Full details: Domain Architecture

Explanation

Mark PASS. The pull request changes only GitHub Actions runner expressions, workflow comments, developer documentation, and workflow contract tests. It does not change domain logic, domain models, commands, repositories, or adapters. No domain-boundary violation is introduced.

Full details: User-Facing Documentation

Explanation

Document the changed runner behaviour in docs/users-guide.md. The PR adds a Dependabot author condition that sends affected pull-request jobs to ubuntu-latest instead of ubicloud-standard-2 (for example, .github/workflows/ci.yml), and it documents the rationale only in docs/developers-guide.md at lines 3671-3713. docs/users-guide.md has no corresponding Dependabot runner-placement section.

Resolution

Add a concise users-guide section that explains the Dependabot author check, the hosted-runner selection, the unchanged Ubicloud behaviour for pushes and other pull requests, the cold-cache consequence, and the explicit Ubicloud cache-proxy exceptions. Add the section to the users-guide related-document links if appropriate.

Full details: Developer Documentation

Explanation

Document the new Dependabot runner policy in docs/developers-guide.md, including the author check and the hosted fallback. However, the new exception text is inaccurate. Lines 3708–3711 state that both the Ubicloud sccache jobs and test-upload-codescene-coverage.yml stay on Ubicloud for Dependabot and each has a dependabot-runner: exempt comment. Only the two sccache jobs have that comment. The CodeScene workflow instead has a pre-existing github.actor != 'dependabot[bot]' guard and does not run for a Dependabot actor, as shown at .github/workflows/test-upload-codescene-coverage.yml:30-33.

Resolution

Correct the developer guide. State separately that the two test-ubicloud-sccache-proxy.yml jobs are marked dependabot-runner: exempt and run on Ubicloud for same-repository Dependabot pull requests. Describe test-upload-codescene-coverage.yml as a separate pre-existing exemption whose guard skips fork pull requests and Dependabot-actor runs. Remove the claim that each exemption carries the comment.

Full details: Observability

Explanation

The pull request changes CI runner placement for Dependabot pull requests. This changes runner resource consumption and cache behaviour, but the diff adds no metric or telemetry update. The affected workflows only change runs-on/matrix expressions and comments; repository telemetry is used only by calibrate-ci-telemetry.yml, while the changed workflows do not invoke ci-telemetry-start or ci-telemetry-finish. The documentation records the cold-cache consequence, but documentation is not an operational metric. GitHub job metadata helps identify the selected runner after a run, but it does not provide the required bounded cache and resource signals for diagnosing degradation.

Resolution

Add bounded CI telemetry for the affected lanes. Record the selected runner pool, job outcome and duration, plus cache outcome where a cache is used. Use fixed labels such as github-hosted and ubicloud; do not emit author names, URLs, cache keys or raw errors. Ensure the telemetry runs on failure and cancellation where possible, and document how maintainers use the signals to diagnose cold-cache or runner-resource degradation.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Forks and bots meet the hosted lane
Runner rules now share a name
Ubicloud keeps its proxy place
Guide and tests record the case
YAML paths align in flight

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai

sourcery-ai Bot commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Mechanically rolls out the established fork-runner pattern so Dependabot-authored pull requests use free GitHub-hosted runners on the public repository, with targeted Ubicloud exemptions, documentation, and contract/mutation tests protecting the exact runner-selection behavior.

Sequence diagram for Dependabot pull request execution

sequenceDiagram
    participant Dependabot
    participant GitHubActions
    participant HostedRunner as ubuntu-latest
    participant Ubicloud as ubicloud-standard-2
    Dependabot->>GitHubActions: Open pull request
    GitHubActions->>GitHubActions: Read pull_request.user.login
    alt author is dependabot[bot] or head repository is a fork
        GitHubActions->>HostedRunner: Schedule workflow job
    else regular same-repository pull request
        GitHubActions->>Ubicloud: Schedule workflow job
    end
Loading

Flow diagram for pull request runner selection

flowchart TD
    A[Pull request or workflow event] --> B{Fork pull request?}
    B -->|Yes| C[ubuntu-latest]
    B -->|No| D{"Author is dependabot[bot]?"}
    D -->|Yes| C
    D -->|No| E[ubicloud-standard-2]
    F[Push, dispatch, or tag event] --> E
Loading

File-Level Changes

Change Details Files
Routes Dependabot-authored pull requests to GitHub-hosted Linux runners alongside fork pull requests, while preserving Ubicloud for pushes, non-PR events, and explicitly exempted cache-proxy jobs.
  • Added the combined fork-or-Dependabot condition to direct workflow runner assignments.
  • Applied the same condition to Linux matrix runner/os values across CI, Rust toy app, and installation/setup workflows.
  • Left Ubicloud cache-proxy verification jobs explicitly exempt because hosted runners cannot exercise that service.
.github/workflows/ci.yml
.github/workflows/rust-toy-app.yml
.github/workflows/test-coverage-watchdog.yml
.github/workflows/test-cv005-contracts.yml
.github/workflows/test-determine-release-modes.yml
.github/workflows/test-export-cargo-metadata.yml
.github/workflows/test-install-makeutil.yml
.github/workflows/test-install-mdtablefix.yml
.github/workflows/test-install-tool.yml
.github/workflows/test-install-whitaker.yml
.github/workflows/test-install-yaml-lint.yml
.github/workflows/test-rust-build-release-root-discovery.yml
.github/workflows/test-setup-rust-clang-lld.yml
.github/workflows/test-setup-rust-mold.yml
.github/workflows/test-setup-rust-sccache.yml
.github/workflows/test-stage-release-artefacts.yml
.github/workflows/test-upload-release-assets.yml
.github/workflows/test-ubicloud-sccache-proxy.yml
Documents the runner-selection policy and its operational tradeoffs.
  • Explains why pull-request author identity is used instead of the rerun-dependent actor identity.
  • Records that Dependabot runs use hosted runners without Ubicloud cache benefits, while other event types remain on Ubicloud.
  • Updates workflow documentation and exemption rationale.
docs/developers-guide.md
Strengthens workflow-placement contracts and mutation coverage for the new expression.
  • Requires the exact parenthesized fork-or-Dependabot expression in runner-placement checks.
  • Ensures mutations replacing the author check or removing the Dependabot arm are detected across the armed workflows.
tests/workflows/test_runner_placement.py
tests/workflows/test_coverage_watchdog_lane.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@leynos
leynos merged commit 0f3047d into main Oct 24, 2026
73 checks passed
@leynos
leynos deleted the dependabot-hosted-runners branch October 24, 2026 12:13
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