3cf829752b
flutter / analyze-test-build (push) Failing after 2s
test-go / test (push) Successful in 33s
android / Build + lint + test (push) Failing after 41s
test-web / test (push) Successful in 41s
android / Build signed release APK (push) Has been skipped
test-go / integration (push) Successful in 11m16s
- rename .forgejo/workflows/ to .gitea/workflows/ (git mv preserves history); Gitea Actions reads either path, but the directory now matches the active platform - collapse ANDROID_STORE_PASSWORD + ANDROID_KEY_PASSWORD into a single ANDROID_KEYSTORE_PASSWORD secret (PKCS12 keystores require the two passwords to be identical, so the duplication carried no information); build.gradle.kts still reads two env vars to stay format-agnostic, both now sourced from the same secret in CI - ignore android/*.keystore, android/*.keystore.*, android/*.jks, android/keystore.properties so the regenerated signing material never reaches a remote on accident - update prose references from Forgejo to Gitea in CLAUDE.md and the docs; the historical "migrated from Forgejo" note in CLAUDE.md is kept intentionally; forgejo/upload-artifact@v3 action refs are left untouched (canonical artifact action, resolves cleanly under Gitea Actions) Operator side: ANDROID_KEY_ALIAS, ANDROID_KEYSTORE_PASSWORD, and ANDROID_KEYSTORE_B64 secrets registered in Gitea before this lands.
3.8 KiB
3.8 KiB
CI Requirements — Minstrel
Copy of the template. Family-wide policy:
ci-runners.mdin the FabledRulebook.
Runtime images
Minstrel's four workflows consume two CI images:
git.fabledsword.com/bvandeusen/ci-go:1.26
git.fabledsword.com/bvandeusen/ci-flutter:3.44
ci-go:1.26— Go server tests (.gitea/workflows/test-go.yml), web SPA tests (.gitea/workflows/test-web.yml), and the release container build (.gitea/workflows/release.yml).ci-flutter:3.44— Flutter client tests + debug/release APK builds (.gitea/workflows/flutter.yml).
Image deps used
From ci-go:1.26
- Go (1.26 toolchain) —
go vet,go test -race,go build,go mod. - Node + npm —
npm ciandnpm test/npm run checkintest-web.yml. - golangci-lint — lint pass in
test-go.yml. - docker CLI — bridge-IP discovery of the per-job Postgres service container in
test-go.ymlintegration job (via the runner's shared/var/run/docker.sock). - docker buildx — release container build + push in
release.yml. - curl — release-asset polling / upload in
release.yml.
From ci-flutter:3.44
- Flutter (3.44 stable channel) —
flutter pub get,flutter analyze --fatal-infos,flutter test,flutter build apk(debug + signed release). - Dart —
dart run tool/gen_tokens.dart,dart run build_runner build(drift codegen). - Android SDK + NDK + cmdline-tools + build-tools — APK assembly + signing.
- Java 25 — Gradle / Android build.
- git —
actions/checkout@v4baseline (and any shell git operations). - base64 + curl — keystore decode + release-asset upload in the tag-build path.
Per-job tool installs
None.
Notes
- Label/image split. Workflows keep
runs-on: go-ci/runs-on: flutter-cias the scheduling label per theci-runners.md"label = scheduling handle, image =container.image" pattern. The labels are intentional handles, not toolchain assertions. - Integration-job docker-socket dependency.
test-go.yml's integration job uses the runner's shared docker socket (/var/run/docker.sock) to bridge-IP-discover the per-job Postgres service container by name + network intersection — the dev compose'sminstrel-postgres-*containers are explicitly skipped as belt-and-suspenders. Depends onact_runner.valid_volumeswhitelisting the socket; if that ever stops auto-mounting, integration tests fail at thedocker inspectstep. - Go toolchain pin.
go.modis ongo 1.25.0becausegolang.org/x/crypto v0.51.0declares 1.25 as its minimum.ci-go:1.26satisfies this with headroom. Futurex/cryptobumps that move the Go floor should be paired with an image-tag bump in this file + the workflows. - In-app update channel polling.
release.ymlpolls Gitea's release-asset API for up to 15 min on tag pushes to fetch the APK thatflutter.ymlis concurrently attaching to the same release. The asset eventually appears becauseflutter.ymlandrelease.ymlrun in parallel on the same tag; if the polling times out, the server image ships without the bundled update channel (graceful degradation, not a build failure). - Cache server reachability.
test-web.ymldoes NOT usecache: 'npm'onactions/setup-node— the Gitea Actions cache server isn't reachable from this runner's container network andsetup-nodewas burning ~4m41s on ETIMEDOUT before failing open. With the migration toci-go:1.26,setup-nodeis removed entirely (Node is in the image). The cache concern reappears if a future change re-introduces a network-dependent action. - Friction asks. None pending. The two images cover everything Minstrel needs.