feat(flows): redeploy_all flow + fix MCP-worker cache-bust

Legt de volledige stack-redeploy vast als één flow: scrum4me-web
(pull/migrate/build/restart) gevolgd door de MCP-worker.

Onderweg een echte bug gevonden en gefixt: update_mcp_worker.yml deed
`docker_compose_build worker-idea` zónder cache-bust. De worker-idea
Dockerfile clonet scrum4me-mcp van GitHub in een aparte laag; zolang
MCP_GIT_REF gelijk blijft ('main') hergebruikt Docker die laag, dus
nieuwe MCP-commits werden NIET opgepikt. Een schijnbaar geslaagde
rebuild draaide stilletjes op oude MCP-code.

Wijzigingen:
- commands.yml.example: nieuw command docker_compose_build_worker_fresh
  dat via `sh -c` MCP_CACHE_BUST=$(date +%s) meegeeft — invalideert de
  clone-laag zodat de laatste MCP-code wordt gepulld
- update_mcp_worker.yml: gebruikt nu de fresh-build; pullt ook
  scrum4me-mcp lokaal (on_failure: continue, sync-only)
- redeploy_all.yml: nieuwe gecombineerde flow (16 stappen, web → worker)
- app/flows/redeploy-all/: UI-pagina + panel, zelfde patroon als de
  bestaande flow-pagina's
- app/flows/page.tsx: Redeploy All bovenaan de flows-lijst

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-05-14 12:05:39 +02:00
parent e0c2536a8c
commit 68c4d037cf
6 changed files with 285 additions and 9 deletions

View file

@ -0,0 +1,86 @@
# Volledige redeploy van de Scrum4Me-stack — alle drie de repos in één flow.
# Copy to /etc/ops-agent/flows/redeploy_all.yml on the host.
#
# Dit is de gecombineerde werkwijze: eerst de hoofd-app (scrum4me-web),
# dan de worker (scrum4me-docker image met verse scrum4me-mcp clone).
# Equivalent aan update_scrum4me_web.yml gevolgd door update_mcp_worker.yml,
# maar als één atomaire flow met audit-trail.
#
# Volgorde-redenering:
# - Web eerst: de DB-migratie (stap 6) is additief en niet-breaking, dus
# veilig terwijl de oude worker nog draait.
# - Worker daarna: de nieuwe MCP-code kan afhankelijk zijn van de nieuwe
# DB-kolommen/enums uit de web-migratie.
#
# Steps:
# 1-9. scrum4me-web: status, fetch, log-ahead, pull, npm ci, migrate,
# build, restart service, smoke-test
# 10-16. worker: status + fetch + pull scrum4me-docker, pull scrum4me-mcp,
# cache-busted image rebuild, container recreate, health-wait
#
# Let op: de worker-rebuild MOET docker_compose_build_worker_fresh gebruiken,
# niet docker_compose_build — anders blijft de scrum4me-mcp clone-laag
# gecached en wordt nieuwe MCP-code gemist.
name: Redeploy All
description: Volledige stack-redeploy — scrum4me-web (pull/migrate/build/restart) gevolgd door de MCP-worker (cache-busted image rebuild)
steps:
# --- scrum4me-web -------------------------------------------------------
- command_key: git_status
args: ["/srv/scrum4me/repos/Scrum4Me"]
on_failure: continue
- command_key: git_fetch
args: ["/srv/scrum4me/repos/Scrum4Me"]
on_failure: abort
- command_key: git_log_ahead
args: ["/srv/scrum4me/repos/Scrum4Me"]
on_failure: continue
- command_key: git_pull
args: ["/srv/scrum4me/repos/Scrum4Me"]
on_failure: abort
- command_key: npm_ci
on_failure: abort
- command_key: prisma_migrate_deploy
on_failure: abort
- command_key: npm_run_build
on_failure: abort
- command_key: systemctl_restart
args: ["scrum4me-web"]
on_failure: abort
- command_key: curl_smoke_scrum4me_thuis
on_failure: continue
# --- MCP-worker ---------------------------------------------------------
- command_key: git_status
args: ["/srv/scrum4me/repos/scrum4me-docker"]
on_failure: continue
- command_key: git_fetch
args: ["/srv/scrum4me/repos/scrum4me-docker"]
on_failure: abort
- command_key: git_pull
args: ["/srv/scrum4me/repos/scrum4me-docker"]
on_failure: abort
- command_key: git_pull
args: ["/srv/scrum4me/repos/scrum4me-mcp"]
on_failure: continue
- command_key: docker_compose_build_worker_fresh
on_failure: abort
- command_key: docker_compose_up_recreate
args: ["worker-idea"]
on_failure: abort
- command_key: wait_for_health_worker
on_failure: continue