Skip to content

Place Dependabot pull requests on hosted runners for the default-features lane - #949

Merged
leynos merged 2 commits into
mainfrom
dependabot-default-features
Oct 24, 2026
Merged

leynos merged 2 commits into
mainfrom
dependabot-default-features

Conversation

@leynos

@leynos leynos commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

Part of DF12-89

Follow-up to #932: ci-default-features.yml was added after that PR was written, and its default-features job still carried the fork-only expression. It gains the Dependabot arm in the pilot's shape (runs-on and its rationale comment only). The check script reported it as the one netsuke job lacking the arm. The lane is now inventoried in the runner contracts (REQUIRED_RUNNER_ASSIGNMENTS, FORK_FALLBACK_RUNNERS, DIRECT_RUNNER_SOURCES): pytest tests/workflow_contracts 1305 passed, 2 skipped. Mechanical rollout of the merged pattern.

Mutation proof

Mutation Result
ci-default-features.yml: user.login replaced by actor (all jobs) killed
ci-default-features.yml: Dependabot arm removed (first job) killed
ci.yml: user.login replaced by actor (all jobs) killed
ci.yml: Dependabot arm removed (first job) killed
netsukefile-test.yml: user.login replaced by actor (all jobs) killed
netsukefile-test.yml: Dependabot arm removed (first job) killed

@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 4 days and 22 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Oct 24, 2026

Copy link
Copy Markdown
Contributor
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Updates the default-features CI lane to use GitHub-hosted runners for Dependabot and fork pull requests, while retaining Ubicloud runners for eligible pull requests and documenting the routing rationale.

Flow diagram for default-features runner selection

flowchart TD
    PR[Pull request] --> Check{Fork or Dependabot author?}
    Check -->|Yes| Hosted[GitHub-hosted runner: ubuntu-latest]
    Check -->|No| Ubicloud[Ubicloud runner: ubicloud-standard-4-ubuntu-2404]
Loading

File-Level Changes

Change Details Files
Route Dependabot default-features jobs to GitHub-hosted runners while preserving the existing fork fallback and Ubicloud path for other pull requests.
  • Extend the runner-selection expression to detect Dependabot as the pull request author.
  • Document why Dependabot jobs use the hosted runner and clarify that author identity, rather than the actor, determines the behavior.
.github/workflows/ci-default-features.yml

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

@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-24T22:36:34.899554Z 8332598 PR opened
🔒 Security Review ✅ Completed 2026-10-24T22:37:47.385108Z 8332598 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: 80dd3507-7765-485b-b4cc-87731be80278
Commits

Reviewing files that changed from the base of the PR and between ac826aa and 8332598.

Files selected for processing: 1
  • .github/workflows/ci-default-features.yml
🔗 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 2 reviews per hour.

Summary

  • Add dependabot[bot] to the runs-on condition for the default-features job. Dependabot pull requests now use ubuntu-latest; fork pull requests continue to use that runner.
  • Update the rationale comment. This follows up on PR #932.

Tests

  • The author reports that pytest tests/workflow_contracts completed with 1,305 passed and 2 skipped.

Walkthrough

The default-features job now uses ubuntu-latest for pull requests from forks or authored by dependabot[bot]. Other pull requests use ubicloud-standard-4-ubuntu-2404.

Changes

CI runner selection

Layer / File(s) Summary
Default-features runner condition
.github/workflows/ci-default-features.yml
The runner condition sends fork pull requests and pull requests authored by dependabot[bot] to ubuntu-latest. Other pull requests use the Ubicloud runner.

Possibly related issues

  • leynos/pg-embed-setup-unpriv#358 — The issue describes the same need for GitHub-hosted runners for Dependabot pull requests.

Possibly related PRs

  • leynos/netsuke#932 — This PR applies the same Dependabot runner condition to other CI lanes in this repository.
  • leynos/falcon-pachinko#249 — This PR adds the same Dependabot author check to a fork-aware runner condition.
  • leynos/vk#335 — This PR uses the same fork-or-Dependabot runner policy.

Suggested reviewers: codescene-access

