Skip to content

ci: run perf jobs on bamboo - #672

Merged
jdx merged 5 commits into
mainfrom
agent/bamboo-perf-runner
Aug 1, 2026
Merged

ci: run perf jobs on bamboo#672
jdx merged 5 commits into
mainfrom
agent/bamboo-perf-runner

Conversation

@jdx

@jdx jdx commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Summary

  • run Tak measurement jobs on the isolated bamboo-perf runner
  • identify the Bamboo image/toolchain as a distinct Tak runner class
  • leave report and publish jobs on hosted runners

Validation

  • actionlint (with bamboo-perf registered as the expected custom label)
  • git diff --check
  • trusted main baseline queued on the disposable runner

AI-assisted — Tool: Codex; model: unavailable; version: unavailable.


Note

Medium Risk
Perf baselines and PR gates now depend on a self-hosted runner and a new Tak series ID, and perf-pr only runs for one author until that guard is removed—wrong runner availability or label config would break CI signal without touching app code.

Overview
Moves Tak instruction-count measurement in perf.yml and perf-pr.yml from GitHub-hosted ubuntu-24.04 to the self-hosted bamboo-perf runner, and registers that label in .github/actionlint.yaml so workflow linting accepts it.

Benchmark metadata now uses TAK_RUNNER: bamboo-v2-ubuntu24.04-x64-30vcpu-24gb-rust1.97.1-tokio1, explicitly starting a new measurement series (comments call out incompatibility with the old hosted-runner baseline). The workflows drop RUSTUP_TOOLCHAIN and the manual rustup toolchain install step, relying on mise-action on the Bamboo image instead.

perf-pr additionally gates measure and report with github.event.pull_request.user.login == 'jdx' so only that author’s PRs run the expensive compare/comment path; report/publish-style jobs that stay on ubuntu-latest are unchanged aside from that condition.

Reviewed by Cursor Bugbot for commit cefaafa. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • Chores
    • Updated performance testing workflows to use a standardized, pinned execution environment.
    • Improved consistency and comparability across performance test runs.
    • Simplified workflow setup by removing redundant environment configuration and installation steps.
    • Improved the reliability and repeatability of performance measurements across runs.
    • Added dedicated runner configuration for performance testing to support more predictable execution.

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Both performance workflows now run measurement jobs on bamboo-perf. They select the pinned Bamboo Rust and Tokio environment through TAK_RUNNER. The pull-request workflow no longer installs a benchmark Rust toolchain explicitly. Actionlint now accepts the runner label.

Changes

Performance workflow runner migration

Layer / File(s) Summary
Configure Bamboo performance runners
.github/workflows/perf-pr.yml, .github/workflows/perf.yml, .github/actionlint.yaml
The measurement jobs now use bamboo-perf and the pinned Bamboo TAK_RUNNER identifier. GitHub-hosted runner settings and explicit benchmark toolchain installation were removed. Actionlint now defines the self-hosted runner label.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

  • jdx/fnox#656: Updates the performance workflow runners and Rust environment.
  • jdx/fnox#670: Modifies the performance workflow runner and Rust toolchain configuration.

Poem

A rabbit hops on Bamboo lanes,
Pinned Rust runs benchmark trains.
TAK_RUNNER leads the way,
And workflows start the day.
Green checks greet the hay!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: running performance CI jobs on the Bamboo runner.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@greptile-apps

greptile-apps Bot commented Aug 1, 2026

Copy link
Copy Markdown

Greptile Summary

The PR moves Tak measurement jobs to the dedicated Bamboo performance runner while leaving reporting and publishing on hosted runners.

  • Registers bamboo-perf as an actionlint-approved self-hosted runner label.
  • Introduces a Bamboo-specific Tak measurement series identifier.
  • Restricts pull-request performance jobs to PRs authored by jdx.
  • Relies on the Bamboo image’s installed Rust toolchain rather than installing one in each workflow.

Confidence Score: 5/5

This follow-up appears safe to merge because no eligible blocking failure remains.

No blocking failure remains.

Important Files Changed

Filename Overview
.github/actionlint.yaml Registers the new bamboo-perf custom runner label for workflow linting.
.github/workflows/perf-pr.yml Moves PR measurements to Bamboo, adopts a new Tak runner class, removes explicit Rust installation, and author-gates measurement and reporting.
.github/workflows/perf.yml Moves main-branch measurements to Bamboo and starts a distinct benchmark series tied to the new image and toolchain.

Reviews (5): Last reviewed commit: "ci: restrict bamboo perf prs to jdx" | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/perf-pr.yml:
- Line 40: Create .github/actionlint.yaml and declare bamboo-perf under
self-hosted-runner.labels so actionlint recognizes the custom runner label. This
configuration change covers both references in
.github/workflows/perf-pr.yml#L40-L40 and .github/workflows/perf.yml#L40-L40; no
workflow changes are required.

In @.github/workflows/perf.yml:
- Around line 35-40: Split the workflow so the Bamboo-backed measure job remains
read-only and no longer runs tak push or requires contents: write. Add a
separate publish job on ubuntu-latest that receives the generated Git notes and
required measurement state from measure, then performs the Push measurements/tak
push step with contents: write and its GITHUB_TOKEN available only to that job.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: b59720f2-262e-4f21-ad9b-f8a0b838a137

