#!/usr/bin/env bash # ───────────────────────────────────────────────────────────────────────────── # MesRelevés — Script de construction d'une archive de release # # Usage : bin/build-release.sh # # Prérequis : node/npm (pour les assets), rsync, tar # Produit : mesreleves-X.Y.Z.tar.gz + mesreleves-X.Y.Z.tar.gz.sha256 # ───────────────────────────────────────────────────────────────────────────── set -euo pipefail # Se positionner à la racine du projet cd "$(git rev-parse --show-toplevel)" VERSION=$(cat VERSION | tr -d '[:space:]') ARCHIVE="mesreleves-${VERSION}.tar.gz" echo "──────────────────────────────────────────────" echo " MesRelevés — Build de la release v${VERSION}" echo "──────────────────────────────────────────────" # ── 1. Vérifications ────────────────────────────────────────────────────────── if git diff --quiet HEAD 2>/dev/null && git diff --cached --quiet 2>/dev/null; then : else echo "AVERTISSEMENT : des modifications non commitées seront incluses." fi # ── 2. Build des assets frontend ───────────────────────────────────────────── echo "→ Build des assets frontend (npm run build)..." npm run build --silent # ── 3. Copie dans un répertoire temporaire (sans vendor, sans fichiers dev) ── TMPDIR=$(mktemp -d) BUILDDIR="${TMPDIR}/mesreleves-${VERSION}" trap 'rm -rf "${TMPDIR}"' EXIT echo "→ Copie des fichiers dans ${BUILDDIR}..." rsync -a \ --exclude='.git/' \ --exclude='.env' \ --exclude='node_modules/' \ --exclude='vendor/' \ --exclude='storage/logs/' \ --exclude='storage/framework/cache/' \ --exclude='storage/framework/sessions/' \ --exclude='storage/framework/views/' \ --exclude='tests/' \ --exclude='phpunit.xml' \ --exclude='.editorconfig' \ --exclude='.gitattributes' \ --exclude='.gitignore' \ --exclude='*.tar.gz' \ --exclude='*.sha256' \ --exclude='.phpunit.result.cache' \ . "${BUILDDIR}/" # ── 4. Création de l'archive ───────────────────────────────────────────────── echo "→ Création de l'archive ${ARCHIVE}..." tar -czf "${ARCHIVE}" -C "${TMPDIR}" "mesreleves-${VERSION}/" # ── 5. Somme de contrôle SHA-256 ───────────────────────────────────────────── sha256sum "${ARCHIVE}" > "${ARCHIVE}.sha256" CHECKSUM=$(awk '{print $1}' "${ARCHIVE}.sha256") # ── Résumé ──────────────────────────────────────────────────────────────────── SIZE=$(du -sh "${ARCHIVE}" | cut -f1) echo "" echo "✓ Archive créée : ${ARCHIVE} (${SIZE})" echo " SHA-256 : ${CHECKSUM}" echo "" echo "Prochaines étapes :" echo " 1. git tag v${VERSION} && git push origin v${VERSION}" echo " 2. Créer une release sur Gitea (tag v${VERSION})" echo " 3. Joindre ${ARCHIVE} et ${ARCHIVE}.sha256 à la release"