haylan 8feeb2b428 feat(docker): switch base from barichello/godot-ci to debian:bookworm-slim
Drop the dependency on barichello/godot-ci as a base image (Ubuntu, ~2.4GB
before this repo adds anything, most of it Android SDK/NDK weight this image
never uses). Download Godot's editor and export templates directly from its
official godot-builds releases instead, the same source barichello's own
Dockerfile pulls from.

Alpine was the first candidate considered and rejected: official Godot and
Blender binaries are glibc-only, and Alpine's musl-native alternatives for
both live only on its unpinned edge repo (see wayfinder tickets #4, #5, #6).
A glibc-slim distro turned out not to be meaningfully smaller than Ubuntu
either (#8) — but dropping barichello's Android-SDK-laden base entirely
still nets a real win: local build measured 2343MB total (Godot + export
templates + Blender + mingw-w64 + X11 dev libs) vs. barichello's bare base
alone at 2460MB before this repo's layers were ever added.

publish.yml's barichello-tag gate is replaced with a check against the
godot-builds release we now actually depend on.

Decided via wayfinder map #2, ticket #7:
#7
2026-08-06 23:11:53 +02:00

godot-ci

A debian:bookworm-slim-based image with Godot, its export-template toolchain, and Blender pre-installed, so Project4x's export-template.yml doesn't apt-get install them on every release run.

Godot is downloaded directly from its official godot-builds releases rather than from a base image — this repo previously extended barichello/godot-ci (Ubuntu-based) but moved off it to shed that dependency's weight. Alpine was considered and rejected first: official Godot and Blender binaries are glibc-only, and Alpine's musl-native alternatives for both live only on its unpinned edge repo — not a safe bet for a nightly-rebuilding image. See wayfinder map #2 for the full research trail.

Built from the handoff spec at Project4x's docs/handoff/godot-ci-custom-image.md; scope and versioning have since moved on from that spec — see below.

Image

git.arthurerlich.de/haylan/godot-ci:<godot-version>, e.g. git.arthurerlich.de/haylan/godot-ci:4.7.1, plus a floating git.arthurerlich.de/haylan/godot-ci:latest that always points at the newest.

Godot 4.0+ only (Blender's .blend import is a Godot 4 feature — 3.x builds have no use for this image's Blender toolchain).

How versions get built

.gitea/workflows/publish.yml:

  • Nightly (midnight, schedule:): resolves the newest stable Godot release (scripts/resolve-godot-version.sh) and the newest stable Blender (scripts/resolve-blender-url.sh), and rebuilds+pushes <version> + latest only if that Godot version isn't already published. If godot-builds hasn't published that release's assets yet, the run skips (with a notice, not a failure) and retries the next night.
  • Manual (workflow_dispatch): type a Godot version (e.g. 4.6.3) to (re)build and push that exact tag, always with whatever Blender is newest at build time. Overwrites the tag if it already exists. Does not touch latest. Fails clearly if godot-builds has no matching release — check its releases list first.

Blender has no official "latest stable" API — resolve-blender-url.sh scrapes download.blender.org/release/. scripts/test-lib.sh is an offline smoke test for the parsing logic both resolve scripts share (scripts/lib.sh).

Auth

The publish workflow pushes to this repo's Gitea package (container) registry using a Personal Access Token stored as the repo secret REGISTRY_PUSH_PAT — the built-in per-run GITEA_TOKEN cannot push to the package registry on this instance.

  • Scope: write:package (read:package too if the workflow ever needs to pull the image back before tagging).
  • Owner: TODO — fill in once the token is generated (Settings → Applications → Generate New Token on the account that should own the published packages).

Building locally for testing

The Dockerfile's GODOT_VERSION and BLENDER_URL build args both have defaults, so a plain build with no args works for local testing:

docker build -t godot-ci-local .

Override either to test a specific combination, matching what publish.yml would resolve for a given night:

docker build \
  --build-arg GODOT_VERSION=4.6.3 \
  --build-arg BLENDER_URL=https://download.blender.org/release/Blender4.2/blender-4.2.3-linux-x64.tar.xz \
  -t godot-ci-local .

Consuming this image

In Project4x's .gitea/workflows/export-template.yml, pin to a specific version (recommended, matches whatever GODOT_VERSION the project itself targets) or float on latest:

- container: barichello/godot-ci:4.7.1
+ container: git.arthurerlich.de/haylan/godot-ci:4.7.1
S
Description
No description provided
Readme
108 KiB
Languages
Dockerfile 53.2%
Shell 46.8%