# tinqs/ci — Roadmap

## Done (2026-05-22)

- [x] Create `tinqs/ci` repo on tinqs.com
- [x] Composite actions: checkout, setup-go, setup-node, setup-aws
- [x] Wire all 6 studio workflows to `tinqs/ci/*@v1`
- [x] Alpine + Debian compatibility in all actions
- [x] Runner image Dockerfiles: base, go, node, docker, deploy, godot
- [x] Architecture doc: `tinqs/internal/architecture/ci-runner-architecture.md`

## Next: Runner Images

Build and push purpose-built images to ECR. Each workflow type gets a lean image.

| Image | ECR name | Contents | Priority |
|-------|----------|----------|----------|
| base | tinqs-runner-base | Alpine + git + AWS CLI + SSH | High |
| go | tinqs-runner-go | base + Go 1.26 | High |
| node | tinqs-runner-node | base + Node 22 + pnpm | High |
| docker | tinqs-runner-docker | dind + Go + AWS CLI | High |
| deploy | tinqs-runner-deploy | base only | Medium |
| godot | tinqs-runner-godot | base + headless Godot 4.6 | Low (future) |

**Blocker:** No Docker on Forge, Lightsail unreachable. Options:
1. AWS CodeBuild project to build images from this repo
2. SSH to Lightsail when back online
3. Self-build: add a workflow here that builds images on the current runner

## Next: Label Routing

Once images exist:
1. Update ECS task definitions — one per image
2. Register runners with matching labels: `go`, `node`, `docker`, `deploy`
3. Update studio workflows: `runs-on: host` → specific labels
4. Lambda dispatcher (future): webhook → Fargate task with correct image

## Future: Lambda Dispatch + Cancel

Lambda code already exists in `tinqs-ltd/docs/lambda/` (ci-dispatch + ci-exec).
Move to `tinqs/studio/deploy/lambda/`, deploy with SAM.

- DynamoDB table for run tracking (`tinqs-ci-runs`)
- Cancel via `ecs:StopTask` on webhook or timeout
- EventBridge cron for stale task cleanup
- Deploy-only jobs run directly in Lambda (no Fargate needed)

See: `tinqs/internal/architecture/ci-runner-architecture.md`

## Future: More Actions

| Action | Purpose |
|--------|---------|
| `tinqs/ci/setup-python` | Python + pip/uv for ML pipelines |
| `tinqs/ci/deploy-ecs` | ECS update-service wrapper with wait |
| `tinqs/ci/deploy-s3` | S3 sync + CloudFront invalidation |
| `tinqs/ci/notify` | Post build status to Lobster GChat |
