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
This commit is contained in:
@@ -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
@@ -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 \
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user