CesiumGS / CesiumGS/cesium-native
macOS CI gates 100% of runs — measuring the cost of the x86_64 workaround from #867
- Dominant language
- C++
- Stars
- 623
- Forks
- 277
- PR merge metrics
- No merged PRs in 30d
Description
I've been profiling public C++ CI pipelines to test a method, and cesium-native gave the clearest result I found. Posting the numbers in case they help prioritise #867 — apologies if this is already known internally.
Measurements — the 6 most recent successful cesium-native runs (15 Jul – 2 Sep 2026), from the Actions API:
In all 6, the run finished within 0.1 min of its longest job. The gate is always a macOS job.
macos-14 / clang / RelWithDebInfo — median 129.8 min (47.1–136.7)
macos-14 / clang / Debug — median 94.3 min (62.0–132.7)
ubuntu-22.04 / clang / RelWithDebInfo — median 16.3 min, same compiler and build type
Every other job finishes around 15 min and waits
Queue time isn't a factor: median wait for a runner is 0.1 min
Which of the two macOS jobs is the gate varies by run. In [33684909442](https://github.com/CesiumGS/cesium-native/actions/runs/33684909442) it was macos-14 / clang / Debug at 2h12m against ubuntu-22.04 / clang / Debug at 11m — same compiler, same build type, 12×.
Cost. If neither macOS job were the critical path, runs would be gated by Emscripten or the Linux clang build at 25–33 min. That's a median of 102 minutes per run (89–112), on every push and pull request.
Why this looks like #867 rather than "macOS is slower". build.yml puts CMake into cross-compile mode on the arm64 macos-14 runners:
-DVCPKG_TRIPLET=x64-macos-10-15 -DCMAKE_OSX_ARCHITECTURES=x86_64
-DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_SYSTEM_PROCESSOR=x86_64
A triplet name outside vcpkg's own set means its prebuilt binaries won't match, so the dependency tree likely rebuilds from source most runs — which would also explain the same job varying 2.9× (47 to 137 min) for identical work. Reading #867, this traces to the arm64 narrowing-conversion test failures rather than a distribution requirement; please correct me if that's wrong. #867 was closed 2025-12-05 but main still carries the triplet.
A second consequence, possibly the more important one. Because the macOS entry cross-compiles to x86_64, CI never builds or tests arm64 macOS. Meanwhile cesium-unity and cesium-unreal each carry both x64-osx-* and arm64-osx-* triplets — so products built on this library do ship arm64 macOS, on a configuration the library's own CI has never exercised, with the test failures from #867 behind it. (The 10.15 deployment target is consistent across all three repos, so that part looks deliberate — it's the architecture that differs.)
Fixing the narrowing conversions is the real work here and it isn't a config change. I couldn't find the cost written down anywhere, and 100 minutes a run plus an untested primary platform seemed worth knowing when deciding whether it's worth doing.
Happy to post the full job-by-job table.
Contributor guide
Research direction
Start with .github/workflows/build.yml and issue #867, then compare the listed macOS, Ubuntu, and Emscripten jobs in the referenced Actions runs. Confirm the triplet and architecture behavior, check whether the narrowing-conversion failures still reproduce, and define done as a reviewed CI configuration that addresses the reported gate and platform coverage.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp, github-actions, macos
- Domain
- build-system, ci-cd, devops
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100