This commit is contained in:
Jason Stedwell
2026-06-29 21:56:12 -05:00
parent bc207c1cf7
commit 1757777a32
32 changed files with 1468 additions and 44 deletions
+54 -44
View File
@@ -27,7 +27,7 @@ The project is considered successful when it can:
## Phase 0 — Research and design
**Status:** Active
**Status:** Complete
### Goals
@@ -40,13 +40,13 @@ The project is considered successful when it can:
- [x] Write `AGENT.md`
- [x] Write `README.md`
- [x] Write `ROADMAP.md`
- [ ] Create `CHANGELOG.md`
- [ ] Create `.env.example`
- [ ] Create ADR template under `docs/decisions/`
- [ ] Write `docs/architecture.md`
- [ ] Decide base image strategy
- [ ] Decide socket-mount vs DinD position for v1
- [ ] Decide registration mode defaults
- [x] Create `CHANGELOG.md`
- [x] Create `.env.example`
- [x] Create ADR template under `docs/decisions/`
- [x] Write `docs/architecture.md`
- [x] Decide base image strategy
- [x] Decide socket-mount vs DinD position for v1
- [x] Decide registration mode defaults
### Exit criteria
@@ -59,7 +59,7 @@ The project is considered successful when it can:
## Phase 1 — Base image and bootstrap
**Status:** Planned
**Status:** Complete
### Goals
@@ -69,24 +69,29 @@ The project is considered successful when it can:
### Tasks
- [ ] Create `docker/runner/Dockerfile`
- [ ] Pin base image tag
- [ ] Pin `act_runner` source/version
- [ ] Install required dependencies at build time:
- [ ] bash
- [ ] curl
- [ ] git
- [ ] jq
- [ ] nodejs
- [ ] npm
- [ ] docker CLI
- [ ] ca-certificates
- [ ] tini
- [ ] tzdata
- [ ] Create `docker/runner/docker-entrypoint.sh`
- [ ] Create `docker/runner/healthcheck.sh`
- [ ] Add image metadata labels
- [ ] Verify startup prints tool versions
- [x] Create `docker/runner/Dockerfile`
- [x] Pin base image tag
- [x] Pin `act_runner` source/version
- [x] Install required dependencies at build time:
- [x] bash
- [x] curl
- [x] git
- [x] jq
- [x] nodejs
- [x] npm
- [x] docker CLI
- [x] ca-certificates
- [x] tini
- [x] tzdata
- [x] Create `docker/runner/docker-entrypoint.sh`
- [x] Create `docker/runner/healthcheck.sh`
- [x] Add image metadata labels
- [x] Verify startup prints tool versions
### Notes
- First successful build: `custom-gitea-runner:v0.1.0` (act_runner v0.2.11, node v20.20.2, npm 10.8.2, git 2.34.1, docker CLI 29.6.1).
- Runtime smoke test passes 17/17 via `./scripts/verify-runtime.sh`.
### Exit criteria
@@ -99,7 +104,7 @@ The project is considered successful when it can:
## Phase 2 — Registration and config flows
**Status:** Planned
**Status:** Complete
### Goals
@@ -109,15 +114,15 @@ The project is considered successful when it can:
### Tasks
- [ ] Create `config/runner.example.yaml`
- [ ] Create `config/labels.example.env`
- [ ] Create `scripts/register-runner.sh`
- [ ] Create `scripts/deregister-runner.sh`
- [ ] Add config path validation
- [ ] Add first-boot registration flow
- [ ] Add re-run safe bootstrap logic
- [ ] Document required environment variables
- [ ] Validate restart behavior with existing config
- [x] Create `config/runner.example.yaml`
- [x] Create `config/labels.example.env`
- [x] Create `scripts/register-runner.sh`
- [x] Create `scripts/deregister-runner.sh`
- [x] Add config path validation
- [x] Add first-boot registration flow
- [x] Add re-run safe bootstrap logic
- [x] Document required environment variables
- [x] Validate restart behavior with existing config
### Exit criteria
@@ -125,6 +130,11 @@ The project is considered successful when it can:
- Existing config is reused without duplicate registration.
- Missing configuration fails fast with clear logs.
### Notes
- Validated live against `git.alwisp.com` (Gitea 1.26.4): runner `forgerunner-01` registered as instance-level runner (id 5), came online and healthy, and a container restart reused the existing config with no duplicate registration.
- Registration token obtained via `POST /api/v1/admin/actions/runners/registration-token`; deregistration via `DELETE /api/v1/admin/actions/runners/{id}` (act_runner has no unregister command).
---
## Phase 3 — Docker workflow support
@@ -167,13 +177,13 @@ The project is considered successful when it can:
### Tasks
- [ ] Create `docker/runner/smoke-test.sh`
- [ ] Create `scripts/verify-runtime.sh`
- [ ] Create `scripts/test-local-runner.sh`
- [ ] Add `test/sample-workflows/checkout.yml`
- [ ] Add `test/sample-workflows/node-action.yml`
- [ ] Add `test/sample-workflows/docker-login.yml`
- [ ] Add `test/sample-workflows/docker-build-push.yml`
- [x] Create `docker/runner/smoke-test.sh`
- [x] Create `scripts/verify-runtime.sh`
- [x] Create `scripts/test-local-runner.sh`
- [x] Add `test/sample-workflows/checkout.yml`
- [x] Add `test/sample-workflows/node-action.yml`
- [x] Add `test/sample-workflows/docker-login.yml`
- [x] Add `test/sample-workflows/docker-build-push.yml`
- [ ] Add regression test cases for:
- [ ] missing `node`
- [ ] broken Docker socket access