Skip to content

ci: move Linux CI to self-hosted ARC (sized -4/-8)#158

Open
evereq wants to merge 2 commits into
developfrom
ci/arc-linux-runners
Open

ci: move Linux CI to self-hosted ARC (sized -4/-8)#158
evereq wants to merge 2 commits into
developfrom
ci/arc-linux-runners

Conversation

@evereq

@evereq evereq commented Jul 5, 2026

Copy link
Copy Markdown
Member

Move cloud Linux CI to sized self-hosted ARC runners

Regenerates Linux CI to run on our in-cluster ARC runners (k8s-w1..w5), sized by workload.

Runner mapping applied

All bare cloud Linux labels on non-CodeQL jobs were remapped to sized self-hosted labels:

  • ever-k8s-linux-x64-48 Linux jobs
  • ever-k8s-linux-x64-80 jobs (no 8-core-class labels present in this repo)

Per file:

  • .github/workflows/build-native-binaries.yml — 3 matrix Linux entries (x64-gnu, x64-musl, arm64-gnu cross-build) → ever-k8s-linux-x64-4
  • .github/workflows/publish-npm-packages.ymlpreflight-publish + 3 matrix Linux entries + publish-mainever-k8s-linux-x64-4
  • .github/actionlint.yamlnew; declares both self-hosted labels (ever-k8s-linux-x64-4, ever-k8s-linux-x64-8) so actionlint recognizes them

Left on GitHub-hosted (unchanged)

  • CodeQL (codeql.yml) — stays GitHub-hosted (github/codeql-action); untouched
  • macOS (macos-latest) and Windows (windows-latest) matrix legs
  • No *-arm, ubuntu-latest-16-cores, or Ubicloud ARM labels exist in this repo, so none were touched

Notes

  • Fork-PR CI remains disabled (self-hosted runners never execute untrusted fork PRs).
  • Diff is exactly these 3 files; branch was regenerated cleanly from develop.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@evereq, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 56 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7d50b466-61d3-40c3-a2a2-76d510c5e8cd

📥 Commits

Reviewing files that changed from the base of the PR and between 185d8c6 and 900cbef.

📒 Files selected for processing (2)
  • .github/workflows/build-native-binaries.yml
  • .github/workflows/publish-npm-packages.yml

Walkthrough

This PR updates CI configuration to use self-hosted Kubernetes runners. It adds allowed runner labels to actionlint.yaml, and switches Linux jobs in the build-native-binaries and publish-npm-packages workflows from ubuntu-latest to ever-k8s-linux-x64-4.

Changes

Self-hosted runner migration

Layer / File(s) Summary
Actionlint runner labels
.github/actionlint.yaml
Adds a self-hosted-runner section allowing labels ever-k8s-linux-x64-4 and ever-k8s-linux-x64-8.
Native binary build workflow
.github/workflows/build-native-binaries.yml
Switches os for x86_64-unknown-linux-gnu and x86_64-unknown-linux-musl matrix entries from ubuntu-latest to ever-k8s-linux-x64-4.
Publish npm packages workflow
.github/workflows/publish-npm-packages.yml
Switches preflight-publish, Linux entries in publish-platform matrix, and publish-main jobs to run on ever-k8s-linux-x64-4 instead of ubuntu-latest.

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

Poem

Hop, hop, onto a new machine we go,
From cloudy ubuntu to k8s below,
Labels set right, the runners align,
Binaries built on self-hosted vine,
A rabbit cheers this CI shine! 🐇✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title matches the main change: migrating Linux CI to sized self-hosted ARC runners.
Description check ✅ Passed The description directly describes the CI runner migration and the touched workflow files.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/arc-linux-runners

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 Jul 5, 2026

Copy link
Copy Markdown

Greptile Summary

This PR moves Linux GitHub Actions jobs onto sized self-hosted ARC runners. The main changes are:

  • Added actionlint labels for the new self-hosted runners.
  • Moved Linux native binary build matrix entries to ever-k8s-linux-x64-4.
  • Moved npm publish preflight, Linux package builds, and final publish to ever-k8s-linux-x64-4.

Confidence Score: 4/5

The changed Linux CI paths can fail on ARC images that do not provide hosted Ubuntu defaults.

  • build-native-binaries.yml now depends on a self-hosted runner having Node preinstalled.
  • Both workflows still use sudo apt-get for musl and ARM64 cross-toolchains.
  • The actionlint label config matches the new runner label.

