Analyzed 20 workflow runs of the ci-orchestrator.yml workflow on PX4/PX4-Autopilot (branch mrpollo/ci_orchestration), spanning Jan 13 - Feb 13, 2026.
Data source: RunsOn show_costs: inline post-job output from each job's logs, GitHub Actions job timestamps, and GitHub-hosted runner pricing.
Note: PX4-Autopilot is a public open-source repository. GitHub provides free GitHub Actions minutes for public repos, so the macOS and Ubuntu GitHub-hosted runner jobs have $0 actual cost to the project. The "GitHub equivalent" costs shown are what these would cost on a private repository for reference. The only real costs are the RunsOn (AWS) self-hosted runner charges.
| # | Run ID | Date | Status | Wall Clock | RunsOn Cost | macOS Duration | Total Actual Cost |
|---|---|---|---|---|---|---|---|
| 1 | 21987781018 | Feb 13 13:01 | success | 65 min | $0.6351 | 16.0 min | $0.64 |
| 2 | 21987600582 | Feb 13 12:54 | cancelled | 7 min | $0.0377 | -- | $0.04 |
| 3 | 21977430779 | Feb 13 06:42 | success | 62 min | $0.5597 | 12.1 min | $0.56 |
| 4 | 21972076719 | Feb 13 02:15 | success | 61 min | $0.5014 | 14.0 min | $0.50 |
| 5 | 21964305474 | Feb 12 21:07 | success | 70 min | $0.5543 | 19.4 min | $0.55 |
| 6 | 21051960290 | Jan 16 01:04 | success | 59 min | $0.4374 | 12.1 min | $0.44 |
| 7 | 21009236117 | Jan 14 20:44 | success | 56 min | $0.4814 | 12.2 min | $0.48 |
| 8 | 21006944056 | Jan 14 19:23 | success | 74 min | $0.5749 | 20.6 min | $0.57 |
| 9 | 21004439949 | Jan 14 17:56 | failure | 80 min | $0.5234 | ~10 min | $0.52 |
| 10 | 21003045804 | Jan 14 17:10 | cancelled | 71 min | $0.4936 | ~10 min | $0.49 |
| 11 | 21000206124 | Jan 14 15:43 | failure | 75 min | $0.5871 | ~10 min | $0.59 |
| 12 | 20976558806 | Jan 13 23:36 | failure | 51 min | $0.5319 | ~10 min | $0.53 |
| 13 | 20975349444 | Jan 13 22:46 | cancelled | 55 min | $0.2454 | -- | $0.25 |
| 14 | 20975186700 | Jan 13 22:39 | failure | <1 min | $0.00 | -- | $0.00 |
| 15 | 20972912202 | Jan 13 21:17 | failure | 60 min | $0.4115 | ~10 min | $0.41 |
| 16 | 20971986915 | Jan 13 20:45 | failure | 22 min | $0.2059 | -- | $0.21 |
| 17 | 20970425451 | Jan 13 19:50 | failure | 25 min | $0.1809 | -- | $0.18 |
| 18 | 20969770056 | Jan 13 19:28 | cancelled | 27 min | $0.1745 | -- | $0.17 |
| 19 | 20969503269 | Jan 13 19:19 | cancelled | 9 min | $0.0464 | -- | $0.05 |
| 20 | 20969106687 | Jan 13 19:05 | cancelled | 13 min | $0.0000 | -- | $0.00 |
Grand Totals across all 20 runs:
- RunsOn compute cost (actual AWS spend): $7.18
- GitHub-hosted runners (macOS + Ubuntu): $0.00 (free for public repos)
- Total actual cost: ~$7.18
If this were a private repo, GitHub-hosted runner costs would add ~$22.79, bringing the total to ~$29.97.
This is the most recent and complete run with the full tiered orchestrator structure including Clang-Tidy. All jobs succeeded. Wall clock: 65 minutes (13:01 - 14:06 UTC).
| Job | Duration |
|---|---|
| Gate Checks [check_newlines] | 2.47 min |
| Gate Checks [check_format] | 1.53 min |
| Shellcheck | 1.85 min |
| MAVSDK Python [flake8] | 0.35 min |
| MAVSDK Python [mypy] | 0.33 min |
| T1 Subtotal | ~6.5 min, $0.00 |
| Job | Instance | Lifecycle | Duration | RunsOn Cost | GH Equivalent (private repo) |
|---|---|---|---|---|---|
| Build SITL Cache Seed | m7i-flex.xlarge | on-demand | 5.25 min | $0.0167 | $0.0960 |
| Clang-Tidy Static Analysis | m7i.4xlarge | spot | 10.76 min | $0.0610 | $0.7040 |
| EKF Change Detection | m7i-flex.xlarge | on-demand | 9.04 min | $0.0289 | $0.1600 |
| Basic Tests [tests] | m7i-flex.xlarge | on-demand | 9.30 min | $0.0297 | $0.1600 |
| Basic Tests [validate_module_configs] | m7i-flex.xlarge | on-demand | 2.13 min | $0.0068 | $0.0480 |
| Basic Tests [module_documentation] | m7i-flex.xlarge | on-demand | 2.35 min | $0.0075 | $0.0480 |
| T2 Subtotal | 38.83 min | $0.1506 | $1.2160 |
| Job | Instance | Lifecycle | Duration | RunsOn Cost | GH Equivalent (private repo) |
|---|---|---|---|---|---|
| macOS Build | macos-15-arm64 | GitHub-hosted (FREE) | 16.00 min | $0.00 | $2.56 |
| Ubuntu Build [ubuntu:22.04] | m7i-flex.xlarge | on-demand | 5.40 min | $0.0172 | $0.0960 |
| Ubuntu Build [ubuntu:24.04] | m7i-flex.xlarge | on-demand | 5.69 min | $0.0182 | $0.0960 |
| Flash Analysis [px4_fmu-v5x] | m7i-flex.xlarge | on-demand | 7.14 min | $0.0228 | $0.1280 |
| Flash Analysis [px4_fmu-v6x] | m7i-flex.xlarge | on-demand | 7.26 min | $0.0232 | $0.1280 |
| ITCM Check [px4_fmu-v5x_default] | m7i-flex.xlarge | on-demand | 7.35 min | $0.0235 | $0.1280 |
| ITCM Check [px4_fmu-v6xrt_default] | m7i-flex.xlarge | on-demand | 9.03 min | $0.0288 | $0.1600 |
| ITCM Check [nxp_mr-tropic_default] | m7i-flex.xlarge | on-demand | 8.71 min | $0.0278 | $0.1440 |
| ITCM Check [nxp_tropic-community_default] | m7i-flex.xlarge | on-demand | 8.65 min | $0.0276 | $0.1440 |
| Failsafe Web Simulator | m7i-flex.xlarge | on-demand | 2.99 min | $0.0095 | $0.0480 |
| Publish Flash Analysis Results | m7a.medium | spot | 0.55 min | $0.0002 | $0.0040 |
| T3 Subtotal | 78.77 min | $0.1988 | $3.6360 |
| Job | Instance | Lifecycle | Duration | RunsOn Cost | GH Equivalent (private repo) |
|---|---|---|---|---|---|
| ROS Integration Tests | m7i-flex.xlarge | on-demand | 31.53 min | $0.1006 | $0.5120 |
| SITL Tests [iris] | m7i-flex.xlarge | on-demand | 14.52 min | $0.0464 | $0.2400 |
| ROS Translation Node [jazzy] | m7i-flex.xlarge | on-demand | 13.02 min | $0.0416 | $0.2240 |
| ROS Translation Node [humble] | m7i-flex.xlarge | on-demand | 13.24 min | $0.0423 | $0.2240 |
| MAVROS Tests [Mission] | m7i-flex.xlarge | on-demand | 7.47 min | ~$0.0239 | ~$0.1280 |
| MAVROS Tests [Offboard] | m7i-flex.xlarge | on-demand | 7.82 min | ~$0.0250 | ~$0.1280 |
| T4 Subtotal | 87.60 min | $0.2798 | $1.4560 |
| Job | Duration |
|---|---|
| CI Summary | 0.03 min |
| Category | Actual Cost |
|---|---|
| RunsOn compute (T2 + T3 + T4) | $0.6292 |
| MAVROS estimated (no RunsOn post step) | ~$0.05 |
| GitHub-hosted runners (macOS + Ubuntu) | $0.00 (free, public repo) |
| Run #1 Actual Total | ~$0.68 |
| If all jobs ran on GitHub (private repo pricing) | ~$6.36 |
| RunsOn savings vs GitHub private repo | ~$3.12 (83% on RunsOn jobs) |
| Instance Type | Lifecycle | vCPU | RAM | Used For |
|---|---|---|---|---|
| m7i-flex.xlarge | on-demand | 4 | 16 GB | ~90% of jobs (builds, tests, analysis, SITL, ROS) |
| m7i.4xlarge | spot | 16 | 64 GB | Clang-Tidy Static Analysis |
| m7a.medium | spot | 1 | 4 GB | Publish Flash Analysis Results |
| Runner | Used For | Private Repo Rate |
|---|---|---|
| ubuntu-latest | T1: Gate Checks, Shellcheck, MAVSDK Python linting (5 jobs) | $0.008/min |
| macos-15-arm64 | T3: macOS Build | $0.16/min |
| ubuntu-latest | CI Summary | $0.008/min |
| Job | Avg Duration | Runner |
|---|---|---|
| Gate Checks [check_format] | ~1.5 min | ubuntu-latest |
| Gate Checks [check_newlines] | ~2.3 min | ubuntu-latest |
| Shellcheck | ~1.9 min | ubuntu-latest |
| MAVSDK Python [flake8] | ~0.3 min | ubuntu-latest |
| MAVSDK Python [mypy] | ~0.3 min | ubuntu-latest |
| Job | Avg Duration | Instance | Avg Cost |
|---|---|---|---|
| Build SITL Cache Seed | ~4.5 min | m7i-flex.xlarge | ~$0.014 |
| Clang-Tidy Static Analysis | ~10.5 min | m7i.4xlarge (spot) | ~$0.057 |
| EKF Change Detection | ~9.5 min | m7i-flex.xlarge | ~$0.030 |
| Basic Tests [tests] | ~9.2 min | m7i-flex.xlarge | ~$0.029 |
| Basic Tests [validate_module_configs] | ~2.1 min | m7i-flex.xlarge | ~$0.007 |
| Basic Tests [module_documentation] | ~2.2 min | m7i-flex.xlarge | ~$0.007 |
| T2 Total | ~$0.09-0.15 |
Note: Clang-Tidy only appears in the 2 most recent runs (21987781018, 21977430779). Older runs did not include it. Without Clang-Tidy, T2 costs ~$0.09.
| Job | Avg Duration | Instance | Avg Cost |
|---|---|---|---|
| macOS Build | ~15 min | macos-15-arm64 (FREE) | $0.00 |
| Ubuntu Build [ubuntu:22.04] | ~4.8 min | m7i-flex.xlarge | ~$0.015 |
| Ubuntu Build [ubuntu:24.04] | ~5.4 min | m7i-flex.xlarge | ~$0.017 |
| Flash Analysis [px4_fmu-v5x] | ~7.2 min | m7i-flex.xlarge | ~$0.023 |
| Flash Analysis [px4_fmu-v6x] | ~7.0 min | m7i-flex.xlarge | ~$0.022 |
| ITCM Check [px4_fmu-v5x] | ~7.6 min | m7i-flex.xlarge | ~$0.024 |
| ITCM Check [px4_fmu-v6xrt] | ~8.9 min | m7i-flex.xlarge | ~$0.028 |
| ITCM Check [nxp_mr-tropic] | ~8.3 min | m7i-flex.xlarge | ~$0.026 |
| ITCM Check [nxp_tropic-community] | ~8.3 min | m7i-flex.xlarge | ~$0.026 |
| Failsafe Web Simulator | ~2.8 min | m7i-flex.xlarge | ~$0.009 |
| Publish Flash Analysis Results | ~0.6 min | m7a.medium (spot) | ~$0.000 |
| T3 RunsOn Total | ~$0.19 |
| Job | Avg Duration | Instance | Avg Cost |
|---|---|---|---|
| ROS Integration Tests | 31.5 min | m7i-flex.xlarge | ~$0.101 |
| SITL Tests [iris] | ~14.2 min | m7i-flex.xlarge | ~$0.045 |
| ROS Translation Node [jazzy] | ~13.4 min | m7i-flex.xlarge | ~$0.043 |
| ROS Translation Node [humble] | ~13.0 min | m7i-flex.xlarge | ~$0.041 |
| MAVROS Tests [Mission] | ~8.0 min | m7i-flex.xlarge | ~$0.026 |
| MAVROS Tests [Offboard] | ~8.2 min | m7i-flex.xlarge | ~$0.026 |
| T4 Total | ~$0.28 |
Since PX4-Autopilot is a public repo, only RunsOn (AWS) costs are real:
| Category | Actual Cost | % of Total |
|---|---|---|
| T2: Build & Analysis (RunsOn) | ~$0.15 | 27% |
| T3: Platform Builds (RunsOn) | ~$0.19 | 35% |
| T4: Integration Tests (RunsOn) | ~$0.28 | 51% |
| T1 + macOS + CI Summary (GitHub, free) | $0.00 | 0% |
| MAVROS (RunsOn, estimated) | ~$0.05 | 9% |
| Total per successful run | ~$0.57 | -- |
ROS Integration Tests ████████████████████ $0.101 (18%)
Clang-Tidy ███████████ $0.057 (10%)
SITL Tests [iris] █████████ $0.045 (8%)
ROS Node [jazzy] ████████ $0.043 (8%)
ROS Node [humble] ████████ $0.041 (7%)
EKF Change Detection ██████ $0.030 (5%)
Basic Tests [tests] ██████ $0.029 (5%)
ITCM [v6xrt] █████ $0.028 (5%)
ITCM [nxp_mr-tropic] █████ $0.028 (5%)
ITCM [nxp_tropic-com] █████ $0.026 (5%)
MAVROS [Mission] █████ $0.026 (5%)
MAVROS [Offboard] █████ $0.026 (5%)
ITCM [v5x] ████ $0.024 (4%)
Flash Analysis [v5x] ████ $0.023 (4%)
Flash Analysis [v6x] ████ $0.022 (4%)
Ubuntu [ubuntu:24.04] ███ $0.017 (3%)
Build SITL Cache ███ $0.014 (2%)
Ubuntu [ubuntu:22.04] ███ $0.015 (3%)
Failsafe Web Sim ██ $0.009 (2%)
Module Docs █ $0.007 (1%)
Validate Configs █ $0.007 (1%)
Publish Flash ▏ $0.000 (0%)
The RunsOn show_costs: inline output includes a "GitHub equivalent cost" for each job. While GitHub-hosted runners are free for this public repo, this comparison shows what RunsOn saves relative to private repo pricing:
| Tier | RunsOn Cost | GitHub Private Equivalent | Savings |
|---|---|---|---|
| T2 (Build & Analysis) | $0.1506 | $1.2160 | $1.07 (88%) |
| T3 (RunsOn jobs only) | $0.1988 | $1.0760 | $0.88 (82%) |
| T4 (Integration Tests) | $0.2798 | $1.4560 | $1.18 (81%) |
| Total RunsOn jobs | $0.6292 | $3.7480 | $3.12 (83%) |
-
Actual cost per successful run is ~$0.57 -- since GitHub-hosted runners (macOS, Ubuntu) are free for public repos, the only real cost is RunsOn AWS compute. The macOS build, while expensive at $0.16/min on private repos, costs $0 here.
-
ROS Integration Tests is the most expensive job -- at ~$0.10/run (31.5 min on m7i-flex.xlarge), it accounts for ~18% of the total RunsOn spend and sits on the critical path determining wall-clock time (~60-74 min total).
-
T4 (Integration Tests) is the most expensive tier -- at ~$0.28/run (51% of total cost), with 6 parallel jobs running simulation and ROS tests.
-
RunsOn saves ~83% vs GitHub private pricing -- across all RunsOn jobs, actual cost is $0.63 vs $3.75 GitHub equivalent. Spot instances (Clang-Tidy, Publish) save ~91-94%.
-
Tiered gating limits wasted spend -- cancelled/early-failure runs cost $0.04-$0.25 vs $0.50-$0.64 for full runs. The orchestrator's T1->T2->T3->T4 gates catch failures early before expensive T4 jobs run.
-
Clang-Tidy is a recent addition -- only present in the 2 most recent runs, using a 16-vCPU spot instance (m7i.4xlarge). At ~$0.06/run it's the 2nd most expensive single job but well-optimized via spot pricing.
-
MAVROS tests lack cost reporting -- they run on RunsOn (m7i-flex.xlarge) but don't have the
runs-on/action@v2post step, so costs are estimated from duration and instance type (~$0.025 each). -
Total actual spend across all 20 analyzed runs: ~$7.18 -- all RunsOn AWS compute. Average wall clock for successful runs: ~63 min across 29 jobs in 4 tiers.
Report generated Feb 13, 2026 by analyzing RunsOn cost summaries from job logs (show_costs: inline) and GitHub Actions runner metadata across 20 workflow runs of ci-orchestrator.yml on PX4/PX4-Autopilot.