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>
This commit is contained in:
parent
9d8a7fe237
commit
47b1de93db
12 changed files with 17 additions and 5 deletions
90
bin/job-prepare.sh
Normal file
90
bin/job-prepare.sh
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
#!/usr/bin/env bash
|
||||
# job-prepare.sh — zet een per-job working tree op
|
||||
#
|
||||
# Usage: job-prepare.sh <job_id> <repo_url>
|
||||
#
|
||||
# Strategie:
|
||||
# 1. Bare cache van de repo onderhouden in $AGENT_REPO_CACHE/<slug>.git
|
||||
# 2. Vers fetchen voor we clonen (laatste main-state)
|
||||
# 3. `git clone --reference --dissociate` zodat objects gedeeld worden
|
||||
# (snelle clone, schone working tree)
|
||||
# 4. `npm install` met cache-share via $NPM_CONFIG_CACHE
|
||||
#
|
||||
# Output (laatste regel): pad van de working tree, voor `cd`-gebruik.
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
source /opt/agent/bin/_lib.sh
|
||||
|
||||
: "${AGENT_REPO_CACHE:=/var/cache/repos}"
|
||||
: "${AGENT_JOB_ROOT:=/tmp}"
|
||||
: "${AGENT_LOG_DIR:=/var/log/agent}"
|
||||
|
||||
JOB_ID="${1:-}"
|
||||
REPO_URL="${2:-}"
|
||||
|
||||
if [[ -z "$JOB_ID" || -z "$REPO_URL" ]]; then
|
||||
log "usage: $0 <job_id> <repo_url>"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Slug uit repo_url voor de cache-naam: "github.com/foo/bar.git" → "foo_bar"
|
||||
SLUG=$(echo "$REPO_URL" \
|
||||
| sed -E 's#^.*[:/]([^/]+/[^/]+?)(\.git)?/?$#\1#' \
|
||||
| tr '/' '_')
|
||||
|
||||
CACHE_DIR="${AGENT_REPO_CACHE}/${SLUG}.git"
|
||||
WORK_DIR="${AGENT_JOB_ROOT}/job-${JOB_ID}"
|
||||
JOB_LOG="${AGENT_LOG_DIR}/jobs/${JOB_ID}.log"
|
||||
|
||||
mkdir -p "$(dirname "$JOB_LOG")"
|
||||
|
||||
{
|
||||
log "preparing job ${JOB_ID} from ${REPO_URL}"
|
||||
log "cache=${CACHE_DIR} work=${WORK_DIR}"
|
||||
|
||||
# ----- 1. ensure bare cache ------------------------------------
|
||||
if [[ ! -d "$CACHE_DIR" ]]; then
|
||||
log "cache miss — bare-cloning ${REPO_URL}"
|
||||
git clone --bare --filter=blob:none "$REPO_URL" "$CACHE_DIR"
|
||||
else
|
||||
log "cache hit — fetching latest"
|
||||
git -C "$CACHE_DIR" fetch --all --prune --quiet
|
||||
fi
|
||||
|
||||
# ----- 2. fresh working tree -----------------------------------
|
||||
if [[ -d "$WORK_DIR" ]]; then
|
||||
log "stale work dir found — removing"
|
||||
rm -rf "$WORK_DIR"
|
||||
fi
|
||||
|
||||
log "cloning via reference"
|
||||
git clone \
|
||||
--reference "$CACHE_DIR" \
|
||||
--dissociate \
|
||||
--quiet \
|
||||
"$REPO_URL" "$WORK_DIR"
|
||||
|
||||
# ----- 3. branch -----------------------------------------------
|
||||
BRANCH="agent/job-${JOB_ID}"
|
||||
git -C "$WORK_DIR" checkout -B "$BRANCH"
|
||||
log "checked out ${BRANCH} from $(git -C "$WORK_DIR" rev-parse --short HEAD)"
|
||||
|
||||
# ----- 4. install deps -----------------------------------------
|
||||
if [[ -f "$WORK_DIR/package-lock.json" ]]; then
|
||||
log "running npm ci (cache=${NPM_CONFIG_CACHE})"
|
||||
( cd "$WORK_DIR" && npm ci --no-audit --no-fund --prefer-offline ) \
|
||||
|| log "WARN: npm ci failed (continuing — agent kan zelf decide)"
|
||||
elif [[ -f "$WORK_DIR/package.json" ]]; then
|
||||
log "no lockfile — running npm install"
|
||||
( cd "$WORK_DIR" && npm install --no-audit --no-fund --prefer-offline ) \
|
||||
|| log "WARN: npm install failed"
|
||||
else
|
||||
log "no package.json — skipping install"
|
||||
fi
|
||||
|
||||
log "ready: ${WORK_DIR}"
|
||||
} >> "$JOB_LOG" 2>&1
|
||||
|
||||
# Output naar stdout zodat Claude het pad kan parsen.
|
||||
echo "$WORK_DIR"
|
||||
Loading…
Add table
Add a link
Reference in a new issue