#!/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