92 lines
2.5 KiB
Bash
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" |