scrum4me-docker/bin/_lib.sh
janpeter visser 47b1de93db fix: lokale Docker build werkend krijgen
Drie fixes om de container lokaal (en op de NAS) te kunnen builden en draaien:

- Dockerfile: clone scrum4me-mcp zonder --recurse-submodules. De Prisma-
  schema zit al gecommit in het scrum4me-mcp repo; de vendor/scrum4me
  submodule is alleen nodig voor schema-updates en wijst naar een
  privaat repo dat tijdens docker build niet bereikbaar is.

- Dockerfile: voeg /usr/sbin en /sbin toe aan PATH zodat gosu (in
  /usr/sbin/gosu na apt-install) gevonden wordt door entrypoint.sh.
  Zonder dit faalt de container in een restart loop.

- Verplaats alle runner scripts naar bin/ en maak etc/ aan, zodat
  COPY bin/ en COPY etc/ in de Dockerfile bestanden vinden.

Verder:
- .gitattributes om CRLF-corruptie van shell scripts op Windows te
  voorkomen (core.autocrlf=true is default actief).
- .gitignore: docker-compose.override.yml uitsluiten zodat lokale
  dev-overrides niet worden gecommit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-02 19:18:35 +02:00

36 lines
1 KiB
Bash

#!/usr/bin/env bash
# _lib.sh — gedeelde helpers; source vanuit andere scripts
: "${AGENT_STATE_DIR:=/var/run/agent}"
: "${AGENT_LOG_DIR:=/var/log/agent}"
log() {
printf '[%s] [%s] %s\n' \
"$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
"${0##*/}" \
"$*" >&2
}
# Schrijf JSON-state atomisch (write tmp + rename).
# Argument: JSON-string. Voegt automatisch $.heartbeatAt = now toe.
write_state() {
local payload="$1"
local tmp="${AGENT_STATE_DIR}/state.json.tmp.$$"
local final="${AGENT_STATE_DIR}/state.json"
# Merge $payload met heartbeatAt; behoud andere bestaande keys door
# de bestaande state in te lezen en payload daarover te leggen.
local existing='{}'
if [[ -f "$final" ]]; then
existing=$(cat "$final" 2>/dev/null || echo '{}')
fi
jq -n \
--argjson existing "$existing" \
--argjson payload "$payload" \
--arg now "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
'$existing + $payload + {heartbeatAt: $now}' \
> "$tmp"
mv "$tmp" "$final"
}