#!/usr/bin/env bash # Нативная сборка одного исполняемого файла для Debian x86_64. set -euo pipefail project_root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" venv_dir="$project_root/.venv-linux" build_dir="$project_root/build-linux" dist_dir="$project_root/dist-linux" artifact_name="plate_config_app-linux-x86_64" archive_name="plate_config_app-linux-x86_64.zip" cd "$project_root" rm -rf "$build_dir" "$dist_dir" python3 -m venv "$venv_dir" "$venv_dir/bin/python" -m pip install --upgrade pip "$venv_dir/bin/python" -m pip install -r requirements.txt -r requirements-build.txt "$venv_dir/bin/python" -m unittest discover -s tests -v "$venv_dir/bin/python" -m PyInstaller \ --noconfirm \ --clean \ --workpath "$build_dir" \ --distpath "$dist_dir" \ plate_config_app.spec install -m 0755 "$dist_dir/plate_config_app" "$dist_dir/$artifact_name" rm -f "$dist_dir/plate_config_app" for resource_dir in light_modes input_mappings commands; do cp -a "$resource_dir" "$dist_dir/$resource_dir" done cat > "$dist_dir/README.txt" <<'EOF' Plate Config App для Debian 13 x86_64 Запуск: ./plate_config_app-linux-x86_64 Папки light_modes, input_mappings и commands можно изменять без пересборки. Для доступа к USB-COM добавьте пользователя в группу dialout и войдите в систему заново: sudo usermod -aG dialout "$USER" EOF ( cd "$dist_dir" "$venv_dir/bin/python" -m zipfile -c \ "$archive_name" \ "$artifact_name" \ light_modes \ input_mappings \ commands \ README.txt ) printf 'Готово: %s\n' "$dist_dir/$artifact_name" sha256sum "$dist_dir/$artifact_name" printf 'ZIP-архив: %s\n' "$dist_dir/$archive_name" sha256sum "$dist_dir/$archive_name"