f014d5534a
Central runner on ana-docker (gitea is local; existing fleet tooling already SSHes from there). Playbook is parameterized so future site-local runners (nh3-docker, esh-docker-vm) drop in via --var overrides instead of copy-paste. Includes a workflow template for vh/task-board that calls the existing deploy-task-board.yaml playbook — keeps the playbook as the single source of truth for "how task-board is deployed", manual or automated. Labels embed `:docker://node:20-bookworm-slim` schema; without it, act_runner v0.6+ silently falls back to host-mode and runs job steps inside the Alpine runner container (no apt/python/node), breaking any real workflow. node:20-bookworm-slim is small + has git + node so actions/checkout works out of the box.
68 lines
2.3 KiB
Markdown
68 lines
2.3 KiB
Markdown
# task-board
|
|
|
|
MCP + web dashboard that shows what the assistant is working on. Green
|
|
(active) / Red (waiting) / Grey (dormant) cards with comment streams.
|
|
|
|
**Server:** ana-docker
|
|
**Port:** 7878 (configurable via `.env`)
|
|
**Upstream repo:** [vh/task-board](https://gitea.phasefinal.com/vh/task-board)
|
|
**Image:** `task-board:local` — built on the host from the git repo by
|
|
the deploy playbook. Not pulled from a registry.
|
|
|
|
## Deploy
|
|
|
|
Two paths — automated (preferred) and manual (escape hatch / first-time).
|
|
|
|
### Automated (Gitea Actions, push-to-main)
|
|
|
|
Once the central gitea-runner is up (see `stacks/gitea-runner/README.md`),
|
|
every push to `main` on `vh/task-board` triggers a deploy. The workflow
|
|
just calls the same elway playbook below; the playbook stays the
|
|
single source of truth for "how task-board is deployed."
|
|
|
|
Workflow template lives next to this README at
|
|
[`gitea-workflow-deploy.yaml.example`](gitea-workflow-deploy.yaml.example);
|
|
copy it into the task-board repo at `.gitea/workflows/deploy.yaml`.
|
|
The example header lists the two repo secrets required
|
|
(`DEPLOY_SSH_KEY`, `MGMT_REPO_TOKEN`).
|
|
|
|
### Manual (elway from a workstation)
|
|
|
|
The playbook owns the full flow: clone/update the source repo,
|
|
`docker build`, install compose + seed .env, bring up, verify health.
|
|
|
|
```bash
|
|
# First deploy (or update to latest main)
|
|
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml
|
|
|
|
# Pin to a specific ref (tag, branch, or commit SHA)
|
|
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml --var ref=v0.1.0
|
|
```
|
|
|
|
## Wiring into Claude Code
|
|
|
|
After deploy, add to `~/.claude/settings.json` (user-level) or `.mcp.json`
|
|
(project-level):
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"task-board": {
|
|
"type": "http",
|
|
"url": "http://10.250.50.70:7878/mcp"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Assistant gains four tools (`task_start`, `task_update`, `task_wait`,
|
|
`task_complete`). Web UI at `http://10.250.50.70:7878/`.
|
|
|
|
## Path layout (on ana-docker)
|
|
|
|
| Host path | Container path | Purpose | Restic? |
|
|
|---|---|---|---|
|
|
| `/opt/docker/build/task-board/` | — | git checkout used as docker build context | excluded |
|
|
| `/opt/docker/compose/task-board/` | — | compose.yaml + .env | included (via `/opt/docker`) |
|
|
| `/opt/docker/conf/task-board/data/` | `/app/data` | SQLite (`tasks.db`) | **included** |
|