#!/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"