Actualiser Scripts

2026-01-21 14:06:04 +01:00
parent a260ddf24b
commit 63648d9d16

@@ -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 lapplication 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 lapplication / 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 lon 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 lon est EXACTEMENT sur un tag
# --exact-match échoue si HEAD nest 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 larchive 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 :