CesiumGS / CesiumGS/cesium-native

macOS CI gates 100% of runs — measuring the cost of the x86_64 workaround from #867

Open
#1,439 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.