Merge pull request 'feat(docker): switch base from barichello/godot-ci to debian:bookworm-slim' (#12) from feat/debian-slim-base into main

This commit was merged in pull request #12.
This commit is contained in:
2026-08-06 22:02:10 +00:00
3 changed files with 52 additions and 21 deletions
+10 -6
View File
@@ -9,9 +9,9 @@ on:
inputs: inputs:
godot_version: godot_version:
description: >- description: >-
Godot version to (re)build, e.g. 4.7.1 — must exist as a Godot version to (re)build, e.g. 4.7.1 — must exist as a stable release at
barichello/godot-ci tag (https://hub.docker.com/r/barichello/godot-ci/tags). https://github.com/godotengine/godot-builds/releases. Leave empty to build
Leave empty to build the newest stable, same as the nightly run. the newest stable, same as the nightly run.
required: false required: false
type: string type: string
@@ -40,12 +40,16 @@ jobs:
UPDATE_LATEST=true UPDATE_LATEST=true
fi fi
if ! docker manifest inspect "barichello/godot-ci:${VERSION}" >/dev/null 2>&1; then # This image no longer depends on barichello/godot-ci as a base — it downloads Godot
# directly from godot-builds' own GitHub releases (see Dockerfile), so the gate here
# is against *that* release existing, not a third party's Docker tag.
RELEASE_URL="https://github.com/godotengine/godot-builds/releases/download/${VERSION}-stable/Godot_v${VERSION}-stable_linux.x86_64.zip"
if ! curl -fsSL -o /dev/null -r 0-0 "$RELEASE_URL"; then
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "::error::No barichello/godot-ci tag for '${VERSION}'. Check https://hub.docker.com/r/barichello/godot-ci/tags" echo "::error::No godot-builds stable release for '${VERSION}'. Check https://github.com/godotengine/godot-builds/releases"
exit 1 exit 1
fi fi
echo "::notice::Newest Godot stable is ${VERSION} but barichello/godot-ci has no matching tag yet — skipping, will retry tomorrow." echo "::notice::Newest Godot stable is ${VERSION} but its godot-builds release isn't up yet — skipping, will retry tomorrow."
echo "skip=true" >> "$GITHUB_OUTPUT" echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0 exit 0
fi fi
+28 -9
View File
@@ -1,16 +1,25 @@
# GODOT_VERSION selects the barichello/godot-ci base tag (Godot 4.0+ only — see # GODOT_VERSION is a stable Godot release tag (e.g. "4.7.1", no "-stable" suffix — Godot 4.0+
# docs/handoff/godot-ci-custom-image.md). BLENDER_URL is the tarball to bake in; # only, see docs/handoff/godot-ci-custom-image.md). BLENDER_URL is the tarball to bake in.
# .gitea/workflows/publish.yml always resolves both at build time via # .gitea/workflows/publish.yml always resolves both at build time via
# scripts/resolve-godot-version.sh and scripts/resolve-blender-url.sh. The # scripts/resolve-godot-version.sh and scripts/resolve-blender-url.sh. The defaults below are
# defaults below are only a fallback for a plain local `docker build`. # only a fallback for a plain local `docker build`.
#
# Godot itself is downloaded straight from its official GitHub releases (godot-builds), the same
# source barichello/godot-ci's own Dockerfile uses — this image no longer depends on that image
# as a base. Decided via wayfinder map https://git.arthurerlich.de/haylan/godot-ci/issues/2,
# ticket https://git.arthurerlich.de/haylan/godot-ci/issues/7: Alpine was considered and rejected
# (official Godot/Blender binaries are glibc-only, and Alpine's musl-native alternatives live
# only on its unpinned `edge` repo); a plain glibc-slim base doesn't cost the compatibility risk.
ARG GODOT_VERSION=4.7.1 ARG GODOT_VERSION=4.7.1
FROM barichello/godot-ci:${GODOT_VERSION} FROM debian:bookworm-slim
ARG GODOT_VERSION
ARG BLENDER_URL=https://download.blender.org/release/Blender4.2/blender-4.2.3-linux-x64.tar.xz ARG BLENDER_URL=https://download.blender.org/release/Blender4.2/blender-4.2.3-linux-x64.tar.xz
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl unzip xz-utils \
libfontconfig1 \ libfontconfig1 \
build-essential scons pkg-config xz-utils curl \ build-essential scons pkg-config \
libx11-dev libxcursor-dev libxinerama-dev libgl1-mesa-dev \ libx11-dev libxcursor-dev libxinerama-dev libgl1-mesa-dev \
libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev libwayland-dev \ libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev libwayland-dev \
mingw-w64 \ mingw-w64 \
@@ -21,9 +30,19 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
&& update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix \ && update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix \
&& update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix \ && update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix \
&& rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/apt/lists/* \
# Blender is not bundled in barichello/godot-ci, and Ubuntu's apt package lags # Godot editor + export templates, straight from the official release (same URL shape
# (stuck on 4.0.2 on noble) — install the resolved tarball straight from # barichello/godot-ci's own Dockerfile uses) — stable releases only, matching what
# download.blender.org instead of `apt-get install blender`. # scripts/resolve-godot-version.sh resolves.
&& curl -fsSLO "https://github.com/godotengine/godot-builds/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_linux.x86_64.zip" \
&& curl -fsSLO "https://github.com/godotengine/godot-builds/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_export_templates.tpz" \
&& mkdir -p "/root/.local/share/godot/export_templates/${GODOT_VERSION}.stable" \
&& unzip -q "Godot_v${GODOT_VERSION}-stable_linux.x86_64.zip" \
&& mv "Godot_v${GODOT_VERSION}-stable_linux.x86_64" /usr/local/bin/godot \
&& unzip -q "Godot_v${GODOT_VERSION}-stable_export_templates.tpz" \
&& mv templates/* "/root/.local/share/godot/export_templates/${GODOT_VERSION}.stable/" \
&& rm -rf "Godot_v${GODOT_VERSION}-stable_linux.x86_64.zip" "Godot_v${GODOT_VERSION}-stable_export_templates.tpz" templates \
# Blender is not bundled anywhere here — install the resolved tarball straight from
# download.blender.org instead of an apt package.
&& curl -fsSL "$BLENDER_URL" -o /tmp/blender.tar.xz \ && curl -fsSL "$BLENDER_URL" -o /tmp/blender.tar.xz \
&& mkdir -p /opt/blender \ && mkdir -p /opt/blender \
&& tar -xJf /tmp/blender.tar.xz -C /opt/blender --strip-components=1 \ && tar -xJf /tmp/blender.tar.xz -C /opt/blender --strip-components=1 \
+14 -6
View File
@@ -1,9 +1,17 @@
# godot-ci # godot-ci
Custom image extending `barichello/godot-ci` with the Godot export-template toolchain and Blender 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 pre-installed, so `Project4x`'s `export-template.yml` doesn't `apt-get install` them on every
release run. release run.
Godot is downloaded directly from its official [godot-builds
releases](https://github.com/godotengine/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](https://git.arthurerlich.de/haylan/godot-ci/issues/2) for the full research trail.
Built from the handoff spec at `Project4x`'s `docs/handoff/godot-ci-custom-image.md`; scope and 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. versioning have since moved on from that spec — see below.
@@ -22,13 +30,13 @@ this image's Blender toolchain).
- **Nightly (midnight, `schedule:`)**: resolves the newest *stable* Godot release - **Nightly (midnight, `schedule:`)**: resolves the newest *stable* Godot release
(`scripts/resolve-godot-version.sh`) and the newest stable Blender (`scripts/resolve-godot-version.sh`) and the newest stable Blender
(`scripts/resolve-blender-url.sh`), and rebuilds+pushes `<version>` + `latest` only if that (`scripts/resolve-blender-url.sh`), and rebuilds+pushes `<version>` + `latest` only if that
Godot version isn't already published. If `barichello/godot-ci` hasn't tagged the new Godot Godot version isn't already published. If godot-builds hasn't published that release's assets
version yet, the run skips (with a notice, not a failure) and retries the next night. 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 - **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 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 `barichello/godot-ci` has no already exists. Does **not** touch `latest`. Fails clearly if godot-builds has no matching
matching tag — check release — check its [releases list](https://github.com/godotengine/godot-builds/releases)
[its tag list](https://hub.docker.com/r/barichello/godot-ci/tags) first. first.
Blender has no official "latest stable" API — `resolve-blender-url.sh` scrapes 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 `download.blender.org/release/`. `scripts/test-lib.sh` is an offline smoke test for the parsing