Actualiser Scripts
97
Scripts.md
97
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 :
|
||||
|
||||
Reference in New Issue
Block a user