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
40 lines
1.6 KiB
Bash
Executable file
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"
|