Dispatcher now launches Spot instances instead of Fargate tasks:
- t3.small for go/node builds ($0.005/hr)
- t3.medium for docker/godot builds ($0.01/hr)
- t3.micro for deploy jobs ($0.004/hr)
Instances self-terminate via user-data trap on exit.
Cancel: ec2:TerminateInstances instead of ecs:StopTask.
Cleanup cron also sweeps orphan instances by tinqs-ci tag.
Pre-baked AMI with act_runner + tools = instant boot, no install.
- setup-node: detect Alpine/Debian, use apk or NodeSource
- setup-aws: use pip on Alpine (musl), binary on Debian (glibc)
- setup-go: fix version parsing for Alpine (no grep -P)
- README per action with usage examples and input docs
- PLAN.md: roadmap for runner images, labels, Lambda dispatch
Replace single fat image with purpose-built images per workflow type.
Each image is lean: base (Alpine+AWS+git) → go/node/deploy extend it.
docker image standalone (dind base). godot for future game builds.
build-all.sh builds base first, then all others in parallel.
Each action.yml now documents:
- Original upstream repo (GitHub Actions)
- Why it was rewritten for self-hosted Gitea
- What was removed from the original
- Author and date