# Gitea Actions CI Workflow defined in [`build.yml`](./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. | | `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 1. **Docker image tag** — verify `barichello/godot-ci:4.6` exists on Docker Hub. Otherwise adjust `GODOT_IMAGE` (common alternatives: `4.3`, `4.4`). 2. **macOS preset missing** — add it in Godot Editor → Project → Export → Add → macOS, name it exactly `macOS` (or change the matrix entry). The `.zip` will be unsigned; on Mac it needs `xattr -dr com.apple.quarantine` to launch. 3. **`Linux/X11Debug` preset** — Godot-3-era name. Reopen the project in Godot 4 once and re-save the preset (the editor may rename it). Update the matrix `preset:` field accordingly if it does. 4. **Gitea runner** — must support Docker containers (`act_runner` in `docker` mode, or `host` mode with Docker installed). Check `act_runner exec` access to Docker Hub. 5. **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. ## 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` / empty `ReleaseVersion` pipeline → replaced by triggers on `main` (release branch per `CLAUDE.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