.github/workflows/build-native-binaries.yml and .github/workflows/publish-npm-packages.yml

Important Files Changed

Filename Overview
.github/actionlint.yaml Adds actionlint configuration for the self-hosted runner labels used by the workflows.
.github/workflows/build-native-binaries.yml Moves Linux native builds to the ARC runner while retaining assumptions from the hosted Ubuntu image.
.github/workflows/publish-npm-packages.yml Moves Linux publish jobs to the ARC runner while retaining Ubuntu-specific toolchain installation steps.

Reviews (1): Last reviewed commit: "ci: move Linux CI to sized self-hosted A..." | Re-trigger Greptile

matrix:
include:
- os: ubuntu-latest
- os: ever-k8s-linux-x64-4

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Implicit Node Runtime Removed

This workflow runs node ./scripts/sync-package-versions.js and later node ./scripts/prepare-platform-package.js, but it never installs Node. That worked on ubuntu-latest because Node is part of the hosted image; on a minimal ever-k8s-linux-x64-4 runner, every Linux matrix leg fails with node: command not found before the native binary is built.

artifact_name: ever-cli-linux-x64-gnu
package_dir: npm/cli-linux-x64-gnu
- os: ubuntu-latest
- os: ever-k8s-linux-x64-4

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Ubuntu Package Manager Required

The musl leg now runs on ever-k8s-linux-x64-4, but the job still installs musl-tools with sudo apt-get. If the ARC runner image is not Ubuntu/Debian-based or does not provide passwordless sudo, this matrix entry fails before cargo build and the ever-cli-linux-x64-musl artifact is never produced.

artifact_name: ever-cli-linux-x64-musl
package_dir: npm/cli-linux-x64-musl
- os: ubuntu-latest
- os: ever-k8s-linux-x64-4

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Cross Linker Path Assumed

The ARM64 Linux leg now runs on the custom ARC runner while later steps install gcc-aarch64-linux-gnu through sudo apt-get and set Cargo to use /usr/bin/aarch64-linux-gnu-gcc. On a non-Ubuntu or minimal runner image, that package install or linker path can be missing, causing the aarch64-unknown-linux-gnu build to fail.

artifact_name: ever-cli-linux-x64-gnu
package_dir: npm/cli-linux-x64-gnu
- os: ubuntu-latest
- os: ever-k8s-linux-x64-4

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Musl Publish Leg Needs Apt

This publish matrix entry moved to ever-k8s-linux-x64-4, but the job still depends on sudo apt-get install musl-tools. If the self-hosted runner image lacks apt or passwordless sudo, the musl package publish leg fails and publish-main is skipped because it needs publish-platform.

artifact_name: ever-cli-linux-x64-musl
package_dir: npm/cli-linux-x64-musl
- os: ubuntu-latest
- os: ever-k8s-linux-x64-4

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 ARM64 Publish Linker Assumed

The ARM64 Linux publish leg now runs on ever-k8s-linux-x64-4, but later steps still install gcc-aarch64-linux-gnu with sudo apt-get and point Cargo at /usr/bin/aarch64-linux-gnu-gcc. If the ARC image does not match the Ubuntu toolchain layout, this leg fails and the final package publish does not run.

Transform runs-on labels to use org variable expressions with fallback:
- ever-k8s-linux-x64-4 → ${{ vars.RUNNER_LINUX_X64_4 || 'ubuntu-latest' }}
- ever-k8s-linux-x64-8 → ${{ vars.RUNNER_LINUX_X64_8 || 'ubuntu-latest' }}

Enables repos to use self-hosted ARC runners when available, falling back
to GitHub-hosted ubuntu-latest in environments without the org variables.

- build-native-binaries.yml: 3 matrix entries (x64-gnu, x64-musl, arm64-gnu)
- publish-npm-packages.yml: 5 runs-on entries (preflight, 3 platform, main job)

Co-Authored-By: Claude Code <noreply@anthropic.com>
@cla-assistant

cla-assistant Bot commented Jul 5, 2026

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ evereq
❌ claude
You have signed the CLA already but the status is still pending? Let us recheck it.

1 similar comment
@cla-assistant

cla-assistant Bot commented Jul 5, 2026

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ evereq
❌ claude
You have signed the CLA already but the status is still pending? Let us recheck it.

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