#!/usr/bin/env bash # 배포된 Desktop semver 확인 (latest.json · build-info · 설치 파일) set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://stock.exdev.co.kr/desktop/updates}" LATEST_URL="${DESKTOP_PUBLISHED_LATEST_URL:-${BASE_URL}/latest.json}" UPDATES_DIR="${UPDATES_DIR:-$ROOT/frontend/public/desktop/updates}" RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$ROOT/data/desktop-releases}" GIT_VER="$("$ROOT/scripts/read-desktop-version.sh" 2>/dev/null || echo '?')" log() { echo "[verify-desktop-version] $*"; } log "git tauri.conf → v${GIT_VER}" log "remote latest.json → ${LATEST_URL}" REMOTE_VER="" REMOTE_PLATFORMS="0" if REMOTE_JSON="$(curl -sf --connect-timeout 5 --max-time 12 "$LATEST_URL" 2>/dev/null)"; then if [[ -z "$REMOTE_JSON" || "${#REMOTE_JSON}" -lt 8 ]]; then log "remote latest.json → EMPTY (0-byte — updater JSON parse 실패 원인)" HTTP_URL="$(printf '%s' "$LATEST_URL" | sed 's|^https://|http://|')" HTTP_JSON="$(curl -sf --connect-timeout 5 --max-time 12 "$HTTP_URL" 2>/dev/null || true)" if [[ -n "$HTTP_JSON" && "${#HTTP_JSON}" -ge 8 ]]; then log "remote HTTP latest → OK (${#HTTP_JSON}B) — HTTPS(Caddy) 역프록시가 빈 200을 반환 중일 가능성" fi else read -r REMOTE_VER REMOTE_PLATFORMS <<< "$(printf '%s' "$REMOTE_JSON" | node -e " let d=''; process.stdin.on('data',c=>d+=c); process.stdin.on('end',()=>{ try { const j=JSON.parse(d); console.log((j.version||'')+' '+Object.keys(j.platforms||{}).length); } catch { console.log(' 0'); } }); " 2>/dev/null || echo ' 0')" log "remote version → v${REMOTE_VER:-?} (platforms: ${REMOTE_PLATFORMS:-0})" fi else log "remote version → (fetch failed)" fi if [[ -f "$UPDATES_DIR/latest.json" ]]; then LOCAL_PUB="$(node -p "require('$UPDATES_DIR/latest.json').version" 2>/dev/null || echo '?')" log "local latest.json → v${LOCAL_PUB} ($UPDATES_DIR)" fi if [[ -f "$ROOT/dist-desktop/build-info.json" ]]; then BI="$(node -p "require('$ROOT/dist-desktop/build-info.json').version" 2>/dev/null || echo '?')" log "last build-info → v${BI}" fi if [[ -d "$RELEASE_DIR" ]]; then log "release installers → $RELEASE_DIR" ls -1 "$RELEASE_DIR"/*.dmg "$RELEASE_DIR"/*setup.exe 2>/dev/null | while read -r f; do log " $(basename "$f")" done || true fi if [[ -n "$REMOTE_VER" && "$GIT_VER" != "?" ]]; then node -e " const parse = v => String(v||'0').split('.').map(n=>parseInt(n,10)||0); const a=parse(process.argv[1]), b=parse(process.argv[2]); for(let i=0;i<3;i++){const d=(a[i]||0)-(b[i]||0);if(d){process.exit(d>0?0:1)}} process.exit(0); " "$GIT_VER" "$REMOTE_VER" && log "OK: git >= remote" || log "WARN: git v${GIT_VER} < remote v${REMOTE_VER} — push:desktop 또는 Jenkins 재빌드 필요" fi