feat: register org-level GitHub Actions runners - #71
Conversation
Add a RunnerScope (.repo | .org) and a scope-aware RunnerTarget value
type, then thread them through every layer that talks to GitHub:
* GHCLIService gets target-based overloads for getRegistrationToken,
listRemoteRunners, deleteRunner, and a new validateTarget(_:) that
routes to `repos/{owner}/{repo}` or `orgs/{org}` based on scope.
* RunnerInstaller / RunnerManager pass the target through to config.sh
so the runner registers at https://github.com/{org} for org scope and
https://github.com/{owner}/{repo} for repo scope.
* AddRunnerView gets a segmented Repository / Organization picker and
a corresponding Browse dropdown backed by listOrgs().
* CLIHandler accepts `--org` (and `--repo` for symmetry) on `add`,
validates the identifier shape against the chosen scope, and labels
org targets in `list` output.
* MenuBarView groups by RunnerTarget so a repo and org with the same
prefix don't collide, and uses a building icon for org groups.
The `scope` field decodes with a `.repo` fallback so configs written
by previous versions load unchanged.
Active-job polling (currentJob / completedJob) stays repo-only — the
GitHub API exposes workflow runs per repository, so org runners simply
skip that step rather than firing 404s.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Warning Review limit reached
More reviews will be available in 47 minutes and 12 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the 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 credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate. 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, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
# [1.17.0](v1.16.0...v1.17.0) (2026-06-18) ### Features * register org-level GitHub Actions runners ([#71](#71)) ([d7a2458](d7a2458))
|
🎉 This PR is included in version 1.17.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Summary
RunnerScope(.repo|.org) and a scope-awareRunnerTargetvalue typeGHCLIService,RunnerInstaller,RunnerManager, the GUI (AddRunnerView,MenuBarView), and CLI (mac-runner add ... --org)scope = .repoWhat changes
Model (
Sources/Models/Runner.swift)RunnerScopeenum andRunnerTargetstruct (encapsulatesapiPath,registrationURL,displayName)Runnergainsvar scope: RunnerScope(default.repo) and atargetcomputed propertyGitHub CLI service (
Sources/Services/GHCLIService.swift)getRegistrationToken,listRemoteRunners,deleteRunnervalidateTarget(_:)— routes torepos/{owner}/{repo}ororgs/{org}repo: Stringoverloads preserved for backward compatibilityRunner lifecycle (
Sources/Services/RunnerInstaller.swift,RunnerManager.swift)setupRunner/configureRunnertake aRunnerTargetsoconfig.sh --urlgets the right URL (https://github.com/{org}orhttps://github.com/{owner}/{repo})addRunner/addRunners/duplicateRunneraccept and persist the scopeupdateRunnerStatusesgroups by target (not rawrepostring) so an org runner and a same-prefix repo runner don't collideGUI (
Sources/Views/AddRunnerView.swift,MenuBarView.swift)listOrgs())building.2iconCLI (
Sources/Services/CLIHandler.swift)mac-runner add <org> --orgregisters an org-level runnerlistoutput labels org targets asacme (org); column renamedREPO→TARGETBackward compatibility
scopedecodes with a.repofallback (decodeIfPresent ?? .repo) — pre-existing config files load unchangedtestRunnerDecodingDefaultsScopeToRepoForLegacyConfigs)Test plan
RunnerModelTestscoverage for scope encoding/decoding, target derivation, and legacy fallbackconfig.shuseshttps://github.com/{org}and the runner appears athttps://github.com/organizations/{org}/settings/actions/runnersmac-runner add my-org --orgfrom the CLImac-runner listshowsacme (org)for org runners🤖 Generated with Claude Code