v1
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.
tinqs/ci
Tinqs CI toolchain — composite Gitea Actions and purpose-built runner images.
Actions
| Action | What it does |
|---|---|
tinqs/ci/checkout@v1 |
Clone a repo from tinqs.com |
tinqs/ci/setup-go@v1 |
Install Go (skips if pre-baked) |
tinqs/ci/setup-node@v1 |
Install Node.js + pnpm (skips if pre-baked) |
tinqs/ci/setup-aws@v1 |
Install AWS CLI + optional ECR login |
steps:
- uses: tinqs/ci/checkout@v1
- uses: tinqs/ci/setup-go@v1
- uses: tinqs/ci/setup-aws@v1
with:
ecr-login: 'true'
ecr-repo: '149751500842.dkr.ecr.eu-west-1.amazonaws.com/tinqs-git'
Runner Images
Each workflow type gets a lean, purpose-built runner image. No fat "everything" image.
| Image | runs-on |
Contents | Used by |
|---|---|---|---|
| base | — | Alpine + git + AWS CLI + SSH | Foundation for all others |
| go | go |
base + Go 1.26 | build-tstudio, deploy-proxy |
| node | node |
base + Node 22 + pnpm | deploy-docs |
| docker | docker |
docker:dind + Go + AWS CLI | build (platform), deploy-bot |
| deploy | deploy |
base only (lightest) | deploy-arikigame, release |
| godot | godot |
base + headless Godot 4.6 + export templates | ariki-game builds (future) |
Build all images
cd images
./build-all.sh v1
Images push to ECR as tinqs-runner-{name}:v1.
How routing works
The Lambda dispatcher reads runs-on: from the workflow and starts a Fargate task with the matching image:
runs-on: go → tinqs-runner-go (Go builds)
runs-on: node → tinqs-runner-node (frontend builds)
runs-on: docker → tinqs-runner-docker (Docker image builds)
runs-on: deploy → tinqs-runner-deploy (S3/ECS deploys)
runs-on: godot → tinqs-runner-godot (game exports)
runs-on: host → legacy runner (forge-runner, temporary)
Description
Languages
Go
80.4%
Dockerfile
10.3%
Shell
5.5%
Makefile
3.8%