버전문제 수정
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
"setup:desktop:keys": "./scripts/setup-desktop-updater-keys.sh",
|
||||
"bump:desktop": "./scripts/bump-desktop-version-for-push.sh",
|
||||
"push:desktop": "./scripts/push-with-desktop-version.sh",
|
||||
"verify:desktop:version": "./scripts/verify-desktop-published-version.sh",
|
||||
"hooks:desktop": "./scripts/install-desktop-git-hooks.sh",
|
||||
"publish:desktop": "./scripts/publish-desktop-update.sh",
|
||||
"smoke:desktop": "./scripts/smoke-test-desktop.sh",
|
||||
|
||||
@@ -1,19 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
# git push 전 desktop semver patch bump → tauri.conf.json + desktop/package.json
|
||||
# Desktop 번들: frontend + packages/shared, 런타임: backend API
|
||||
# (로컬 dist-desktop/build-info 는 무시 — stale 버전 방지)
|
||||
# git push 전 desktop semver patch bump (원격 latest.json 포함)
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
WORK_TREE="${WORK_TREE:-$ROOT}"
|
||||
CONF="${WORK_TREE}/desktop/src-tauri/tauri.conf.json"
|
||||
PKG="${WORK_TREE}/desktop/package.json"
|
||||
LATEST="${WORK_TREE}/frontend/public/desktop/updates/latest.json"
|
||||
UPDATES_DIR="${WORK_TREE}/frontend/public/desktop/updates"
|
||||
RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$WORK_TREE/data/desktop-releases}"
|
||||
|
||||
export WORK_TREE="${WORK_TREE:-$ROOT}"
|
||||
export DESKTOP_UPDATE_BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}"
|
||||
export DESKTOP_BUMP_IGNORE_BUILD_INFO=1
|
||||
export WORK_TREE
|
||||
|
||||
NEW_VER="$("$ROOT/scripts/bump-desktop-version-from-release.sh")"
|
||||
echo "$NEW_VER"
|
||||
"$ROOT/scripts/bump-desktop-version-from-release.sh"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# published latest.json·설치 파일·tauri.conf 중 최대 버전 +1 patch → tauri.conf.json
|
||||
# published latest.json(로컬·원격)·설치 파일·tauri.conf 중 최대 +1 patch
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
@@ -10,6 +10,16 @@ UPDATES_DIR="${WORK_TREE}/frontend/public/desktop/updates"
|
||||
BUILD_INFO="${WORK_TREE}/dist-desktop/build-info.json"
|
||||
RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$WORK_TREE/data/desktop-releases}"
|
||||
|
||||
PUBLISHED_LATEST_URL="${DESKTOP_PUBLISHED_LATEST_URL:-${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}/latest.json}"
|
||||
REMOTE_PUB_VER=""
|
||||
if REMOTE_JSON="$(curl -sf --connect-timeout 5 --max-time 12 "$PUBLISHED_LATEST_URL" 2>/dev/null)"; then
|
||||
REMOTE_PUB_VER="$(printf '%s' "$REMOTE_JSON" | node -e "
|
||||
let d=''; process.stdin.on('data',c=>d+=c);
|
||||
process.stdin.on('end',()=>{ try { console.log(JSON.parse(d).version||''); } catch { console.log(''); } });
|
||||
" 2>/dev/null || true)"
|
||||
[[ -n "$REMOTE_PUB_VER" ]] && echo "[bump-desktop] remote latest.json → v${REMOTE_PUB_VER} (${PUBLISHED_LATEST_URL})" >&2
|
||||
fi
|
||||
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
@@ -18,6 +28,7 @@ const latestPath = process.argv[2];
|
||||
const updatesDir = process.argv[3];
|
||||
const buildInfoPath = process.argv[4];
|
||||
const releaseDir = process.argv[5];
|
||||
const remotePub = process.argv[6] || '';
|
||||
|
||||
const parse = v => String(v || '0.0.0').trim().replace(/^v/i, '').split('.').map(n => parseInt(n, 10) || 0);
|
||||
const cmp = (a, b) => {
|
||||
@@ -29,11 +40,13 @@ const cmp = (a, b) => {
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
const maxVer = (cur, next) => (cmp(next, cur) > 0 ? next : cur);
|
||||
const maxVer = (cur, next) => (next && cmp(next, cur) > 0 ? next : cur);
|
||||
|
||||
const conf = JSON.parse(fs.readFileSync(confPath, 'utf8'));
|
||||
let base = conf.version || '0.1.0';
|
||||
|
||||
if (remotePub) base = maxVer(base, remotePub);
|
||||
|
||||
if (fs.existsSync(latestPath)) {
|
||||
try {
|
||||
const pub = JSON.parse(fs.readFileSync(latestPath, 'utf8'));
|
||||
@@ -67,6 +80,7 @@ const parts = parse(base);
|
||||
while (parts.length < 3) parts.push(0);
|
||||
parts[2] += 1;
|
||||
const nv = parts.join('.');
|
||||
console.error('[bump-desktop] max base v' + base + ' → v' + nv);
|
||||
conf.version = nv;
|
||||
fs.writeFileSync(confPath, JSON.stringify(conf, null, 2) + '\n');
|
||||
const pkgPath = path.join(path.dirname(confPath), '..', 'package.json');
|
||||
@@ -76,4 +90,4 @@ try {
|
||||
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
|
||||
} catch { /* ignore */ }
|
||||
console.log(nv);
|
||||
" "$CONF" "$LATEST" "$UPDATES_DIR" "$BUILD_INFO" "$RELEASE_DIR"
|
||||
" "$CONF" "$LATEST" "$UPDATES_DIR" "$BUILD_INFO" "$RELEASE_DIR" "$REMOTE_PUB_VER"
|
||||
|
||||
@@ -51,21 +51,21 @@ fi
|
||||
|
||||
export WORK_TREE
|
||||
export BUILD_NUMBER="${BUILD_NUMBER:-}"
|
||||
# git push 시 bump-desktop-version-for-push.sh 로 올린 semver 를 그대로 빌드
|
||||
export DESKTOP_BUMP_ON_CI="${DESKTOP_BUMP_ON_CI:-0}"
|
||||
export DESKTOP_UPDATE_BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}"
|
||||
|
||||
GIT_VER="$(node -p "require('$WORK_TREE/desktop/src-tauri/tauri.conf.json').version" 2>/dev/null || echo '?')"
|
||||
log "Desktop build version (git): v${GIT_VER}"
|
||||
log "Desktop git version: v${GIT_VER}"
|
||||
|
||||
if [[ -z "${BUMP_VERSION:-}" ]] && [[ "${DESKTOP_BUMP_ON_CI:-0}" == "1" ]]; then
|
||||
log "CI Desktop version bump (DESKTOP_BUMP_ON_CI=1)..."
|
||||
# 매 Jenkins 빌드마다 published latest + git 중 max → +1 (동일 버전 재빌드 방지)
|
||||
if [[ -z "${BUMP_VERSION:-}" ]] && [[ "${DESKTOP_BUMP_ON_CI:-1}" == "1" ]]; then
|
||||
log "CI Desktop version bump (published latest + git → +1 patch)..."
|
||||
BUMPED="$("$WORK_TREE/scripts/bump-desktop-version-from-release.sh")"
|
||||
export DESKTOP_SKIP_VERSION_BUMP=1
|
||||
log "Desktop version → $BUMPED (tauri.conf + package.json)"
|
||||
log "Desktop build version → v${BUMPED}"
|
||||
else
|
||||
export DESKTOP_SKIP_VERSION_BUMP=1
|
||||
BUMPED="$GIT_VER"
|
||||
log "Desktop version bump skipped — git v${BUMPED}"
|
||||
log "Desktop version bump skipped — using git v${BUMPED}"
|
||||
fi
|
||||
|
||||
"$WORK_TREE/scripts/build-desktop.sh" "${BUILD_ARGS[@]}"
|
||||
@@ -94,3 +94,7 @@ if [[ "${DESKTOP_DEPLOY_WEB:-0}" == "1" ]] && [[ -x "${DEPLOY_SCRIPT:-/Volumes/A
|
||||
fi
|
||||
|
||||
log "Pipeline complete."
|
||||
log "Published target: ${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}/latest.json"
|
||||
if [[ -f "$WORK_TREE/dist-desktop/build-info.json" ]]; then
|
||||
log "build-info: $(cat "$WORK_TREE/dist-desktop/build-info.json" 2>/dev/null | tr -d '\n' | head -c 200)"
|
||||
fi
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
# git push + desktop semver 명시 bump (커밋 포함)
|
||||
# git push + desktop semver bump (원격 latest.json 반영) + push + Jenkins
|
||||
#
|
||||
# Desktop 은 frontend 소스를 번들하고 backend API 를 사용하므로
|
||||
# frontend / backend / desktop / packages/shared 변경 후 push 시 사용하세요.
|
||||
# plain git push 만 하면 git tauri.conf 버전 그대로 빌드될 수 있습니다.
|
||||
# 이 스크립트 또는 Jenkins CI bump(DESKTOP_BUMP_ON_CI=1) 로 semver 가 올라갑니다.
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/push-with-desktop-version.sh [git push 인자...]
|
||||
|
||||
@@ -55,7 +55,8 @@ export WORK_TREE="${WORK_TREE}"
|
||||
export GIT_DIR="${GIT_DIR}"
|
||||
export BUILD_NUMBER="\${BUILD_NUMBER}"
|
||||
export DESKTOP_AUTO_BUMP=1
|
||||
export DESKTOP_BUMP_ON_CI=0
|
||||
export DESKTOP_BUMP_ON_CI=1
|
||||
export DESKTOP_UPDATE_BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}"
|
||||
export TAURI_SIGNER_KEY="\${TAURI_SIGNER_KEY:-\$HOME/.tauri/goldenchart.key}"
|
||||
export DESKTOP_DEPLOY_WEB=0
|
||||
export DESKTOP_UPDATE_BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}"
|
||||
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/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://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=""
|
||||
if REMOTE_JSON="$(curl -sf --connect-timeout 5 --max-time 12 "$LATEST_URL" 2>/dev/null)"; then
|
||||
REMOTE_VER="$(printf '%s' "$REMOTE_JSON" | node -e "
|
||||
let d=''; process.stdin.on('data',c=>d+=c);
|
||||
process.stdin.on('end',()=>{ try { console.log(JSON.parse(d).version||''); } catch { console.log(''); } });
|
||||
" 2>/dev/null || true)"
|
||||
log "remote version → v${REMOTE_VER:-?}"
|
||||
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
|
||||
Reference in New Issue
Block a user