#!/usr/bin/env bash # main HEAD vs 마지막 성공 PC 빌드(build-info) 비교 → source-state.json (API·UI용) set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" WORK_TREE="${WORK_TREE:-$ROOT}" RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$WORK_TREE/data/desktop-releases}" BUILD_INFO="$RELEASE_DIR/build-info.json" OUT="$RELEASE_DIR/source-state.json" mkdir -p "$RELEASE_DIR" HEAD_SHA="$(git -C "$WORK_TREE" rev-parse HEAD 2>/dev/null || echo '')" HEAD_SHORT="$(git -C "$WORK_TREE" rev-parse --short HEAD 2>/dev/null || echo '')" LAST_SHA="" PUBLISHED_VER="" if [[ -f "$BUILD_INFO" ]]; then read -r LAST_SHA PUBLISHED_VER < <(node -e " const fs=require('fs'); try { const j=JSON.parse(fs.readFileSync(process.argv[1],'utf8')); console.log((j.gitSha||'')+' '+(j.version||'')); } catch { console.log(' '); } " "$BUILD_INFO") fi PENDING=0 AFFECTS=0 if [[ -n "$HEAD_SHA" && -n "$LAST_SHA" && "$HEAD_SHA" != "$LAST_SHA" ]]; then PENDING="$(git -C "$WORK_TREE" rev-list --count "${LAST_SHA}..${HEAD_SHA}" 2>/dev/null || echo 0)" # shellcheck disable=SC1091 source "$ROOT/scripts/desktop-version-scope.sh" if desktop_version_diff_affects_app "${LAST_SHA}..${HEAD_SHA}"; then AFFECTS=1 fi elif [[ -n "$HEAD_SHA" && -z "$LAST_SHA" ]]; then PENDING=1 AFFECTS=1 fi node -e " const fs=require('fs'); const out=process.argv[1]; const data={ headSha: process.argv[2]||'', headShort: process.argv[3]||'', lastBuiltSha: process.argv[4]||'', publishedVersion: process.argv[5]||'', pendingCommitCount: parseInt(process.argv[6],10)||0, affectsDesktop: process.argv[7]==='1', updatedAt: new Date().toISOString(), }; fs.writeFileSync(out, JSON.stringify(data,null,2)+'\n'); console.log('[source-state]', data.headShort||'?','pending',data.pendingCommitCount,'affects',data.affectsDesktop); " "$OUT" "$HEAD_SHA" "$HEAD_SHORT" "$LAST_SHA" "$PUBLISHED_VER" "$PENDING" "$AFFECTS"