From 7a77e1afb98bcd51f84f33684483b48a4f12acd5 Mon Sep 17 00:00:00 2001 From: Macbook Date: Sun, 14 Jun 2026 17:22:50 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Desktop=20CI=20=EB=B2=84=EC=A0=84=20bump?= =?UTF-8?q?=20=E2=80=94=20=EC=84=A4=EC=B9=98=20=ED=8C=8C=EC=9D=BC=C2=B7lat?= =?UTF-8?q?est.json=20=EC=B5=9C=EB=8C=80=EA=B0=92=20=EA=B8=B0=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit latest.json만 보면 이미 0.1.6인 클라이언트에 업데이트가 안 보이던 문제를 수정한다. Co-authored-by: Cursor --- scripts/bump-desktop-version-from-release.sh | 42 ++++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/scripts/bump-desktop-version-from-release.sh b/scripts/bump-desktop-version-from-release.sh index 255a68d..3014593 100755 --- a/scripts/bump-desktop-version-from-release.sh +++ b/scripts/bump-desktop-version-from-release.sh @@ -1,29 +1,63 @@ #!/usr/bin/env bash -# published latest.json 기준 patch 버전 bump → tauri.conf.json (CI 자동 업데이트용) +# published latest.json·설치 파일·tauri.conf 중 최대 버전 +1 patch → tauri.conf.json set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" WORK_TREE="${WORK_TREE:-$ROOT}" CONF="${WORK_TREE}/desktop/src-tauri/tauri.conf.json" LATEST="${WORK_TREE}/frontend/public/desktop/updates/latest.json" +UPDATES_DIR="${WORK_TREE}/frontend/public/desktop/updates" +BUILD_INFO="${WORK_TREE}/dist-desktop/build-info.json" node -e " const fs = require('fs'); +const path = require('path'); const confPath = process.argv[1]; const latestPath = process.argv[2]; +const updatesDir = process.argv[3]; +const buildInfoPath = process.argv[4]; + +const parse = v => String(v || '0.0.0').trim().replace(/^v/i, '').split('.').map(n => parseInt(n, 10) || 0); +const cmp = (a, b) => { + const pa = parse(a), pb = parse(b); + const len = Math.max(pa.length, pb.length, 3); + for (let i = 0; i < len; i++) { + const d = (pa[i] || 0) - (pb[i] || 0); + if (d) return d; + } + return 0; +}; +const maxVer = (cur, next) => (cmp(next, cur) > 0 ? next : cur); + const conf = JSON.parse(fs.readFileSync(confPath, 'utf8')); let base = conf.version || '0.1.0'; + if (fs.existsSync(latestPath)) { try { const pub = JSON.parse(fs.readFileSync(latestPath, 'utf8')); - if (pub.version) base = pub.version; + if (pub.version) base = maxVer(base, pub.version); } catch { /* ignore */ } } -const parts = base.split('.').map(n => parseInt(n, 10) || 0); +if (fs.existsSync(buildInfoPath)) { + try { + const bi = JSON.parse(fs.readFileSync(buildInfoPath, 'utf8')); + if (bi.version) base = maxVer(base, bi.version); + } catch { /* ignore */ } +} +if (fs.existsSync(updatesDir)) { + for (const name of fs.readdirSync(updatesDir)) { + const m = name.match(/[_-](\\d+\\.\\d+\\.\\d+)[_-]/); + if (m) base = maxVer(base, m[1]); + const m2 = name.match(/GoldenChart_(\\d+\\.\\d+\\.\\d+)/); + if (m2) base = maxVer(base, m2[1]); + } +} + +const parts = parse(base); while (parts.length < 3) parts.push(0); parts[2] += 1; const nv = parts.join('.'); conf.version = nv; fs.writeFileSync(confPath, JSON.stringify(conf, null, 2) + '\n'); console.log(nv); -" "$CONF" "$LATEST" +" "$CONF" "$LATEST" "$UPDATES_DIR" "$BUILD_INFO"