- Сборки Windows и Linux теперь дополнительно формируют ZIP-архивы с бинарником и ресурсами. - OTA-проверка выбирает ZIP-артефакт текущей платформы вместо отдельного исполняемого файла. - Добавлена безопасная проверка архивов, защита от traversal, ссылок, повреждений и превышения лимитов. - Обновление транзакционно заменяет все верхнеуровневые файлы и каталоги пакета с резервным копированием и откатом. - Пользовательские файлы, отсутствующие в ZIP, включая settings.json, сохраняются. - Версия приложения повышена до 2.0.1, документация и кроссплатформенные тесты обновлены.
60 lines
1.8 KiB
Bash
60 lines
1.8 KiB
Bash
#!/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"
|