#!/usr/bin/env bash # deploy-docker.sh — build + deploy jayrup.me. Versioned in the repo so the # post-receive hook always uses the deploy logic that matches the pushed tree. # # Designed to run ON MERU (docker-only machine) from a git archive snapshot: # git archive HEAD | tar -x -C /tmp/build && bash /tmp/build/deploy-docker.sh /tmp/build # Quarto runs inside the official quarto/quarto container; rsync ships # public/ to nandi (jayrup.me). # # Usage: deploy-docker.sh set -euo pipefail BUILD_DIR="${1:?usage: deploy-docker.sh }" SHORT_SHA="${2:?missing short sha}" cd "$BUILD_DIR" QUARTO_IMAGE="${QUARTO_IMAGE:-devxygmbh/alpine-quarto:latest}" # Fallback if meru can't reach jayrup.me (IPv6): DEPLOY_HOST=jayrup@100.94.131.98 DEPLOY_HOST="${DEPLOY_HOST:-jayrup.me}" RUN_UID="$(id -u)" RUN_GID="$(id -g)" # Render script runs INSIDE the container (one container spin, both passes). # HOME=/tmp so quarto's cache is writable by the unprivileged uid. cat > /tmp/homepage-render.sh <<'RENDER_EOF' #!/usr/bin/env bash set -euo pipefail cd /site rm -rf public quarto render --to html find . -name "*.qmd" -not -path "./.*" -not -path "./public/*" | while read -r file; do rel_dir=$(dirname "${file#./}") base_name=$(basename "$file" .qmd) quarto render "$file" --to plain --output "${base_name}.txt" --output-dir "public/$rel_dir" done RENDER_EOF chmod +x /tmp/homepage-render.sh echo ">> rendering with $QUARTO_IMAGE (commit $SHORT_SHA)" # --entrypoint /bin/bash overrides whatever entrypoint the image declares docker run --rm \ --entrypoint /bin/bash \ -u "$RUN_UID:$RUN_GID" \ -e HOME=/tmp \ -v "$BUILD_DIR":/site \ -v /tmp/homepage-render.sh:/render.sh:ro \ -w /site \ "$QUARTO_IMAGE" /render.sh # Static assets bundled in the repo mkdir -p public/cv cp cv/index.pdf public/cv.pdf cp cv/index.txt public/cv.txt cp assets/dissertation.pdf public/dissertation.pdf cp assets/public_key public/public_key # Deploy status marker — site-visible proof of the last successful deploy printf 'deployed %s commit %s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$SHORT_SHA" > public/last-deploy.txt echo ">> pushing to $DEPLOY_HOST" rsync -avz --delete public/ "$DEPLOY_HOST":~/homepage/public/ echo ">> deploy OK ($SHORT_SHA)"