#!/usr/bin/env bash # ============================================================================= # verifier-depot.sh — Contrôle avant push # ----------------------------------------------------------------------------- # Vérifie que tous les fichiers nécessaires au build Docker sont bien suivis # par Git. Les fichiers cachés (.dockerignore, .well-known/) sont ceux qui # disparaissent le plus facilement lors d'une copie manuelle ou d'une # décompression. # # Usage : bash verifier-depot.sh # ============================================================================= set -u REQUIS=( # --- Build --- "Dockerfile" ".dockerignore" "deploy/nginx.conf" # --- Site --- "index.html" "favicon.svg" "favicon.ico" "robots.txt" "sitemap.xml" "llms.txt" "humans.txt" "site.webmanifest" ".well-known/security.txt" # --- Styles --- "assets/css/tokens.css" "assets/css/base.css" "assets/css/layout.css" "assets/css/components.css" "assets/css/utilities.css" "assets/css/print.css" # --- Scripts --- "assets/js/main.js" "assets/js/modules/navigation.js" "assets/js/modules/scroll-spy.js" "assets/js/modules/back-to-top.js" "assets/js/modules/copy-email.js" # --- Images --- "assets/img/og-image.png" "assets/img/apple-touch-icon.png" "assets/img/icon-192.png" "assets/img/icon-512.png" "assets/img/icon-maskable-512.png" "assets/img/safari-pinned-tab.svg" "assets/img/favicon-16x16.png" "assets/img/favicon-32x32.png" "assets/img/favicon-48x48.png" ) echo "== Fichiers suivis par Git ==" manquants=0 for f in "${REQUIS[@]}"; do if git ls-files --error-unmatch "$f" >/dev/null 2>&1; then printf " OK %s\n" "$f" else printf " MANQUANT %s\n" "$f" manquants=$((manquants + 1)) fi done echo echo "== Pièges connus ==" # Le Dockerfile ne doit jamais être exclu : BuildKit applique .dockerignore # AVANT de lire le Dockerfile, contrairement au builder classique. if grep -qE '^[[:space:]]*(Dockerfile|\.dockerignore)[[:space:]]*$' .dockerignore 2>/dev/null; then echo " ERREUR .dockerignore exclut Dockerfile ou .dockerignore" echo " -> le build echouera avec « transferring dockerfile: 2B »" manquants=$((manquants + 1)) else echo " OK .dockerignore n'exclut pas le Dockerfile" fi # deploy/ doit rester dans le contexte : le COPY du Dockerfile en depend. if grep -qE '^[[:space:]]*deploy' .dockerignore 2>/dev/null; then echo " ERREUR .dockerignore exclut deploy/" echo " -> COPY deploy/nginx.conf echouera" manquants=$((manquants + 1)) else echo " OK deploy/ reste dans le contexte de build" fi echo if [ "$manquants" -eq 0 ]; then echo "Tout est en ordre. Le push peut etre effectue." exit 0 else echo "$manquants probleme(s). Corriger avant de pousser :" echo " git add -A && git commit -m 'Ajout des fichiers manquants' && git push" exit 1 fi