# 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 |

```yaml
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

```bash
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)
```
