food-market/deploy/pos-publish.sh
nns 81085aed8b
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
build(pos): сборка Win/Linux + AppImage, документация, скриншоты
- deploy/pos-publish.sh: self-contained Windows x64 (zip) + Linux x64 (tar.gz) +
  AppImage (если есть appimagetool); VERSION.txt для автообновления.
- docs/pos.md — инструкция кассиру/администратору (установка, горячие клавиши,
  смена, продажа, возврат, весы, печать, офлайн, фискализация-позже, автообновление).
- docs/pos-moysklad-reference.md — сверка розничной модели с МойСклад.
- docs/pos-progress.md — честный статус 11/11 пунктов + замеры + известные огранич.
- docs/pos-screenshots/ — 20 кадров (1920×1080 + 1366×768) + index.html галерея.
- .gitignore: сборки кассы (deploy/pos-dist) и TestResults — не в git.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:59:06 +05:00

77 lines
3.3 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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" <<DESK
[Desktop Entry]
Name=Food Market Касса
Exec=foodmarket.Pos
Icon=foodmarket-pos
Type=Application
Categories=Office;
DESK
# Минимальная иконка-заглушка (1x1 PNG), если нет фирменной.
printf '\x89PNG\r\n\x1a\n' > "$appdir/foodmarket-pos.png"
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 собрана."