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
84 lines
3.7 KiB
Markdown
84 lines
3.7 KiB
Markdown
# 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](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
|
|
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](https://github.com/godotengine/godot-builds/releases)
|
|
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:
|
|
|
|
```sh
|
|
docker build -t godot-ci-local .
|
|
```
|
|
|
|
Override either to test a specific combination, matching what `publish.yml` would resolve for a
|
|
given night:
|
|
|
|
```sh
|
|
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`:
|
|
|
|
```diff
|
|
- container: barichello/godot-ci:4.7.1
|
|
+ container: git.arthurerlich.de/haylan/godot-ci:4.7.1
|
|
```
|