Skip to content
Latchkey

Semaphore vs GitHub Actions: A Platform Swap, Not a Runner Swap

Semaphore is a full CI platform, not a drop-in runner. Its x64 rate is higher than GitHub-hosted list; its arm64 rate is 40% lower. Neither is why you would move.

Semaphore brings its own pipeline definition, orchestrator, and UI. Adopting it means rewriting workflows, migrating secrets, and repointing required status checks, which puts it in a different category from the runs-on swap that a managed runner represents.

Its published rates are also not a straightforward win: Ubuntu x64 at 2 vCPU is $0.0075/min against GitHub-hosted $0.006, so on x64 it is more expensive per minute. Ubuntu ARM at $0.003/min is 40% cheaper than GitHub-hosted arm64.

Standard GitHub-hosted runners are free and unlimited on public repositories, and public repos get 4 vCPU and 16 GB rather than the 2 vCPU and 8 GB private repositories receive. No paid runner beats free, so everything below assumes a private repository past its included minutes.

Published rates and limits

GitHub ActionsSemaphore
Ubuntu x64, 2 vCPU$0.006/min$0.0075/min
Ubuntu x64, 4 vCPU$0.012/min$0.015/min
Ubuntu ARM, 2 vCPU$0.005/min$0.003/min
Ubuntu ARM, 8 vCPU$0.014/min$0.012/min
macOS$0.062/min (3-4 core)$0.09/min (4 vCPU)
Self-hostedFree, you run the agent$0.0025/min, any machine
Free tier2,000-50,000 min by plan$15 credits/month
Cache10 GB per repository9.6 GB per project
ConcurrencyBy plan20 concurrent jobs
Adoption costn/aRewrite pipelines and migrate checks

The self-hosted rate is the interesting number

Semaphore charges $0.0025/min for a self-hosted agent on any machine you supply. That is a control-plane fee comparable to WarpBuild BYOC, and for a team that already runs its own infrastructure it undercuts every fully managed rate here while keeping a hosted orchestrator.

What a platform migration actually costs

  • Pipeline syntax is the visible part and the smallest part of the work.
  • Secrets, OIDC trust relationships, and deploy credentials must be recreated and re-approved, frequently by a different team.
  • Required status checks reference check names; renaming them mid-migration blocks merges until branch protection is updated.
  • Run both platforms in parallel on the same commits until the new one has been green for a full sprint. Cutting over after one green run is how migrations get reverted.

How to evaluate a managed runner honestly

Runner vendors compete on a headline per-minute rate, and the rate is rarely what decides the bill. Measure the whole job, on your own pipeline, before committing.

  • Compare at equal machine shape. A cheaper per-minute rate on fewer vCPUs or less RAM is not cheaper per unit of work.
  • Check billing granularity. Per-minute rounding costs real money on a wide matrix of short jobs; per-second does not.
  • Include queue and boot time. A runner that is cheaper per minute but slower to start can cost more per merge.
  • Count your re-runs. If a meaningful share of your runs are retries of a failed job, you are paying for the same work twice at whatever rate you negotiated, and no rate card prices that.
  • Verify the free tier is recurring. A one-time credit is not a free tier.

The verdict

Staying on GitHub Actions and wanting cheaper or faster compute: this is the wrong page. A managed runner is a one-line change; Semaphore is a platform migration.

Genuinely evaluating a platform move: judge it on orchestration, UI, and support, because the per-minute comparison is a wash at best and unfavourable on x64.

ARM-heavy or self-hosted-capable: Semaphore ARM at $0.003/min and self-hosted at $0.0025/min are competitive numbers, and the strongest financial case for it.

Frequently asked questions

Semaphore vs GitHub Actions: A Platform Swap, Not a Runner Swap?
Semaphore brings its own pipeline definition, orchestrator, and UI. Adopting it means rewriting workflows, migrating secrets, and repointing required status checks, which puts it in a different category from the runs-on swap that a managed runner represents.
The self-hosted rate is the interesting number?
Semaphore charges $0.0025/min for a self-hosted agent on any machine you supply. That is a control-plane fee comparable to WarpBuild BYOC, and for a team that already runs its own infrastructure it undercuts every fully managed rate here while keeping a hosted orchestrator.
Which should I choose?
Staying on GitHub Actions and wanting cheaper or faster compute: this is the wrong page. A managed runner is a one-line change; Semaphore is a platform migration.

Related guides

References

Latchkey runs the same jobs at $0.0025/min against $0.0075/min (x64), and repairs transient failures. Start free → 30-day trial · No credit card