CI Migration Candidates — Financial and Licensing Research
Status: research-only. This document does NOT constitute legal or tax advice. Before signing any vendor contract or making entity-level financial commitments, consult a technology contracts attorney and/or CPA licensed in Pennsylvania. Last updated: 2026-05-13 UTC. Sources as of that date — verify freshness before acting.
Companion to: docs/architecture/ci-migration-candidates-2026-05-13.md (architect's filtering)
Responds to architect open questions: Sections 7.1, 7.2, 7.3
Related issues: #726, #728, #1595
Decision gate: Operator review of both docs together. No migration before 2026-05-23 launch.
TL;DR (3 sentences)
Cirrus CI is a hard disqualification: it shuts down June 1, 2026 after OpenAI's acquisition of Cirrus Labs, making it unavailable for any workload starting that date. Ubicloud is the cost-cheapest path at 5,000 min/mo (~$5/mo vs ~$20/mo on GHA), but carries meaningful startup-longevity and uptime-reliability risk that the operator must weigh explicitly. Buildkite is the financially stable alternative at $30/mo for a solo operator once the 2,000-minute hosted-minutes included in the Pro plan are factored in, with a 12-year track record, SOC 2 Type II certification, and 99.95% platform SLA.
DEAL-BREAKER FINDING — SURFACE FIRST
Cirrus CI is shutting down June 1, 2026. Cirrus Labs announced on April 7, 2026 that the team is joining OpenAI. Cirrus CI will stop running jobs on June 1, 2026. Cirrus Runners is no longer accepting new customers. This is a hard disqualification regardless of any other merit. Do not adopt this candidate.
Sources:
- https://cirruslabs.org/ — official announcement
- https://agent-wars.com/news/2026-04-11-cirrus-labs-to-join-openai-cirrus-ci-shutting-down-june-1-2026
1. Executive Summary (3–5 sentences)
Of the four shortlisted candidates, one (Cirrus CI) is disqualified by shutdown, leaving three viable paths. Ubicloud offers the lowest migration friction (zero YAML changes) and the lowest per-minute cost (87.5% cheaper than GHA-hosted at current rates), but it lacks a published SLA, has no SOC 2 certification, has a termination-at-will clause with no data-export guarantee, and its status history shows 49+ GitHub Actions runner incidents since September 2024. Woodpecker CI eliminates ongoing SaaS costs entirely at the price of a full YAML rewrite (~2–3 weeks) and self-hosting ops burden on a VPS. Buildkite is the credible middle ground: financially stable ($17.9M revenue, profitable, $47.2M total raised), SOC 2 Type II, 99.95% platform SLA, a free tier that technically covers Raxx's solo-operator shape, and a hybrid model that keeps compute on operator-controlled infrastructure once the free hosted minutes are exhausted. The operator must answer one question before a final call: is the priority (a) zero migration effort now with lower cost and higher vendor risk (Ubicloud), or (b) a 1–2 week migration investment post-launch to eliminate runner vendor risk and gain a stable, certified platform (Buildkite)?
2. Current GHA Baseline (for comparison)
| Item | Value | Source |
|---|---|---|
| Plan | GitHub Team, $4/user/month | https://docs.github.com/billing/managing-billing-for-github-actions/about-billing-for-github-actions |
| Included Linux minutes/month | 3,000 (private repos) | GitHub Docs (same source) |
| Overage rate (Linux, 2-core) | $0.008/min compute + $0.002/min platform fee = $0.010/min total (effective March 2026) | https://resources.github.com/actions/2026-pricing-changes-for-github-actions/ |
| Self-hosted runner platform fee | $0.002/min (added March 1, 2026) | Same source |
| Storage included | 2 GB | GitHub Docs |
Note on the March 2026 platform fee: GitHub added a $0.002/min platform fee for all GitHub-hosted runners effective March 1, 2026. This applies on top of the existing compute rate. The net effect is that Linux overage now costs $0.010/min, not $0.008/min. Self-hosted runners now also incur the $0.002/min fee, which previously did not apply. This is a 25% effective price increase on overage minutes and changes the break-even calculus for any alternative runner service.
3. Per-Candidate Pricing
3.1 Ubicloud Managed Runners
Pricing model: Per-minute, billed by the minute. No monthly minimum. $1/month credit included (equivalent to 1,250 minutes of standard-2 runner time).
2026 price adjustment (effective May 1, 2026 for new; June 1, 2026 for existing): Infrastructure cost increases caused Ubicloud to raise standard runner prices 26%. Standard x64 runners are being discontinued for new customers; Premium runners are the going-forward product at unchanged prices.
| Runner | vCPU | RAM | Price/min (as of May 2026) |
|---|---|---|---|
| Standard-2 (legacy/existing) | 2 | 8 GB | $0.0010 |
| Premium-2 | 2 | 8 GB | $0.0016 |
| Premium-4 | 4 | 16 GB | $0.0032 |
| Premium-8 | 8 | 32 GB | $0.0064 |
| Premium-16 | 16 | 64 GB | $0.0128 |
| ARM-2 | 2 | 6 GB | $0.0010 |
Comparison to GHA: At Premium-2 ($0.0016/min) vs GHA Linux overage ($0.010/min), Ubicloud is 84% cheaper per overage minute. The pricing page claims "87.5% savings" comparing older Standard runner ($0.0008/min) against GHA's pre-2026 rate ($0.008/min). With the 2026 price adjustments applied to both sides, the correct comparison is $0.0016/min (Ubicloud Premium-2) vs $0.010/min (GHA overage) = 84% cheaper.
The $1/month included credit covers 625 minutes on Premium-2.
Free tier: $1/month credit only. No free-minutes tier beyond that. Storage/log retention: Not separately priced; logs reside on operator-controlled GitHub Actions infrastructure (Ubicloud is only the runner, not the log host). Annual vs monthly: No annual commitment; pay-as-you-go. Volume discounts: Not publicly documented.
Sources:
- https://www.ubicloud.com/docs/about/pricing
- https://www.ubicloud.com/blog/ubicloud-price-adjustment-2026
3.2 Woodpecker CI (self-hosted)
Pricing model: $0 software cost. Apache 2.0 license. Infrastructure cost only.
| Infrastructure option | Estimated monthly cost | Notes |
|---|---|---|
| Hetzner CX21 (2 vCPU, 4GB) | ~$4–$6/mo | Smallest viable single-node |
| Hetzner CPX31 (4 vCPU, 8GB) | ~$9–$12/mo | Recommended for concurrent pipelines |
| AWS t3.small (2 vCPU, 2GB) | ~$15/mo | On-demand; reserved is ~$9/mo |
| Existing EC2 or VPS (shared) | $0 marginal | Only if spare capacity exists |
Woodpecker requires: server binary + at least one agent + a database (SQLite for dev, Postgres recommended for production). A single VPS hosting both server and agent is sufficient for Raxx's 34-workflow, 30-runs/day volume based on community reports.
Log retention: Operator-controlled; stored in the Postgres database or SQLite. Artifact storage: Not built-in; must use external storage (S3, etc.) or mount a volume. Annual vs monthly: N/A; VPS billing terms vary by provider.
Sources:
- https://woodpecker-ci.org/
- https://github.com/woodpecker-ci/woodpecker
- https://ossalt.com/guides/self-host-woodpecker-ci-2026
3.3 Buildkite
Pricing model: Per-active-user per month for the platform. Compute is separate (self-hosted agents are free; hosted agents are pay-as-you-go).
| Plan | Price | Included hosted minutes | Self-hosted agents |
|---|---|---|---|
| Free (Personal) | $0 | 500 min/mo (Linux Small only) | Unlimited |
| Pro | $30/active user/month | 2,000 min/mo (Linux) | 10 included, $2.50/agent/mo after |
| Enterprise | Custom (30-user minimum) | Custom | Custom |
Hosted agent pay-as-you-go rates (after included minutes):
| Size | Price/min |
|---|---|
| Linux Small | $0.013 |
| Linux Medium | $0.026 |
| Linux Large | $0.052 |
| Mac M4 Medium | $0.18 |
Free tier constraints for Raxx: - 1 active user (fits solo operator) - Max 3 concurrent jobs (hosted + self-hosted combined) — this is a potential bottleneck at 30+ runs/day if parallelism is needed - 500 hosted Linux minutes/month — covers minimal workload only - 90-day build retention (vs 1 year on Pro) - No self-hosted agents are metered on free tier (unlimited)
If Raxx runs all pipelines on a self-hosted agent (own EC2/VPS), the Free plan's 500 min/month hosted limit is irrelevant — you only pay the $0 platform fee and bear your own compute cost. The 3-concurrent-job cap on free would still apply across self-hosted + hosted combined.
Artifact storage: Up to 5 GB per artifact, retained 6 months (free with Pipelines on any plan). Package registry storage: 1 GB included on Free, 20 GB on Pro, $1.25/GB overage. Annual vs monthly: Monthly billing publicly listed; annual may be available via sales.
Sources:
- https://buildkite.com/pricing/
- https://buildkite.com/docs/platform/limits
3.4 Cirrus CI — DISQUALIFIED
Status: Shutting down June 1, 2026. See deal-breaker finding above. Pricing information omitted — adoption is not possible.
Source: https://cirruslabs.org/
4. Per-Candidate Licensing Matrix
| Candidate | SPDX License | Copyleft? | Commercial use restricted? | ToS securities/trading restriction? | DPA available? | Data residency |
|---|---|---|---|---|---|---|
| Ubicloud | Apache-2.0 (OSS core) + proprietary SaaS ToS | No | No explicit restriction | None found | On request (contact info@ubicloud.com) | Operator-selectable region; Ubicloud reserves unilateral transfer right unless agreed in writing |
| Woodpecker CI | Apache-2.0 | No | No | N/A (self-hosted; no SaaS ToS) | N/A (no data leaves operator infrastructure) | Fully operator-controlled |
| Buildkite | MIT (agent) + proprietary SaaS (platform) | No | No | None found in AUP or ToS | Contact privacy@buildkite.com; GDPR processing commitments in privacy policy | AWS US East (primary); Hosted Agents: USA or EU |
| Cirrus CI | DISQUALIFIED | — | — | — | — | — |
Licensing notes
Ubicloud ToS — key callouts: - Termination: Ubicloud may terminate access "at any time, with or without notice, effective immediately." Upon termination, data "may be immediately forfeited and destroyed." - No explicit data export right in the published ToS. - Cryptocurrency mining explicitly prohibited. - HIPAA data prohibited without separate agreement. - No prohibition on securities-related or trading-related workloads found. - DPA: Available on request (not self-serve); contact info@ubicloud.com. - Governing law: California (Ubicloud Inc.) for non-EEA customers.
Source: https://www.ubicloud.com/docs/about/terms-of-service
Buildkite legal callouts: - Acceptable Use Policy contains no industry-specific prohibitions (no restriction on securities, trading, or financial applications found). - SOC 2 Type II: Confirmed active. Annual independent audits. - Pipeline log transit: Orchestration metadata transits Buildkite SaaS controller. Source code and build artifacts remain on operator-owned agent infrastructure (never sent to Buildkite) when using self-hosted agents. - Sub-processors include: AWS (infrastructure), Datadog (observability/logging), Segment (analytics), PostHog (product analytics), Slack (notifications). - GDPR: Buildkite has appointed a Data Protection Officer. GDPR processing commitments are in the privacy policy. DPA details require contact at privacy@buildkite.com. - SLA: 99.95% platform uptime; 99.5% hosted agents. Service credits for premium customers.
Sources:
- https://buildkite.com/about/legal/acceptable-use-policy/
- https://buildkite.com/about/legal/privacy-policy/
- https://buildkite.com/about/security/
- https://buildkite.com/about/legal/subprocessors/
- https://buildkite.com/about/legal/service-level-agreement/
Woodpecker CI — full data sovereignty: - Apache 2.0: permissive, no copyleft, commercial use unrestricted. - All pipeline logs, secrets, and build metadata remain on operator infrastructure. - GitHub OAuth is the only external data flow (same OAuth surface as current GHA). - No vendor ToS applies to build data. - GDPR posture: operator is the data controller for all pipeline data; no third-party processor involvement for build data beyond the operator's own chosen VPS provider.
Source: https://github.com/woodpecker-ci/woodpecker (LICENSE file, Apache-2.0)
5. Vendor Risk Profile
5.1 Ubicloud
| Risk dimension | Finding | Risk level |
|---|---|---|
| Funding | $16.5M seed round closed January 2024 (Y Combinator W24 + 500 Emerging Europe + angels) | Medium-High |
| Revenue stage | Pre-revenue / early growth (estimated valuation ~$4.4M per Crunchbase 2026 — note: this figure appears anomalously low for a post-Series-A stage; treat with skepticism) | Unknown |
| Acquisition risk | No acquisition activity found; however, at seed stage, acqui-hire or wind-down is a plausible scenario | Medium |
| SLA | No published uptime SLA found in ToS or docs | High — no recourse |
| SOC 2 | Not found in any publicly available documentation | High for security-sensitive workloads |
| Outage history | StatusGator tracking since September 2024: 49+ GitHub Actions runner incidents; multi-hour warning windows in October–November 2025; capacity constraint for large runners in May 2026 | Medium-High |
| Data export | No explicit data export right in ToS; termination-at-will with immediate destruction language | High |
| Contract terms | No annual commitment; month-to-month; no minimum | Low (easy exit) |
| Self-hosted fallback | Ubicloud core is Apache 2.0 OSS; operator could theoretically self-host, but "managed runner" service is separate from the OSS platform | Medium mitigation |
Sources:
- https://siliconangle.com/2024/03/05/ubicloud-reels-16m-open-source-cloud-platform/
- https://www.crunchbase.com/organization/ubicloud/company_financials
- https://statusgator.com/services/ubicloud/github-actions
- https://www.ubicloud.com/docs/about/terms-of-service
5.2 Woodpecker CI
| Risk dimension | Finding | Risk level |
|---|---|---|
| Project health | ~4,500 GitHub stars; weekly release cadence as of 2026; active issue tracker | Low |
| Acquisition risk | No corporate entity to acquire; community-maintained Apache 2.0 project | Low |
| Abandonment risk | Forked from Drone CI after Harness acquisition (2022); has demonstrated resilience through one prior abandonment event | Low-Medium |
| Vendor concentration | Zero; operator owns all infrastructure | None |
| SLA | N/A (self-hosted) | N/A |
| SOC 2 | N/A (operator is responsible for their own infrastructure security) | N/A |
| Outage history | N/A (operator-controlled) | Operator-dependent |
| Data export | Full data ownership; no export needed | None |
| Ops burden | Server + agent binary + Postgres + VPS maintenance; small but non-zero for a solo operator | Medium |
Source: https://github.com/woodpecker-ci/woodpecker
5.3 Buildkite
| Risk dimension | Finding | Risk level |
|---|---|---|
| Funding | $47.2M total raised; last round Series B ($21M, November 2022, OneVentures + AirTree) | Low |
| Revenue | ~$17.9M ARR (2024, per Latka); 51% YoY growth | Low |
| Profitability | Profitable (confirmed, bootstrapped prior to Series A) | Low |
| Headcount | ~134 employees (2024) | Low |
| Acquisition risk | Independent; no acquisition signals; CEO transition (Kevin Gounden replaced Keith Pitt, August 2025) | Low-Medium (watch leadership change) |
| SLA | 99.95% platform; 99.5% hosted agents; published credits schedule | Low |
| SOC 2 | SOC 2 Type II, annual audits | Low |
| Outage history | No high-profile incidents found in public record | Low |
| Data export | ToS termination terms not extracted in full; recommend reviewing before signing | Verify |
| Contract terms | Monthly billing; no minimum publicly stated | Low |
Sources:
- https://buildkite.com/about/press/buildkite-raises-usd-21m-series-b/
- https://getlatka.com/companies/buildkite#funding
- https://buildkite.com/about/legal/service-level-agreement/
- https://buildkite.com/about/security/
6. Cost Projection Matrix
Assumptions: - GHA Team plan: 3,000 free minutes/month (included). Overage: $0.010/min (post-March 2026, includes $0.002/min platform fee). - Workload mix for Raxx: primarily Linux 2-vCPU (ubuntu-latest equivalent). The Queue service (C++ CMake) may benefit from 4-vCPU; not separately broken out here. - Ubicloud: Premium-2 runner at $0.0016/min (new-customer rate as of May 2026; standard runners discontinued for new customers). - Ubicloud $1/month credit included = 625 minutes of Premium-2 free. - Woodpecker: VPS cost assumed $9/mo (Hetzner CPX31 equivalent for concurrent builds). - Buildkite Free plan: self-hosted agent (no hosted minutes consumed), $0 platform cost. VPS for the agent: same $9/mo assumption as Woodpecker. - Buildkite Pro plan: $30/month + self-hosted agent VPS ($9/mo) = $39/mo; no overage if all builds run on self-hosted agent.
6.1 Lean: 2,000 min/mo
All 2,000 minutes fall within GHA's 3,000-minute free tier — GHA costs $4/mo (plan fee only).
| Candidate | Monthly cost | Notes |
|---|---|---|
| GHA (current) | $4.00 | 2,000 min < 3,000 free; plan fee only |
| Ubicloud Premium-2 | $3.20 | 2,000 min × $0.0016 = $3.20 - $1.00 credit = $2.20; but plan/base fee not applicable |
| Woodpecker CI | ~$9.00 | VPS fixed; software is $0 |
| Buildkite Free + self-hosted | ~$9.00 | $0 platform + VPS |
| Buildkite Pro + self-hosted | ~$39.00 | $30 platform + $9 VPS; overkill at this volume |
At lean volume (2,000 min/mo), GHA is actually the cheapest path. Migration adds cost.
6.2 Threshold: 5,000 min/mo
This is the operator's stated trigger value from project_ci_billing. 5,000 - 3,000 free = 2,000 overage minutes.
| Candidate | Monthly cost | Calculation | vs GHA |
|---|---|---|---|
| GHA (current) | $24.00 | $4 plan + (2,000 × $0.010) | baseline |
| Ubicloud Premium-2 | $7.00 | (5,000 × $0.0016) - $1.00 credit = $7.00 | -71% |
| Woodpecker CI | ~$9.00 | VPS fixed; no per-minute cost | -63% |
| Buildkite Free + self-hosted | ~$9.00 | $0 platform + VPS | -63% |
| Buildkite Pro + self-hosted | ~$39.00 | $30 + $9 VPS | +63% (higher, but buys SOC 2 / SLA / support) |
Breakeven for Ubicloud vs GHA: The crossover point where Ubicloud Premium-2 becomes cheaper than GHA (factoring in the $4/month plan fee and 3,000 free minutes) is:
GHA cost = $4 + max(0, (N - 3000) × $0.010) Ubicloud cost = (N × $0.0016) - $1.00
Setting equal: $4 + (N - 3000) × $0.010 = N × $0.0016 - 1 $5 + 0.010N - 30 = 0.0016N -25 + 0.010N = 0.0016N (approximately) 0.0084N = 25 N ≈ 2,976 minutes
Ubicloud Premium-2 becomes cheaper than GHA at approximately 2,976 minutes/month — essentially at the point where GHA overage begins. Below that, GHA free tier wins on cost because $1 credit is less than the $4 GHA plan fee offset.
Breakeven for Woodpecker / Buildkite Free + self-hosted ($9 fixed) vs GHA: $4 + (N - 3000) × $0.010 = $9 (N - 3000) × $0.010 = $5 N - 3000 = 500 N ≈ 3,500 minutes
Woodpecker and Buildkite Free become cheaper than GHA at approximately 3,500 minutes/month.
6.3 Stretch: 10,000 min/mo
10,000 - 3,000 free = 7,000 overage minutes.
| Candidate | Monthly cost | vs GHA |
|---|---|---|
| GHA (current) | $74.00 | $4 + (7,000 × $0.010) |
| Ubicloud Premium-2 | $15.00 | (10,000 × $0.0016) - $1.00 credit |
| Woodpecker CI | ~$9.00 | Fixed VPS |
| Buildkite Free + self-hosted | ~$9.00 | Fixed VPS |
| Buildkite Pro + self-hosted | ~$39.00 | Fixed |
At stretch volume, both Woodpecker and Buildkite Free with self-hosted agent provide the maximum savings (near-fixed-cost model). Ubicloud still saves significantly but scales linearly with minutes consumed.
7. Architect's Three Open Questions — Answered
7.1 Ubicloud per-minute pricing for standard-2 and standard-8 runners vs Raxx's actual monthly consumption — does the 60–80% savings claim hold?
Answer: The savings claim holds directionally but requires one correction. As of May 2026:
- Standard-2 runners are being discontinued for new customers. The going-forward product is Premium-2 at $0.0016/min.
- GHA Linux overage is now $0.010/min (post-March 2026, includes $0.002/min platform fee).
- The savings on Premium-2 vs GHA overage: ($0.010 - $0.0016) / $0.010 = 84% per overage minute.
- At 5,000 min/mo (threshold): Ubicloud cost ~$7/mo vs GHA ~$24/mo = 71% reduction (net, including GHA's $4 plan fee and 3,000 free minutes, and Ubicloud's $1 credit).
- For standard-8 equivalent: Premium-8 is $0.0064/min vs GHA 8-core at $0.032/min (4× multiplier on GHA's Linux 2-core rate per GitHub docs) = 80% savings on heavier runners.
The architect's 60–80% savings claim is validated. The upper bound (80%+) applies if most workload is on larger runners. The lower bound (~71%) applies at the 5,000 min/mo threshold using 2-vCPU runners. Caveat: the 26% price increase effective June 1, 2026 for existing customers narrows this gap slightly from the figures Ubicloud's marketing page still shows.
Sources:
- https://www.ubicloud.com/docs/about/pricing
- https://www.ubicloud.com/blog/ubicloud-price-adjustment-2026
- https://resources.github.com/actions/2026-pricing-changes-for-github-actions/
7.2 Ubicloud vendor risk — SLA, data residency, SOC 2, contract termination terms
Answer:
| Item | Finding | Risk assessment |
|---|---|---|
| SLA | No published uptime SLA found in ToS or documentation | High — no contractual uptime guarantee |
| Data residency | Operator can select geographic region at provisioning; however, Ubicloud ToS reserves the right to transfer data to other regions "at its sole discretion" unless agreed in writing | Medium — needs written agreement to lock residency |
| SOC 2 | Not found in any public documentation (website, docs, press releases) | High for regulated workloads; unknown for general CI |
| Termination terms | ToS: Ubicloud can terminate "at any time, with or without notice, effective immediately." Data "may be immediately forfeited and destroyed." No data export right published. | High — no exit runway guaranteed |
| Contract | Month-to-month, pay-as-you-go; no minimum commitment | Low (easy exit on operator's side) |
| Fallback (OSS) | Ubicloud core platform is Apache 2.0 open source; self-hosting the runner infrastructure is theoretically possible but is a separate, non-trivial implementation from the managed service | Medium mitigation |
| DPA | Available on request; contact info@ubicloud.com; not self-serve | Medium — exists but requires legal engagement |
BLR assessment: The absence of a published SLA and SOC 2 certification are the primary structural concerns for a startup using Ubicloud in a CI path that touches live-mode trading execution code. Raxx's CI runs code that gates live-mode features (RBAC gate, WAF rules, shadow GDPR delete). A runner outage that silently fails a required status check without alerting is a real risk. The 49+ GitHub Actions runner incidents since September 2024 (StatusGator data) indicate this is not a theoretical concern.
Specific question for operator: Does Ubicloud's lack of published SLA and SOC 2 certification cross your personal risk threshold for a CI platform that runs security-gating workflows? If yes, Buildkite is the alternative. If no (and you accept the startup risk for cost), Ubicloud is the operationally easiest path.
Sources:
- https://www.ubicloud.com/docs/about/terms-of-service
- https://statusgator.com/services/ubicloud/github-actions
7.3 Buildkite free tier restrictions and GDPR DPA availability
Answer:
Free tier restrictions (relevant to Raxx's 34-workflow shape):
| Limit | Free tier value | Impact on Raxx |
|---|---|---|
| Active users | 1 | No impact (solo operator) |
| Concurrent jobs (hosted + self-hosted combined) | 3 | Potential bottleneck: Raxx runs 30+ jobs/day; if multiple workflows trigger simultaneously (e.g., a push triggers ci.yml + security scan + notify), the 3-job concurrent cap could queue builds. With self-hosted agents, concurrency is controlled by the number of agents started, not Buildkite's cap on self-hosted. Clarification needed: does the free-tier cap of 3 apply only to hosted agent concurrency, or to self-hosted too? |
| Hosted Linux minutes | 500/mo | Insufficient for 5,000 min/mo workload; would need self-hosted agent for all builds |
| Build retention | 90 days | Acceptable for most CI purposes; Pro gives 1 year |
| Pipeline count | Unlimited | No impact |
| Self-hosted agents | Unlimited | Covers all 34 workflows on self-hosted |
Practical free-tier path for Raxx: Use unlimited self-hosted agents (own VPS/EC2), consume 0 hosted minutes, stay within the 1-user limit. The 3-concurrent-job cap is the only active constraint. If Raxx's workflows ever need >3 simultaneous jobs (e.g., matrix builds across Python 3.9/3.11/3.12), this cap would queue builds rather than fail them. For the described workload (mostly sequential, small jobs), this is workable but tight.
Buildkite Pro ($30/mo) removes the concurrency cap, raises build retention to 1 year, and includes 2,000 hosted Linux minutes — appropriate if any workflows need hosted runners (e.g., if the VPS has capacity constraints during heavy C++ builds).
GDPR / DPA availability:
- Buildkite has a Data Protection Officer (contact: privacy@buildkite.com).
- Privacy policy commits to GDPR compliance but does not specify transfer mechanisms (SCCs, adequacy decisions) in the public-facing document.
- Pipeline log transit: When using self-hosted agents, source code and build artifacts remain on operator infrastructure. Orchestration metadata (job status, pipeline configuration, timing) transits Buildkite's SaaS controller (hosted on AWS US East, with Hosted Agents optionally in EU). If the SaaS controller is processing orchestration metadata that could include personal data (e.g., a developer's name in a commit message in a job name), GDPR applies to that transit.
- Sub-processors include Datadog (observability) and Segment (analytics) — both US-based. Standard Contractual Clauses or similar would be needed for EEA-to-US transfers of any personal data in pipeline metadata.
- DPA: Not self-serve; must be requested from Buildkite. Contact privacy@buildkite.com. This is standard for a company of Buildkite's size.
Raxx-specific note: Raxx's CI pipelines do not intentionally process customer personal data. The GDPR surface here is narrow (developer commit metadata in job names), not customer PII. A DPA from Buildkite is nonetheless good practice given Raxx's securities context and pre-launch compliance posture.
Sources:
- https://buildkite.com/pricing/
- https://buildkite.com/docs/platform/limits
- https://buildkite.com/about/legal/privacy-policy/
- https://buildkite.com/about/legal/subprocessors/
8. Legal and Compliance Notes
8.1 Securities-tooling ToS screening
All three viable candidates were screened for prohibitions on securities-related applications, algorithmic trading platforms, or financial services workloads.
| Candidate | Prohibition found? | Source reviewed |
|---|---|---|
| Ubicloud | None found | ToS at https://www.ubicloud.com/docs/about/terms-of-service |
| Woodpecker CI | N/A (self-hosted; no SaaS ToS) | Apache 2.0 license |
| Buildkite | None found | AUP at https://buildkite.com/about/legal/acceptable-use-policy/ |
Note on Sentry (not a CI candidate, but in the ecosystem): The previous vendor screening for APM noted that Honeybadger's ToS prohibits securities-execution software. No similar clause was found in any of the CI candidates researched here. If Buildkite is adopted and any pipeline-level observability is routed through Buildkite's own analytics pipeline (Datadog, Segment sub-processors), those vendors' ToS should also be reviewed. Research of those specific vendors is out of scope for this document.
8.2 Data residency flags
| Candidate | Where build data lives | Control level |
|---|---|---|
| Ubicloud | Runner ephemeral VMs in operator-selected region (Germany, Finland, Virginia, or AWS-powered); logs remain in GHA (operator-controlled) | Medium — ToS allows Ubicloud to unilateral transfer; get written agreement |
| Woodpecker CI | Entirely on operator-controlled VPS | Full — no third-party cloud involvement for build data |
| Buildkite | Orchestration metadata: AWS US East (Buildkite SaaS). Actual build artifacts + source: operator VPS/EC2 (self-hosted agent). Hosted agents: USA or EU. | Mixed — metadata in US cloud; artifacts operator-controlled |
8.3 DPA status
| Candidate | DPA available? | How to obtain |
|---|---|---|
| Ubicloud | Yes, on request | info@ubicloud.com |
| Woodpecker CI | N/A | N/A (operator is the controller) |
| Buildkite | Yes, on request | privacy@buildkite.com |
8.4 March 2026 GHA self-hosted runner platform fee
The new $0.002/min platform fee on self-hosted GHA runners (effective March 1, 2026) is a cost consideration if Raxx were to add self-hosted GHA runners to the current setup. This fee does NOT apply to Ubicloud (Ubicloud runners are billed under Ubicloud's own pricing, not GitHub's self-hosted runner fee). It DOES apply if Raxx runs its own EC2 as a GHA self-hosted runner going forward. Woodpecker and Buildkite both bypass this fee entirely as they are not GHA runners.
Source: https://github.blog/changelog/2025-12-16-coming-soon-simpler-pricing-and-a-better-experience-for-github-actions/
9. Hidden Costs and Gotchas
Items that the architect's design-lens evaluation may not surface:
9.1 Ubicloud
- Standard runner discontinuation for new customers (May 2026): The cheaper $0.0010/min Standard runner is being discontinued for new customers. New accounts must use Premium runners at $0.0016/min. Benchmark claims on Ubicloud's marketing page comparing to GHA use the old Standard rate; the real new-customer comparison is Premium-2 vs GHA, which is still highly favorable (84% savings) but not the "10x cheaper" figure in older blog posts.
- No SLA = no financial recourse for CI outages. If Ubicloud's runner fleet has an incident during a pre-launch deployment window, there is no SLA credit mechanism.
- 26% price increase in June 2026 for existing customers (currently in the transition window). Cost projections using the old Standard rate (~$0.0008/min) are stale.
- Capacity constraints on large runners (May 2026): Ubicloud's status page shows active capacity constraints for 16-vCPU and 30-vCPU runners as of May 2026. If the Queue C++ CMake build is moved to a large runner, provisioning delays are possible.
9.2 Woodpecker CI
- Full YAML rewrite is not just translation work. The architect noted L migration effort.
Specifically: GHA composite actions (load-vault-secrets, notify-deploy-status) have no
Woodpecker equivalent. These become shell scripts called in pipeline init steps — workable
but each needs testing. Console Ops Dispatch calls
workflow_dispatchvia GH API; this becomes a Woodpecker API call, requiring a code change in the Console surface. - Postgres maintenance burden. SQLite is not recommended for production Woodpecker deployments with concurrent pipelines. A managed Postgres on Heroku or RDS adds ~$7–15/mo.
- No native GitHub Environments / deployment protection rules. The GHA entitlement gap (missing environment protection rules) is not resolved by Woodpecker — a different feature gap exists instead.
- GitHub OAuth app registration required. Woodpecker needs a GitHub OAuth app configured for repo access and status check posting. This is straightforward but adds one more credential to Velvet/SSM rotation scope.
9.3 Buildkite
- Concurrent-job cap on free plan (3 total, hosted + self-hosted). This is the single most likely friction point. If Raxx's cron workflows overlap with a PR push, the 3-job cap could silently queue builds. The Pro plan ($30/mo) removes this cap.
- Hosted-agent per-minute rate ($0.013/min for Linux Small) is higher than GHA overage rate ($0.010/min). If Raxx uses Buildkite's hosted agents (not self-hosted), the CI cost is actually higher than current GHA overage rates. Buildkite hosted agents are only cost-justified for specific use cases (e.g., macOS builds). For Linux, self-hosted is the cost-efficient path.
- Agent binary upgrade management. The self-hosted Buildkite agent requires periodic binary upgrades. Minor ops burden but non-zero for a solo operator.
- CEO transition (August 2025): Keith Pitt replaced by Kevin Gounden. Not a flag in itself, but worth noting given the Cirrus Labs situation (team departures preceding service wind-down). Buildkite's financial profile is strong; this is a monitor-not-act item.
10. Open Questions for Operator
These are genuine unknowns that require operator input before a decision:
-
Annual contract vs month-to-month preference (applies to Buildkite Pro if chosen). Buildkite Pro is listed at $30/active-user/month. An annual contract may be available at a discount (not publicly listed). If Raxx is committing to Buildkite long-term, negotiating annual pricing before signing is worth one email to their sales team.
-
Actual minutes/month usage figure. The 5,000 min/mo threshold is the operator's own stated trigger from
project_ci_billing. The actual current burn is not confirmed in any source document. The GitHub Actions billing dashboard (Settings > Billing > Actions) shows exact minutes consumed. Pulling the current month's figure before choosing a candidate would sharpen the cost projection from an estimate to an actual number. At <3,000 min/mo, GHA free tier still wins on cost. At >5,000 min/mo, Ubicloud or a self-hosted solution clearly wins. -
Ubicloud SOC 2 / SLA risk threshold. The operator must decide whether Ubicloud's absence of a published SLA and SOC 2 certification is acceptable for a CI system that gates security-relevant workflows (WAF rules, RBAC gate, shadow GDPR delete, live-mode promotions). This is a subjective risk tolerance call, not a research question.
-
Buildkite free-tier concurrency cap. Does Raxx's current workflow trigger pattern ever need more than 3 simultaneous jobs? Reviewing the GitHub Actions run logs for maximum concurrent job counts on a typical push day would determine whether the free tier's 3-job cap is a real constraint or a theoretical one.
11. Decision-Ready Summary
| If the operator wants... | Recommendation | Monthly cost at 5,000 min/mo | Migration effort |
|---|---|---|---|
| Zero YAML changes, lowest cost, accepts startup risk | Ubicloud Premium-2 runners | ~$7/mo | XS (runner label swap only) |
| Maximum data sovereignty, zero SaaS dependency, accepts ops burden | Woodpecker CI (self-hosted) | ~$9/mo (VPS only) | L (full YAML rewrite, 2–3 weeks) |
| SOC 2 / SLA / financial stability, free-to-start, hybrid model | Buildkite Free + self-hosted agent | ~$9/mo (VPS only) | M (full YAML rewrite, 1–2 weeks) |
| SOC 2 / SLA / support + no concurrent-job cap | Buildkite Pro + self-hosted | ~$39/mo | M (1–2 weeks) |
| Staying on GHA, no migration | GHA Team plan (current) | ~$24/mo at 5,000 min/mo | None |
| Cirrus CI | Do not adopt — shutting down June 1, 2026 | N/A | N/A |
Financial single recommendation: If the operator's current monthly burn is confirmed above 3,500 minutes/month (the breakeven where self-hosted becomes cheaper than GHA), Buildkite Free with a self-hosted agent provides the best combination of cost savings, platform stability, SOC 2 certification, and migration reversibility (the MIT-licensed agent means no lock-in). The cost is equivalent to Woodpecker CI (~$9/mo VPS) with significantly less ops burden and a published SLA. Ubicloud is the cheaper and faster path if startup longevity risk is acceptable. The operator holds that call.
Appendix: Depot.dev (Architect-Flagged Additional Candidate)
The architect's doc (Section 9, Risks) flagged Depot.dev as a comparable runner replacement to Ubicloud not present in the awesome-ci list. Brief findings:
- Depot.dev is a GitHub Actions runner replacement (same drop-in model as Ubicloud).
- Pricing: $0.004/min for Linux 2-vCPU (as of May 2026 research) — between GHA ($0.010/min) and Ubicloud Premium-2 ($0.0016/min); 60% cheaper than GHA, ~2.5× more expensive than Ubicloud.
- Free tier: 500 minutes/month.
- Founded 2022; backed by venture (specific round details not confirmed in this research —
unsourced; confirm with
https://depot.dev/pricingand Crunchbase). - This is a research placeholder only. Depot.dev was not part of the architect's formal shortlist and is included here to close the architect's note, not as a full candidate.
Before filing contracts, signing vendor agreements, or committing to any migration plan, consult a technology contracts attorney licensed in Pennsylvania to review vendor ToS termination clauses (Ubicloud in particular) and a CPA for any accounting treatment of SaaS subscription costs vs infrastructure capital expenses.
Sources
https://www.ubicloud.com/docs/about/pricing— Ubicloud runner pricing tablehttps://www.ubicloud.com/blog/ubicloud-price-adjustment-2026— May 2026 price increase announcementhttps://www.ubicloud.com/docs/about/terms-of-service— Ubicloud ToS (termination, data residency, DPA)https://status.ubicloud.com/— Ubicloud status pagehttps://statusgator.com/services/ubicloud/github-actions— Ubicloud GHA incident trackinghttps://siliconangle.com/2024/03/05/ubicloud-reels-16m-open-source-cloud-platform/— Ubicloud fundinghttps://www.crunchbase.com/organization/ubicloud/company_financials— Ubicloud financialshttps://buildkite.com/pricing/— Buildkite plan pricinghttps://buildkite.com/docs/platform/limits— Buildkite free tier limitshttps://buildkite.com/about/legal/service-level-agreement/— Buildkite SLAhttps://buildkite.com/about/security/— Buildkite SOC 2, pen testinghttps://buildkite.com/about/legal/privacy-policy/— Buildkite GDPR / data residencyhttps://buildkite.com/about/legal/subprocessors/— Buildkite sub-processorshttps://buildkite.com/about/legal/acceptable-use-policy/— Buildkite AUPhttps://buildkite.com/about/press/buildkite-raises-usd-21m-series-b/— Buildkite Series Bhttps://getlatka.com/companies/buildkite#funding— Buildkite revenue / fundinghttps://github.com/woodpecker-ci/woodpecker— Woodpecker CI Apache 2.0 sourcehttps://woodpecker-ci.org/— Woodpecker CI official sitehttps://ossalt.com/guides/self-host-woodpecker-ci-2026— Woodpecker self-host guide (2026)https://cirruslabs.org/— Cirrus Labs shutdown / OpenAI acquisition announcementhttps://agent-wars.com/news/2026-04-11-cirrus-labs-to-join-openai-cirrus-ci-shutting-down-june-1-2026— Cirrus CI shutdown detailhttps://docs.github.com/billing/managing-billing-for-github-actions/about-billing-for-github-actions— GHA billing docshttps://resources.github.com/actions/2026-pricing-changes-for-github-actions/— GHA 2026 pricing changeshttps://github.blog/changelog/2025-12-16-coming-soon-simpler-pricing-and-a-better-experience-for-github-actions/— GHA platform fee announcement