Files
goldenChart/scripts/update-desktop-source-state.sh
T
2026-06-15 15:44:43 +09:00

57 lines
1.9 KiB
Bash
Executable File

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