Priority: Low

Change: Bug fix

Merge Risk: Minimal · up to 83325

The runner-selection change is narrowly scoped and presents no identified merge-blocking risk.

Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

Failed Failed checks: 2 errors

Check name Status Explanation Resolution
Testing (Overall) Error The pull request changes runner selection for Dependabot pull requests in .github/workflows/ci-default-features.yml (lines 45-51), but it adds no test. The existing fork-placement contract checks on… Add a workflow-contract test that loads .github/workflows/ci-default-features.yml, selects the default-features job, and asserts its runs-on expression uses the exact hosted guard `github.event.pull_request.head.repo.fork || github.ev…
Testing (Unit And Behavioural) Error The pull request changes the externally observable runs-on behaviour in .github/workflows/ci-default-features.yml, but it adds no test. Existing workflow-contract tests do not cover this job's run… Add a workflow-contract or end-to-end test that loads ci-default-features.yml and verifies the default-features job selects ubuntu-latest for fork and Dependabot pull requests, and ubicloud-standard-4-ubuntu-2404 otherwise. Include …
Passed Passed checks: 13 passed
Check name Status Explanation
Title check Passed The title states the main change: Dependabot pull requests are moved to hosted runners for the default-features lane. This matches the raw summary, the description and the objectives. The title does n…
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 0…
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.
User-Facing Documentation Passed PASS — The pull request changes only CI runner selection in .github/workflows/ci-default-features.yml. It does not add or change user-facing functionality, an API, a CLI, or application behaviour. N…
Developer Documentation Passed PASS — The pull request changes only the runs-on expression and its rationale comment in .github/workflows/ci-default-features.yml (lines 45–51). It adds no internal API, architectural boundary, a…
Module-Level Documentation Passed Pass the module-level documentation check. The pull request changes only .github/workflows/ci-default-features.yml, a workflow configuration file, and adds a runner expression plus comments. It intr…
Testing (Property / Proof) Passed PASS — The PR adds one boolean routing condition to .github/workflows/ci-default-features.yml: fork OR Dependabot selects ubuntu-latest; otherwise it selects the Ubicloud runner. This invariant ha…
Testing (Compile-Time / Ui) Passed Pass this check. The pull request changes only .github/workflows/ci-default-features.yml: it adds a Dependabot condition to runs-on and updates a comment. It introduces no Rust or TypeScript compi…
Unit Architecture Passed PASS. The pull request changes only .github/workflows/ci-default-features.yml. It extends the existing runs-on selection so Dependabot pull requests use ubuntu-latest (lines 43-51). This is work…
Domain Architecture Passed PASS. The pull request changes only the GitHub Actions runner selection and its comment in .github/workflows/ci-default-features.yml (lines 43–51). It does not change domain code, adapters, reposito…
Observability Passed The change only routes the existing default-features CI job to ubuntu-latest for Dependabot pull requests. It does not change application runtime behaviour or add a service, queue, storage, or net…
Description check Passed The description states the change is a follow-up to PR #932 that adds the Dependabot arm to the default-features job's runs-on expression in ci-default-features.yml, matching the raw summary. It also …
Full details: Title check

Explanation

The title states the main change: Dependabot pull requests are moved to hosted runners for the default-features lane. This matches the raw summary, the description and the objectives. The title does not reference a roadmap item or an issue number. The title requirements do not mandate either, because the PR description cites a tracker key (DF12-89) and a related PR (#932) rather than a roadmap number or a GitHub issue that the PR fixes.

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 0 files. (1 skipped: 1 unsupported.)

Full details: User-Facing Documentation

Explanation

PASS — The pull request changes only CI runner selection in .github/workflows/ci-default-features.yml. It does not add or change user-facing functionality, an API, a CLI, or application behaviour. No user-guide or migration documentation is required by this check.

Full details: Developer Documentation

Explanation

PASS — The pull request changes only the runs-on expression and its rationale comment in .github/workflows/ci-default-features.yml (lines 45–51). It adds no internal API, architectural boundary, abstraction, design decision, or new build/tool requirement. The change follows the existing Dependabot runner pattern in ci.yml and netsukefile-test.yml; no developer-guide or ADR update is required.

Full details: Module-Level Documentation

Explanation

Pass the module-level documentation check. The pull request changes only .github/workflows/ci-default-features.yml, a workflow configuration file, and adds a runner expression plus comments. It introduces no module.

Full details: Testing (Property / Proof)

Explanation

PASS — The PR adds one boolean routing condition to .github/workflows/ci-default-features.yml: fork OR Dependabot selects ubuntu-latest; otherwise it selects the Ubicloud runner. This invariant has two predicates and a small, complete truth table that a reader can audit directly. The change introduces no broad input/state space, lemma, or proof assumption. The custom check does not require a property test for this change.

Full details: Testing (Compile-Time / Ui)

Explanation

Pass this check. The pull request changes only .github/workflows/ci-default-features.yml: it adds a Dependabot condition to runs-on and updates a comment. It introduces no Rust or TypeScript compile-time behaviour, structured output, or UI output. The trybuild and snapshot requirements therefore do not apply.

Full details: Unit Architecture

Explanation

PASS. The pull request changes only .github/workflows/ci-default-features.yml. It extends the existing runs-on selection so Dependabot pull requests use ubuntu-latest (lines 43-51). This is workflow routing, not a query, command, fallible operation, dependency, or domain unit. It introduces no hidden state, side-effect, client, clock, or persistence boundary. The expression matches the established pattern in .github/workflows/ci.yml (lines 54-66). No Unit Architecture failure condition is introduced.

Full details: Domain Architecture

Explanation

PASS. The pull request changes only the GitHub Actions runner selection and its comment in .github/workflows/ci-default-features.yml (lines 43–51). It does not change domain code, adapters, repositories, commands, or business rules. The Domain Architecture failure conditions are therefore not applicable.

Full details: Observability

Explanation

The change only routes the existing default-features CI job to ubuntu-latest for Dependabot pull requests. It does not change application runtime behaviour or add a service, queue, storage, or network operation. GitHub Actions already exposes the job status, step logs, timeout, and runner selection, and the new comment documents the decision and its author-based condition. No new logging, metric, trace, or alert is required by this change.

Full details: Description check

Explanation

The description states the change is a follow-up to PR #932 that adds the Dependabot arm to the default-features job's runs-on expression in ci-default-features.yml, matching the raw summary. It also names the runner contract inventory and includes mutation test results, all of which relate to the changeset. The description is specific and on-topic, so the check passes.

Full details: Testing (Overall)

Explanation

The pull request changes runner selection for Dependabot pull requests in .github/workflows/ci-default-features.yml (lines 45-51), but it adds no test. The existing fork-placement contract checks only DIRECT_RUNNER_SOURCES in tests/workflow_contracts/runner_placement_test.py (lines 37-57), which excludes ci-default-features.yml. Its FORK_FALLBACK_RUNNERS mapping also excludes this lane (tests/workflow_contracts/fork_fallback.py, lines 232-240). The default-features tests check workflow inputs and Make targets, not runs-on (tests/workflow_contracts/ci_default_features_test.py, lines 121-143). Therefore, reverting the Dependabot arm for this job would still pass the existing tests.

Resolution

Add a workflow-contract test that loads .github/workflows/ci-default-features.yml, selects the default-features job, and asserts its runs-on expression uses the exact hosted guard github.event.pull_request.head.repo.fork || github.event.pull_request.user.login == 'dependabot[bot]', selects ubuntu-latest for that arm, and retains the Ubicloud runner for repository-owned runs. Add the lane to the relevant checked-in runner inventory and mutation/property coverage so removal, inversion, or incorrect replacement of the Dependabot arm fails.

Full details: Testing (Unit And Behavioural)

Explanation

The pull request changes the externally observable runs-on behaviour in .github/workflows/ci-default-features.yml, but it adds no test. Existing workflow-contract tests do not cover this job's runner expression: DIRECT_RUNNER_SOURCES excludes ci-default-features.yml, and ci_default_features_test.py checks workflow inputs and build steps only.

Resolution

Add a workflow-contract or end-to-end test that loads ci-default-features.yml and verifies the default-features job selects ubuntu-latest for fork and Dependabot pull requests, and ubicloud-standard-4-ubuntu-2404 otherwise. Include checks for the author guard and the existing fork guard.

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

Route fork pull requests to hosted ground
Send Dependabot there, too
Keep other jobs on Ubicloud
Let the runner condition choose
Check the workflow, then send it through

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

codescene-access[bot]

This comment was marked as outdated.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pre-merge checks failed. Please resolve the failing checks before merging.

@buzzybee-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai At the current head the ci-default-features.yml:default-features lane is inventoried in the runner contracts (REQUIRED_RUNNER_ASSIGNMENTS, FORK_FALLBACK_RUNNERS, DIRECT_RUNNER_SOURCES), so the existing fork-fallback and placement contracts now read its runs-on and require the exact combined fork-or-Dependabot condition with the hosted arm first. Replacing user.login by actor or removing the Dependabot arm in that workflow fails the contract (the mutation table is in the PR body). Please say whether both Testing error rows are cleared at this head.

@coderabbitai

coderabbitai Bot commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
git rev-parse HEAD
gh pr view 949 --repo leynos/netsuke --json headRefOid,body,reviews,comments
gh api repos/leynos/netsuke/pulls/949/comments --paginate --jq '.[] | {user: .user.login, path, line, body}'
fd -i 'ci-default-features\.yml|runner.*\.py|AGENTS\.md'
rg -n -C3 'REQUIRED_RUNNER_ASSIGNMENTS|FORK_FALLBACK_RUNNERS|DIRECT_RUNNER_SOURCES' tests/workflow_contracts

Length of output: 53751


🏁 Script executed:

#!/bin/bash
set -euo pipefail
cat AGENTS.md
ast-grep outline tests/workflow_contracts/fork_fallback.py --items all
ast-grep outline tests/workflow_contracts/fork_fallback_test.py --items all
ast-grep outline tests/workflow_contracts/runner_placement_test.py --items all
ast-grep outline tests/workflow_contracts/runner_placement_invariants.py --items all
ast-grep outline tests/workflow_contracts/runner_placement_properties_test.py --items all
nl -ba .github/workflows/ci-default-features.yml | sed -n '1,65p'
nl -ba tests/workflow_contracts/runner_placement_invariants.py | sed -n '45,105p'
nl -ba tests/workflow_contracts/runner_placement_test.py | sed -n '35,65p;220,275p'
nl -ba tests/workflow_contracts/fork_fallback.py | sed -n '1,210p;230,325p'
nl -ba tests/workflow_contracts/fork_fallback_test.py | sed -n '1,180p'
rg -n -C4 'dependabot|actor|fork_fallback|FORK_FALLBACK_KEYS' tests/workflow_contracts/runner_placement_properties_test.py

Length of output: 75820


@buzzybee-df12 Treat both Testing findings as cleared on the code evidence at head 831e73f.

Testing row Assessment
Testing (Overall) Cleared. The lane appears in REQUIRED_RUNNER_ASSIGNMENTS, FORK_FALLBACK_RUNNERS, and DIRECT_RUNNER_SOURCES. The contracts now load this job’s actual runs-on declaration.
Testing (Unit And Behavioural) Cleared. The contracts require the exact fork-or-Dependabot author guard, ubuntu-latest as the first arm, and ubicloud-standard-4-ubuntu-2404 as the fallback arm.

The property suite includes dependabot-arm-dropped and actor-instead-of-author mutations. The PR body also reports that both mutations against ci-default-features.yml were killed.

Distinguish this assessment from the displayed check state. The posted table still shows the earlier failures; this reply does not update that table or change approval status. I inspected the source but did not run the tests. The 1,305 passed, 2 skipped result remains author-reported.

You are interacting with an AI system.

@leynos
leynos merged commit 0a7a0d5 into main Oct 24, 2026
24 checks passed
@leynos
leynos deleted the dependabot-default-features branch October 24, 2026 23:27
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.

2 participants