From 63648d9d16b24fd5c4f73022ebca3a928496d2c4 Mon Sep 17 00:00:00 2001 From: Alban Dumerain Date: Wed, 21 Jan 2026 14:06:04 +0100 Subject: [PATCH] Actualiser Scripts --- Scripts.md | 97 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 26 deletions(-) diff --git a/Scripts.md b/Scripts.md index 9e536a2..ac121f1 100644 --- a/Scripts.md +++ b/Scripts.md @@ -2,80 +2,125 @@ ``` #!/bin/zsh +# Script de release Linux pour Paycheck +# Objectif : +# - Garantir que le build est fait EXACTEMENT depuis un tag vX.Y.Z +# - Construire le frontend +# - Builder l’application Wails +# - Renommer proprement le binaire +# - Générer une archive ZIP prête pour la release Gitea + set -euo pipefail +# -e : stoppe le script à la première erreur +# -u : erreur si variable non définie +# -o pipefail : erreur si une commande dans un pipe échoue -# Paycheck release helper (Linux) -# - Requires: git, node/npm, wails, zip -# - Enforces: exact tag checkout (vX.Y.Z) +APP="paycheck" # Nom de l’application / binaire +ARCH="amd64" # Architecture cible +PLATFORM="linux" # Plateforme cible -APP="paycheck" -ARCH="amd64" -PLATFORM="linux" +echo "== Paycheck - Release Linux ==" -echo "== Paycheck Linux release ==" - -# Ensure we're in repo root (contains wails.json) +# Vérification que l’on est bien à la racine du dépôt +# (wails.json est un bon marqueur) if [[ ! -f "wails.json" ]]; then - echo "ERROR: wails.json not found. Run this script from the repo root." + echo "ERREUR : wails.json introuvable." + echo "Lance ce script depuis la racine du dépôt Git." exit 1 fi -# Ensure clean working tree +# Vérification que le dépôt Git est propre +# On refuse toute release avec des fichiers modifiés non commités if [[ -n "$(git status --porcelain)" ]]; then - echo "ERROR: Working tree is not clean. Commit/stash changes before releasing." + echo "ERREUR : le dépôt Git n'est pas propre." + echo "Commit ou stash tes modifications avant de lancer une release." git status --porcelain exit 1 fi -# Ensure we are exactly on a tag vX.Y.Z +# Vérification que l’on est EXACTEMENT sur un tag +# --exact-match échoue si HEAD n’est pas pointé par un tag TAG="$(git describe --tags --exact-match 2>/dev/null || true)" + if [[ -z "$TAG" ]]; then - echo "ERROR: You are not on an exact tag." - echo "Hint: git fetch --tags && git checkout vX.Y.Z" + echo "ERREUR : tu n'es pas positionné sur un tag." + echo "Astuce : git fetch --tags && git checkout vX.Y.Z" exit 1 fi + +# Vérification du format du tag (SemVer strict) +# Ex: v1.0.0 if [[ ! "$TAG" =~ '^v[0-9]+\.[0-9]+\.[0-9]+$' ]]; then - echo "ERROR: Tag '$TAG' does not match SemVer format vX.Y.Z" + echo "ERREUR : le tag '$TAG' ne respecte pas le format vX.Y.Z" exit 1 fi -echo "Tag: $TAG" -echo "Commit: $(git rev-parse HEAD)" +echo "Tag détecté : $TAG" +echo "Commit utilisé : $(git rev-parse HEAD)" + +# ========================= +# Build du frontend +# ========================= +echo "== Build frontend ==" -# Frontend install/build (clean, reproducible) -echo "== Frontend ==" pushd frontend >/dev/null + +# Utilisation de npm ci si possible (build reproductible) if [[ -f package-lock.json ]]; then npm ci else npm install fi + +# Build Vite / frontend npm run build + popd >/dev/null -# Build -echo "== Wails build ==" +# ========================= +# Build Wails +# ========================= +echo "== Build Wails ==" + +# Nettoyage des anciens binaires rm -rf build/bin || true + +# Build Linux wails build OUTDIR="build/bin" SRC="$OUTDIR/$APP" + +# Vérification que le binaire a bien été généré if [[ ! -f "$SRC" ]]; then - echo "ERROR: Expected binary not found at $SRC" - echo "Contents of $OUTDIR:" + echo "ERREUR : binaire attendu introuvable : $SRC" + echo "Contenu actuel de $OUTDIR :" ls -la "$OUTDIR" || true exit 1 fi +# Nom final standardisé du binaire +# Exemple : paycheck-v1.0.1-linux-amd64 FINAL="${APP}-${TAG}-${PLATFORM}-${ARCH}" + +# Copie du binaire sous son nom final cp -f "$SRC" "$OUTDIR/$FINAL" -echo "== Package ==" +# ========================= +# Création de l’archive ZIP +# ========================= +echo "== Création de l'archive ZIP ==" + pushd "$OUTDIR" >/dev/null + +# -9 : compression maximale zip -9 "${FINAL}.zip" "$FINAL" + popd >/dev/null -echo "OK: $OUTDIR/${FINAL}.zip" +echo "Release Linux terminée avec succès." +echo "Artefact prêt : $OUTDIR/${FINAL}.zip" + ``` Rendre le script executable :