Files
goldenChart/scripts/smoke-test-desktop.sh
T
2026-06-17 10:00:34 +09:00

69 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# GoldenChart Desktop — smoke test (CI·로컬)
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://stock.exdev.co.kr/desktop/updates}"
FAIL=0
ok() { echo "[OK] $*"; }
fail() { echo "[FAIL] $*"; FAIL=1; }
echo "=== Desktop Smoke Test ==="
# 1) Vite 번들
if npm run build -w @goldenchart/desktop >/dev/null 2>&1; then
ok "desktop vite build"
else
fail "desktop vite build"
fi
# 2) updater pubkey
if [[ -f "$ROOT/desktop/updater.pub" ]]; then
ok "desktop/updater.pub exists"
else
echo "[WARN] desktop/updater.pub 없음 — setup-desktop-updater-keys.sh 필요"
fi
# 3) tauri.conf pubkey not placeholder
PUB="$(node -p "require('$ROOT/desktop/src-tauri/tauri.conf.json').plugins?.updater?.pubkey || ''")"
if [[ -n "$PUB" && "$PUB" != "REPLACE_WITH_TAURI_SIGNER_PUBKEY" ]]; then
ok "tauri.conf updater pubkey configured"
else
echo "[WARN] tauri.conf pubkey 미설정"
fi
# 4) latest.json (local or remote)
LOCAL_LATEST="$ROOT/frontend/public/desktop/updates/latest.json"
if [[ -f "$LOCAL_LATEST" ]]; then
ok "local latest.json"
node -e "JSON.parse(require('fs').readFileSync('$LOCAL_LATEST','utf8'))" && ok "latest.json valid JSON"
fi
if curl -sf "${BASE_URL}/latest.json" >/dev/null 2>&1; then
REMOTE="$(curl -sf "${BASE_URL}/latest.json" 2>/dev/null || true)"
if [[ -z "$REMOTE" || "${#REMOTE}" -lt 8 ]]; then
HTTP_BASE="$(printf '%s' "$BASE_URL" | sed 's|^https://|http://|')"
HTTP_REMOTE="$(curl -sf "${HTTP_BASE}/latest.json" 2>/dev/null || true)"
if [[ -n "$HTTP_REMOTE" && "${#HTTP_REMOTE}" -ge 8 ]]; then
fail "remote HTTPS latest.json empty — HTTP는 정상 (${#HTTP_REMOTE}B). Caddy→gc-frontend:80 역프록시 점검"
fi
fail "remote latest.json empty (0-byte)"
fi
node -e "JSON.parse(process.argv[1])" "$REMOTE" && ok "remote latest.json ${BASE_URL}/latest.json"
else
echo "[WARN] remote latest.json unreachable (배포 전 정상)"
fi
# 5) 필수 스크립트
for s in build-desktop.sh publish-desktop-update.sh jenkins-desktop-pipeline.sh; do
if [[ -x "$ROOT/scripts/$s" ]]; then ok "scripts/$s"; else fail "scripts/$s missing"; fi
done
if [[ "$FAIL" -eq 0 ]]; then
echo "=== Smoke test passed ==="
exit 0
fi
echo "=== Smoke test failed ==="
exit 1