← Dev Log
BallOrcs1 min read

Four platforms, one green light

The game now builds itself for Windows, Linux, web browsers, and Android — automatically, every week, from one button.

In plain words

The game now builds itself for Windows, Linux, web browsers, and Android — automatically, every week, from one button. Getting the fourth green checkmark took seven rounds of "run it, read the wreckage, fix one layer, run it again." Each platform failed for its own special reason, from missing graphics libraries to Android demanding an app icon before it would even try. Apple versions wait until we own Apple hardware.

Under the hood

A pipeline archaeology, one stratum per run:

  • All four platforms failed identically at first: every job tried to compile the linuxbsd host editor in its own container, but only the linux container carries a host C++ toolchain (a buildroot SDK off PATH). Fix mirrors godot-build-scripts: platform scripts set up their env (GODOT_SDK_LINUX_X86_64/bin on PATH, emsdk_env.sh for web), and host tools (editor, extension_api.json, host debug GDExtension) build once in build:linux and flow to dependent jobs as artifacts.
  • Windows: Godot 4.7 hard-requires D3D12 deps. The containers carry them under /root… except ours didn't — upstream injects them outside the container. The engine's own install_d3d12_sdk_windows.py installs to where detect.py looks, with d3d12=no as fallback.
  • Web: GDExtension games need the dlink template variant, and our preset is thread_support=false, so CI builds and installs web_dlink_nothreads_* templates specifically.
  • Android: scons auto-installs NDK r29 in-job; gradle packages the templates; the export then demanded, in sequence: the in-project build template (extracted with a .build_version of 4.7.stable), ETC2/ASTC import flags, a project icon (Android refuses to export without one), and keystore credentials — which live in .godot/export_credentials.cfg under [preset.N.options], verified by reading editor_export.cpp, not where the docs imply.

Pipeline #12: linux, windows, web, android all build, export, and upload. The Monday 06:00 UTC schedule runs the full release on the linux runner, skipping Apple targets with a log line instead of a failure until a macOS runner exists.

#ci#platforms#war-story