#!/usr/bin/env bash # Сборка кассы food-market.pos (Avalonia) под Windows x64 и Linux x64. # Self-contained + ReadyToRun (быстрый старт, без установленного .NET на кассе). # Trimming выключен по умолчанию (Avalonia/XAML использует рефлексию; AOT/trim — # отдельная задача, см. docs/pos.md). Результат — zip/tar.gz в deploy/pos-dist/. # # Запуск: deploy/pos-publish.sh [win|linux|all] (по умолчанию all) set -euo pipefail cd "$(dirname "$0")/.." PROJ=src/food-market.pos/food-market.pos.csproj OUT=deploy/pos-dist VER="$(date +%Y.%m.%d)" mkdir -p "$OUT" TARGET="${1:-all}" publish() { local rid="$1" label="$2" echo "[pos-publish] $label ($rid) …" local dir="$OUT/food-market-pos-$rid" rm -rf "$dir" dotnet publish "$PROJ" -c Release -r "$rid" --self-contained true \ -p:PublishReadyToRun=true -p:Version="$VER" -p:DebugType=none \ -o "$dir" >/tmp/pos-publish-$rid.log 2>&1 || { tail -25 /tmp/pos-publish-$rid.log; exit 1; } # версия для автообновления кассой echo "$VER" > "$dir/VERSION.txt" local size; size=$(du -sh "$dir" | cut -f1) echo "[pos-publish] $label готово: $dir ($size)" } # AppImage для Linux (переносимый single-file). Требует appimagetool в PATH; # если его нет — пропускаем (tar.gz остаётся основным артефактом Linux). build_appimage() { local rid="$1" ver="$2" local src="$OUT/food-market-pos-$rid" if ! command -v appimagetool >/dev/null 2>&1; then echo "[pos-publish] appimagetool не найден — AppImage пропущен (есть tar.gz)." return 0 fi local appdir="$OUT/FoodMarketPos.AppDir" rm -rf "$appdir"; mkdir -p "$appdir/usr/bin" cp -r "$src/." "$appdir/usr/bin/" cat > "$appdir/foodmarket-pos.desktop" < "$appdir/foodmarket-pos.png" fi cat > "$appdir/AppRun" <<'RUN' #!/bin/sh HERE="$(dirname "$(readlink -f "$0")")" exec "$HERE/usr/bin/foodmarket.Pos" "$@" RUN chmod +x "$appdir/AppRun" "$appdir/usr/bin/foodmarket.Pos" ( cd "$OUT" && ARCH=x86_64 appimagetool "FoodMarketPos.AppDir" "food-market-pos-$ver-x86_64.AppImage" >/tmp/pos-appimage.log 2>&1 ) \ && echo "[pos-publish] AppImage: $OUT/food-market-pos-$ver-x86_64.AppImage" \ || { echo "[pos-publish] AppImage не собрался (см. /tmp/pos-appimage.log) — tar.gz остаётся."; } rm -rf "$appdir" } if [[ "$TARGET" == "win" || "$TARGET" == "all" ]]; then publish win-x64 "Windows x64" ( cd "$OUT" && zip -qr "food-market-pos-win-x64-$VER.zip" food-market-pos-win-x64 ) echo "[pos-publish] zip: $OUT/food-market-pos-win-x64-$VER.zip" fi if [[ "$TARGET" == "linux" || "$TARGET" == "all" ]]; then publish linux-x64 "Linux x64" ( cd "$OUT" && tar czf "food-market-pos-linux-x64-$VER.tar.gz" food-market-pos-linux-x64 ) echo "[pos-publish] tar: $OUT/food-market-pos-linux-x64-$VER.tar.gz" build_appimage linux-x64 "$VER" fi echo "[pos-publish] версия $VER собрана."