버전 불일치 문제

This commit is contained in:
Macbook
2026-06-14 20:01:33 +09:00
parent a6a3bfbe38
commit dec812089d
8 changed files with 180 additions and 55 deletions
+48 -13
View File
@@ -2,26 +2,29 @@
# GoldenChart Desktop — updater 서명 + latest.json + 웹 static 배포
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
ARTIFACT_DIR="${ARTIFACT_DIR:-$ROOT/dist-desktop}"
SCRIPT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
WORK_TREE="${WORK_TREE:-$SCRIPT_ROOT}"
ARTIFACT_DIR="${ARTIFACT_DIR:-$WORK_TREE/dist-desktop}"
UPDATES_SRC="${UPDATES_SRC:-$ARTIFACT_DIR/updates}"
UPDATES_DIR="${UPDATES_DIR:-${WORK_TREE:-$ROOT}/frontend/public/desktop/updates}"
UPDATES_DIR="${UPDATES_DIR:-$WORK_TREE/frontend/public/desktop/updates}"
WEB_STATIC_DIR="${WEB_STATIC_DIR:-$UPDATES_DIR}"
BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}"
BASE_URL="${BASE_URL/http:\/\//https:\/\/}"
DESKTOP_RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$ROOT/data/desktop-releases}"
DESKTOP_RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$WORK_TREE/data/desktop-releases}"
KEY_PATH="${TAURI_SIGNER_KEY:-$HOME/.tauri/goldenchart.key}"
DESKTOP_DIR="$ROOT/desktop"
DESKTOP_DIR="$WORK_TREE/desktop"
CONF="$DESKTOP_DIR/src-tauri/tauri.conf.json"
BUILD_INFO="$ARTIFACT_DIR/build-info.json"
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:${PATH:-/usr/bin:/bin}"
# shellcheck disable=SC1091
[[ -f "$HOME/.cargo/env" ]] && source "$HOME/.cargo/env"
# shellcheck disable=SC1091
source "$WORK_TREE/scripts/desktop-installer-version.sh"
log() { echo "[publish-desktop] $*"; }
# CI bump 후 deploy checkout 으로 tauri.conf가 되돌아갈 수 있음 — build-info 우선
# build-info 가 단일 버전 소스 (tauri.conf 는 git checkout 으로 구버전일 수 있음)
VERSION="$(node -p "require('$CONF').version" 2>/dev/null || echo '0.1.0')"
if [[ -f "$BUILD_INFO" ]]; then
VERSION="$(node -e "try{console.log(JSON.parse(require('fs').readFileSync(process.argv[1],'utf8')).version||'')}catch{}" "$BUILD_INFO" 2>/dev/null || echo "$VERSION")"
@@ -30,8 +33,10 @@ fi
NOTES="${DESKTOP_RELEASE_NOTES:-GoldenChart Desktop $VERSION}"
log "=== Publish Desktop v$VERSION ==="
log "Work tree: $WORK_TREE"
log "Updates src: $UPDATES_SRC"
log "Web static: $WEB_STATIC_DIR"
log "Release dir: $DESKTOP_RELEASE_DIR"
mkdir -p "$WEB_STATIC_DIR"
@@ -46,16 +51,18 @@ prune_old_installers() {
}
# 설치 파일(dist-desktop/*.dmg, *setup.exe) 복사 — nginx static + backend API 디렉터리
MAC_VER="" WIN_VER=""
INSTALLER_COUNT=0
if [[ -d "$ARTIFACT_DIR" ]]; then
mkdir -p "$DESKTOP_RELEASE_DIR"
prune_old_installers "$DESKTOP_RELEASE_DIR"
prune_old_installers "$WEB_STATIC_DIR"
INSTALLER_COUNT=0
while IFS= read -r f; do
[[ -z "$f" ]] && continue
base="$(basename "$f")"
if [[ "$base" != *"${VERSION}"* ]]; then
if ! desktop_installer_matches_version "$base" "$VERSION"; then
log "[WARN] skip installer (version mismatch): $base (expected v${VERSION})"
continue
fi
@@ -63,10 +70,28 @@ if [[ -d "$ARTIFACT_DIR" ]]; then
cp -f "$f" "$DESKTOP_RELEASE_DIR/"
log "Installer: $base"
INSTALLER_COUNT=$((INSTALLER_COUNT + 1))
case "$base" in
*.dmg) MAC_VER="$(desktop_extract_version_from_name "$base")" ;;
*setup.exe) WIN_VER="$(desktop_extract_version_from_name "$base")" ;;
esac
done < <(find "$ARTIFACT_DIR" -maxdepth 1 -type f \( -name '*.dmg' -o -name '*setup.exe' \) 2>/dev/null)
if [[ "$INSTALLER_COUNT" -eq 0 ]]; then
log "[WARN] v${VERSION} 설치 파일(dmg/exe) 없음 — latest.json 만 갱신될 수 있음"
log "ERROR: v${VERSION} 설치 파일(dmg/exe) 없음 — latest.json 만 갱신하면 UI 버전이 어긋납니다." >&2
exit 1
fi
if [[ -n "$MAC_VER" && "$MAC_VER" != "$VERSION" ]]; then
log "ERROR: macOS installer v${MAC_VER} != publish v${VERSION}" >&2
exit 1
fi
if [[ -n "$WIN_VER" && "$WIN_VER" != "$VERSION" ]]; then
log "ERROR: Windows installer v${WIN_VER} != publish v${VERSION}" >&2
exit 1
fi
if [[ -n "$MAC_VER" && -n "$WIN_VER" && "$MAC_VER" != "$WIN_VER" ]]; then
log "ERROR: macOS v${MAC_VER} != Windows v${WIN_VER}" >&2
exit 1
fi
if [[ -f "$BUILD_INFO" ]]; then
@@ -102,9 +127,9 @@ if [[ -f "$BUILD_INFO" ]]; then
cp -f "$BUILD_INFO" "$PUBLISH_UPDATES/build-info.json"
fi
# latest.json
# latest.json — 설치 파일과 동일 semver
set +e
node "$ROOT/scripts/generate-desktop-latest-json.mjs" \
node "$WORK_TREE/scripts/generate-desktop-latest-json.mjs" \
--version "$VERSION" \
--dir "$PUBLISH_UPDATES" \
--base-url "$BASE_URL" \
@@ -113,12 +138,22 @@ GEN_RC=$?
set -e
if [[ "$GEN_RC" -eq 2 ]]; then
log "[WARN] signed updater bundle 없음 — latest.json 유지 (placeholder 덮어쓰기 안 함)"
log "[WARN] signed updater bundle 없음 — latest.json 은 v${VERSION} build-info 기준 유지"
if [[ -f "$BUILD_INFO" ]]; then
node -e "
const fs=require('fs'); const p=process.argv[1]; const v=process.argv[2]; const u=process.argv[3]; const n=process.argv[4];
const latestPath=p+'/latest.json';
let cur={version:v,notes:n,pub_date:new Date().toISOString(),platforms:{}};
if(fs.existsSync(latestPath)){try{cur=JSON.parse(fs.readFileSync(latestPath,'utf8'));cur.version=v;cur.notes=n;}catch{}}
fs.writeFileSync(latestPath, JSON.stringify(cur,null,2)+'\n');
console.log('latest.json version →', v);
" "$PUBLISH_UPDATES" "$VERSION" "$BASE_URL" "$NOTES"
fi
elif [[ "$GEN_RC" -ne 0 ]]; then
exit "$GEN_RC"
fi
log "Published:"
log "Published v${VERSION}:"
ls -la "$PUBLISH_UPDATES"
log "nginx: /desktop/updates/ → frontend/public/desktop/updates (Docker rebuild 시 반영)"