Lints scripts/, db/, scenes/ via gdtoolkit==4.* on ubuntu-latest (Python, no Godot needed), in parallel with the validate job. addons/ (third-party LOD plugin) and developers/ (sandbox) are left out. Non-blocking for now: the export jobs still only need validate, so a lint regression won't break builds while the Godot-3 leftover code is being cleaned up. gdlintrc bumps max-line-length from 100 to 140 because Godot $-style node paths and typed signatures routinely push past 100 without that being a real readability problem. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.6 KiB
Gitea Actions CI
Workflow defined in build.yml. Triggered on push / PR to
dev and main, or manually via workflow_dispatch.
Jobs
| Job | Image | Role |
|---|---|---|
validate |
barichello/godot-ci:4.6 |
godot --headless --import then grep for SCRIPT ERROR / Parse Error. Uploads .godot/ cache. |
lint |
ubuntu-latest (Python) |
gdlint scripts db scenes via gdtoolkit==4.* (Scony). Parallel to validate; does not gate exports yet. |
export-desktop |
barichello/godot-ci:4.6 |
Matrix: Windows / Linux / macOS. Reuses the import cache, uploads each binary as artifact. |
export-android |
barichello/godot-ci:4.6 + JDK 17 + Android SDK installed at runtime |
Provisions keystore, writes editor_settings-4.tres with SDK / JDK paths, exports APK. |
Artifacts are kept 14 days, accessible from the Gitea run page.
Prerequisites before the first successful run
- Docker image tag — verify
barichello/godot-ci:4.6exists on Docker Hub. Otherwise adjustGODOT_IMAGE(common alternatives:4.3,4.4). - macOS preset missing — add it in Godot Editor → Project → Export →
Add → macOS, name it exactly
macOS(or change the matrix entry). The.zipwill be unsigned; on Mac it needsxattr -dr com.apple.quarantineto launch. Linux/X11Debugpreset — Godot-3-era name. Reopen the project in Godot 4 once and re-save the preset (the editor may rename it). Update the matrixpreset:field accordingly if it does.- Gitea runner — must support Docker containers (
act_runnerindockermode, orhostmode with Docker installed). Checkact_runner execaccess to Docker Hub. - Optional secret
ANDROID_KEYSTORE_BASE64—base64 -w0 debug.keystore, stored as a Gitea repo secret. Without it, a throwaway keystore is generated per run, so the APK signature changes every build.
Linting
gdlint (from Scony's gdtoolkit) runs in the lint job over scripts/,
db/, and scenes/. addons/ (third-party LOD plugin) and developers/
(sandbox) are intentionally excluded.
The job is non-blocking today — the export jobs only depend on
validate, so a lint failure prints warnings but still produces binaries.
Once the codebase is clean, switch the export jobs' needs: validate to
needs: [validate, lint] to make lint a hard gate.
Suppress specific rules per-line with # gdlint: disable=<rule> or
project-wide with a gdlintrc file at the repo root (see
gdtoolkit docs).
Differences from the old .drone.yml
- No more Drone, no more Butler — build only, artifacts downloadable from the Gitea UI.
- GDScript validation step before export (didn't exist).
.godot/import cache shared between jobs (faster reruns).- Keystore via Gitea secret instead of a public pCloud link.
- macOS target added (preset still to be created in Godot).
master/ emptyReleaseVersionpipeline → replaced by triggers onmain(release branch perCLAUDE.md).
Future: itch.io deploy via Butler
Not wired. When you want it back, add a deploy-itch job gated on tag
push (v*) that downloads the artifacts and runs
butler push <dir> dev-crea/ahog:<channel> with BUTLER_API_KEY from
secrets. Channels used historically:
windows, linux, android, mac.