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>
36 lines
1 KiB
Bash
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"
|
|
}
|