summaryrefslogtreecommitdiff
path: root/deploy-docker.sh
diff options
context:
space:
mode:
authorVoid Agent <void@jayrup.hermes>2026-07-31 16:40:20 +0100
committerVoid Agent <void@jayrup.hermes>2026-07-31 16:40:20 +0100
commit14db9e8770ee592c20332eefc0ac9e6a3c59deff (patch)
treef819767ecd2dee6b0ca07c104d3899868b926325 /deploy-docker.sh
parent511e2cb82ff92056ffcdaa840046a1702c93b128 (diff)
add dockerized deploy script + post-receive hook for push-to-deploy
Diffstat (limited to 'deploy-docker.sh')
-rwxr-xr-xdeploy-docker.sh62
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)"