2026-10-01 16:04:37 +02:00

92 lines
2.5 KiB
Bash

#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
CONFIG_DIR="$PROJECT_DIR/config"
CONFIG_FILE="$PROJECT_DIR/config.json"
ENV_FILE="$PROJECT_DIR/.env"
BUILD_DIR="$PROJECT_DIR/build"
ICON_FILE="$PROJECT_DIR/data/assets/icon.png"
if [ -f "$ENV_FILE" ]; then
set -a
# shellcheck disable=SC1090
. "$ENV_FILE"
set +a
fi
SYSTEM_PYTHON="${PYTHON_PATH:-python3}"
if ! command -v "$SYSTEM_PYTHON" >/dev/null 2>&1; then
echo "[ERROR] Python introuvable : $SYSTEM_PYTHON" >&2
exit 1
fi
if ! command -v zip >/dev/null 2>&1; then
echo "[ERROR] La commande zip est requise pour creer l'archive." >&2
exit 1
fi
APP_NAME="$("$SYSTEM_PYTHON" -c "import json; print(json.load(open(r'$CONFIG_FILE', encoding='utf-8'))['app_name'])")"
ARCHITECTURE="$("$SYSTEM_PYTHON" -c "import json; print(json.load(open(r'$CONFIG_FILE', encoding='utf-8'))['architecture'])")"
OS_NAME="$(uname -s)"
case "$OS_NAME" in
Darwin)
ENV_NAME="MACenv_${ARCHITECTURE}"
APP_FILE="$APP_NAME.app"
;;
Linux)
ENV_NAME="LINenv_${ARCHITECTURE}"
APP_FILE="$APP_NAME"
;;
*)
echo "[ERROR] Systeme non supporte : $OS_NAME" >&2
exit 1
;;
esac
ENV_PATH="$CONFIG_DIR/$ENV_NAME"
PYTHON_IN_VENV="$ENV_PATH/bin/python"
ZIP_FILE="$BUILD_DIR/${APP_NAME}-${OS_NAME}.zip"
if [ ! -x "$PYTHON_IN_VENV" ]; then
echo "[INFO] Creation de l'environnement $ENV_NAME..."
"$SYSTEM_PYTHON" -m venv "$ENV_PATH"
"$PYTHON_IN_VENV" -m pip install --upgrade pip
"$PYTHON_IN_VENV" -m pip install -r "$CONFIG_DIR/requirements.txt"
else
echo "[INFO] Environnement $ENV_NAME trouve."
fi
mkdir -p "$BUILD_DIR"
cd "$PROJECT_DIR"
"$PYTHON_IN_VENV" -m PyInstaller \
--distpath "$BUILD_DIR" \
--workpath "$BUILD_DIR/dist" \
--clean \
"$CONFIG_DIR/BUILD.spec"
rm -rf "$BUILD_DIR/dist"
if [ ! -e "$BUILD_DIR/$APP_FILE" ]; then
echo "[ERROR] Artefact attendu introuvable : $BUILD_DIR/$APP_FILE" >&2
exit 1
fi
TEMP_ZIP_DIR="$BUILD_DIR/temp_zip"
rm -rf "$TEMP_ZIP_DIR"
mkdir -p "$TEMP_ZIP_DIR"
mv "$BUILD_DIR/$APP_FILE" "$TEMP_ZIP_DIR/"
cp "$CONFIG_FILE" "$TEMP_ZIP_DIR/"
cp "$ICON_FILE" "$TEMP_ZIP_DIR/"
cp -R "$PROJECT_DIR/data/lang" "$TEMP_ZIP_DIR/lang"
if [ "$OS_NAME" = "Linux" ] && [ -f "$BUILD_DIR/$APP_NAME.desktop" ]; then
cp "$BUILD_DIR/$APP_NAME.desktop" "$TEMP_ZIP_DIR/"
fi
rm -f "$ZIP_FILE"
(cd "$BUILD_DIR" && zip -r "$ZIP_FILE" "temp_zip" >/dev/null)
rm -rf "$TEMP_ZIP_DIR"
echo "[INFO] Archive creee : $ZIP_FILE"