alpinux.presentations/scripts/deploy-presentations.sh
Cédrix 02cf82447b Créer le site des présentations d'Alpinux
Un dossier par présentation en Markdown, converti en diaporama HTML autonome
par Marp CLI, et une page d'accueil générée qui les liste toutes.

- scripts/build.mjs : build strict (fiche validée, images vérifiées, aucune
  ressource externe hormis le logo), page d'accueil filtrable,
  presentations.json et .htaccess pour l'en-tête CORS
- theme/alpinux.css : thème commun pour la vidéoprojection, classes titre et demo
- slides/_modele : modèle commenté, non publié
- slides/pdf-signer : « Lire, remplir et signer ses PDF », avec notes d'orateur
- scripts/deploy-presentations.sh et deploy/ : déploiement par webhook Gitea,
  sur le modèle du wiki et de www

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M713yNBL8cssBA1Zri5QLT
2026-10-10 21:44:32 +02:00

40 lines
1.6 KiB
Bash
Executable file

#!/bin/bash
# Met en ligne presentations.alpinux.org depuis le dépôt alpinux-presentations.
# Appelé par le service webhook après chaque push sur main, ou à la main en secours.
# Calqué sur deploy-wiki.sh : le serveur exécute sa copie, posée par deploy/installer.sh.
set -e
REPO_DIR="/opt/presentations-alpinux/repo"
STAGING="/opt/presentations-alpinux/staging"
TARGET="/var/www/clients/client1/web22/web"
NODE_BIN="/opt/presentations-alpinux/node/bin"
LOG="/var/log/presentations-deploy.log"
export PATH="$NODE_BIN:$PATH"
# Deux push rapprochés : le second déploiement attend la fin du premier au lieu de
# construire dans le même staging.
exec 9> "/tmp/presentations-deploy.lock"
flock 9
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Deploy started" >> "$LOG"
trap 'echo "[$(date "+%Y-%m-%d %H:%M:%S")] ABANDON : le site en ligne est inchangé" >> "$LOG"' ERR
cd "$REPO_DIR"
git pull origin main >> "$LOG" 2>&1
# --ignore-scripts : aucune dépendance n'a besoin d'exécuter du code à l'installation,
# et aucune n'en a donc le droit.
npm ci --ignore-scripts --no-audit --no-fund >> "$LOG" 2>&1
# Build dans un répertoire de staging : le site en ligne reste intact si le build
# échoue (front matter invalide, image manquante, ressource externe).
node scripts/build.mjs "$STAGING" >> "$LOG" 2>&1
# Bascule vers le DocumentRoot une fois le build valide. Les deux dossiers exclus
# appartiennent à ISPConfig (pages d'erreur, statistiques) : --delete les épargne.
rsync -rltD --no-perms --omit-dir-times --delete \
--exclude=/error/ --exclude=/stats/ \
"$STAGING/" "$TARGET/" >> "$LOG" 2>&1
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Deploy done" >> "$LOG"