diff options
Diffstat (limited to 'deploy-docker.sh')
| -rwxr-xr-x | deploy-docker.sh | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/deploy-docker.sh b/deploy-docker.sh new file mode 100755 index 0000000..0c4c3b7 --- /dev/null +++ b/deploy-docker.sh @@ -0,0 +1,62 @@ +#!/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 <sha> +# Quarto runs inside the official quarto/quarto container; rsync ships +# public/ to nandi (jayrup.me). +# +# Usage: deploy-docker.sh <build-dir> <short-sha> +set -euo pipefail + +BUILD_DIR="${1:?usage: deploy-docker.sh <build-dir> <short-sha>}" +SHORT_SHA="${2:?missing short sha}" +cd "$BUILD_DIR" + +QUARTO_IMAGE="${QUARTO_IMAGE:-quarto/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)" |