📥 Commits

Reviewing files that changed from the base of the PR and between 13e2a7b and f6a881e.

📒 Files selected for processing (2)
  • .github/workflows/perf-pr.yml
  • .github/workflows/perf.yml

Comment thread .github/workflows/perf-pr.yml
Comment on lines 35 to +40
jobs:
measure:
name: Measure
# Pin the image as well as tak and Rust. Absolute instruction counts shift
# when any part of the measuring environment moves.
runs-on: ubuntu-24.04
runs-on: bamboo-perf

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Keep tak push on a hosted publish job.

Push measurements is still a step inside measure, so this runner change also moves the job-level contents: write permission and the GITHUB_TOKEN used by tak push onto bamboo-perf. That does not meet the PR objective that publish jobs remain on hosted runners. Keep measure read-only on Bamboo. Transfer the generated Git notes and required measurement state to a separate publish job on ubuntu-latest, and grant contents: write only there.

🧰 Tools
🪛 actionlint (1.7.12)

[error] 40-40: label "bamboo-perf" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2025-vs2026", "windows-2022", "windows-11-arm", "ubuntu-slim", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "macos-latest", "macos-latest-xlarge", "macos-latest-large", "macos-26-intel", "macos-26-xlarge", "macos-26-large", "macos-26", "macos-15-intel", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xlarge", "macos-14-large", "macos-14", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/perf.yml around lines 35 - 40, Split the workflow so the
Bamboo-backed measure job remains read-only and no longer runs tak push or
requires contents: write. Add a separate publish job on ubuntu-latest that
receives the generated Git notes and required measurement state from measure,
then performs the Push measurements/tak push step with contents: write and its
GITHUB_TOKEN available only to that job.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit cefaafa. Configure here.

jobs:
measure:
name: Compare instruction counts
if: github.event.pull_request.user.login == 'jdx'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

PR perf jobs skip other authors

Medium Severity

The perf-pr workflow still triggers on every pull request, but the new if conditions on measure and report run those jobs only when the PR author is jdx. Other contributors get no instruction-count comparison, sticky comment, or regression gate, despite the workflow’s stated purpose of gating regressions on the PR that caused them.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit cefaafa. Configure here.

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Instruction counts

benchmark trend instructions Δ wall (min) Δ
schema ▁█ 7,061,558 → 7,062,951 +0.02% 3.27 → 3.22ms -1.62%
usage ▁█ 10,869,387 → 10,870,612 +0.01% 3.51 → 3.41ms -2.91%

No instruction-count regression above 1.25%.

Measured on the base but not here — a benchmark that stops running also stops gating: schema on gha-ubuntu-24.04-x64-rust-1.91.1-tokio1, usage on gha-ubuntu-24.04-x64-rust-1.91.1-tokio1

Only instruction counts gate. Wall clock is shown for context — on identical hardware it moves 4-20% run to run.

Measured by tak — instruction-counted CLI benchmarks, stored in this repository's git notes.

cefaafa4b147 vs 13e2a7bbc6af · measured on the runner, not pushed to the history.

@jdx
jdx merged commit eb05bbf into main Aug 1, 2026
19 of 21 checks passed
@jdx
jdx deleted the agent/bamboo-perf-runner branch August 1, 2026 23:33
mise-en-dev added a commit that referenced this pull request Aug 9, 2026
### 🚀 Features

- **(bitwarden)** support custom fields by
[@jdx](https://github.com/jdx) in
[#690](#690)

### 🐛 Bug Fixes

- **(bitwarden)** support slashes in custom fields by
[@jdx](https://github.com/jdx) in
[#693](#693)
- **(ci)** update Infisical project bootstrap by
[@jdx](https://github.com/jdx) in
[#675](#675)

### 📚 Documentation

- **(sync)** clarify personal age provider setup by
[@jdx](https://github.com/jdx) in
[#692](#692)

### 🔍 Other Changes

- run perf jobs on bamboo by [@jdx](https://github.com/jdx) in
[#672](#672)
- build perf binaries on bamboo by [@jdx](https://github.com/jdx) in
[#674](#674)

### 📦️ Dependency Updates

- update jdx/mise-action action to v4.2.3 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#677](#677)
- update rust crate keepass to v0.13.18 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#678](#678)
- update rust crate schemars to v1.2.2 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#679](#679)
- update dependency github:jdx/tak to v0.0.5 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#676](#676)
- update rust crate jsonwebtoken to v11 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#685](#685)
- update zizmorcore/zizmor-action action to v0.6.1 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#680](#680)
- update rust crate base64 to 0.23 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#683](#683)
- update rust crate usage-lib to v4.1.0 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#684](#684)
- update dependency @anthropic-ai/claude-code to v2.1.220 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#681](#681)
- update rust crate usage-lib to v5 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#687](#687)
- update rust crate rmcp to v3 by
[@renovate[bot]](https://github.com/renovate[bot]) in
[#688](#688)
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