터치로 전략컨트롤 동작

This commit is contained in:
Macbook
2026-06-15 00:19:31 +09:00
parent d8529ed582
commit f35f17df36
9 changed files with 345 additions and 103 deletions
+15 -14
View File
@@ -50,18 +50,9 @@ fi
CONF="$WORK_TREE/desktop/src-tauri/tauri.conf.json"
# CI patch bump (jenkins-desktop-pipeline 에서 선행 bump 시 DESKTOP_SKIP_VERSION_BUMP=1)
if [[ "${DESKTOP_SKIP_VERSION_BUMP:-}" != "1" ]] \
&& [[ -z "${BUMP_VERSION:-}" ]] \
&& [[ "${DESKTOP_BUMP_ON_CI:-1}" == "1" ]] \
&& [[ -n "${BUILD_NUMBER:-}${DESKTOP_AUTO_BUMP:-}" ]]; then
chmod +x "$WORK_TREE/scripts/bump-desktop-version-from-release.sh"
export WORK_TREE
BUMPED="$("$WORK_TREE/scripts/bump-desktop-version-from-release.sh")"
echo "Desktop CI version bump → $BUMPED"
fi
if [[ -n "$BUMP_VERSION" ]]; then
# ── 빌드 전 semver bump (기본: 항상 실행) ─────────────────────────────────────
# DESKTOP_NO_BUMP=1 로만 생략 (로컬 개발용)
if [[ -n "${BUMP_VERSION:-}" ]]; then
node -e "
const fs=require('fs'); const p=process.argv[1]; const b=process.argv[2];
const c=JSON.parse(fs.readFileSync(p,'utf8'));
@@ -72,12 +63,22 @@ else if(b==='minor') nv=[a,x+1,0].join('.');
else if(b==='major') nv=[a+1,0,0].join('.');
else nv=b;
c.version=nv; fs.writeFileSync(p, JSON.stringify(c,null,2)+'\n');
console.log('version', nv);
const pkgPath=p.replace('src-tauri/tauri.conf.json','package.json');
try{const pkg=JSON.parse(fs.readFileSync(pkgPath,'utf8'));pkg.version=nv;fs.writeFileSync(pkgPath,JSON.stringify(pkg,null,2)+'\n');}catch{}
console.log(nv);
" "$CONF" "$BUMP_VERSION"
echo "=== Desktop version (explicit): v$(node -p "require('$CONF').version") ==="
elif [[ "${DESKTOP_NO_BUMP:-}" != "1" ]]; then
chmod +x "$WORK_TREE/scripts/bump-desktop-version-before-build.sh"
BEFORE_VER="$("$WORK_TREE/scripts/read-desktop-version.sh")"
BUMPED_VER="$("$WORK_TREE/scripts/bump-desktop-version-before-build.sh")"
echo "=== Desktop version bump: v${BEFORE_VER} → v${BUMPED_VER} ==="
else
echo "=== Desktop version bump SKIPPED (DESKTOP_NO_BUMP=1) — v$(node -p "require('$CONF').version") ==="
fi
VERSION="$(node -p "require('$CONF').version")"
echo "Version: $VERSION"
echo "=== Building GoldenChart Desktop v${VERSION} ==="
node -e "
const fs = require('fs');
+50
View File
@@ -0,0 +1,50 @@
#!/usr/bin/env bash
# 빌드 직전 semver patch bump (필수) — 실패 시 exit 1
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
WORK_TREE="${WORK_TREE:-$ROOT}"
export WORK_TREE
export DESKTOP_UPDATE_BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}"
CONF="$WORK_TREE/desktop/src-tauri/tauri.conf.json"
CARGO="$WORK_TREE/desktop/src-tauri/Cargo.toml"
PKG="$WORK_TREE/desktop/package.json"
BEFORE="$("$ROOT/scripts/read-desktop-version.sh")"
echo "[bump-before-build] current v${BEFORE}" >&2
chmod +x "$ROOT/scripts/bump-desktop-version-from-release.sh"
NEW="$("$ROOT/scripts/bump-desktop-version-from-release.sh")"
if [[ -z "$NEW" || "$NEW" == "$BEFORE" ]]; then
echo "[bump-before-build] ERROR: bump failed — still v${BEFORE}" >&2
echo " remote latest: ${DESKTOP_UPDATE_BASE_URL}/latest.json 확인" >&2
exit 1
fi
# semver strictly increased
if ! node -e "
const parse = v => String(v||'0').replace(/^v/i,'').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(1);
" "$NEW" "$BEFORE"; then
echo "[bump-before-build] ERROR: v${NEW} is not greater than v${BEFORE}" >&2
exit 1
fi
# Cargo.toml (Tauri 일부 경로에서 참조)
if [[ -f "$CARGO" ]]; then
node -e "
const fs=require('fs');
const p=process.argv[1], v=process.argv[2];
let t=fs.readFileSync(p,'utf8');
if(!/^version\\s*=\\s*\"/m.test(t)){process.exit(0)}
t=t.replace(/^version\\s*=\\s*\"[^\"]+\"/m, 'version = \"'+v+'\"');
fs.writeFileSync(p,t);
" "$CARGO" "$NEW"
fi
echo "[bump-before-build] v${BEFORE} → v${NEW}" >&2
echo "$NEW"
+15 -25
View File
@@ -18,7 +18,6 @@ log "WORK_TREE=$WORK_TREE"
cd "$WORK_TREE"
# Git 동기화 (checkout → git 에 기록된 semver 그대로 빌드)
GIT_DIR="${GIT_DIR:-/Volumes/ADATA/git/goldenChart.git}"
if [[ -d "$GIT_DIR" ]]; then
if git --git-dir="$GIT_DIR" remote get-url origin >/dev/null 2>&1; then
@@ -27,15 +26,20 @@ if [[ -d "$GIT_DIR" ]]; then
git --git-dir="$GIT_DIR" --work-tree="$WORK_TREE" checkout -f main 2>/dev/null || true
fi
# Jenkins SCM workspace 가 있으면 scripts 를 WORK_TREE 로 동기 (구 스크립트 방지)
if [[ -n "${WORKSPACE:-}" && -d "${WORKSPACE}/scripts" && "${WORKSPACE}" != "$WORK_TREE" ]]; then
log "Sync scripts: ${WORKSPACE}/scripts → ${WORK_TREE}/scripts"
rsync -a "${WORKSPACE}/scripts/" "${WORK_TREE}/scripts/" 2>/dev/null \
|| cp -f "${WORKSPACE}/scripts/"*.sh "${WORK_TREE}/scripts/" 2>/dev/null || true
fi
chmod +x "$WORK_TREE/scripts/"*.sh 2>/dev/null || true
# 의존성 (최초 1회 — 이미 있으면 빠르게 통과)
if ! command -v cargo-xwin >/dev/null 2>&1 || ! command -v rustc >/dev/null 2>&1; then
log "Desktop build deps 설치..."
"$WORK_TREE/scripts/install-desktop-build-deps.sh"
fi
# updater pubkey (repo에 desktop/updater.pub 있으면 patch만)
if [[ -f "$WORK_TREE/desktop/updater.pub" ]]; then
"$WORK_TREE/scripts/patch-tauri-updater-pubkey.sh"
elif [[ -f "${TAURI_SIGNER_KEY:-$HOME/.tauri/goldenchart.key}" ]]; then
@@ -54,47 +58,33 @@ export BUILD_NUMBER="${BUILD_NUMBER:-}"
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 git version: v${GIT_VER}"
# 매 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 build version → v${BUMPED}"
else
export DESKTOP_SKIP_VERSION_BUMP=1
BUMPED="$GIT_VER"
log "Desktop version bump skipped — using git v${BUMPED}"
fi
log "Desktop git tauri.conf: v${GIT_VER}"
log "semver bump → build-desktop.sh 시작 시 자동 실행 (bump-desktop-version-before-build.sh)"
"$WORK_TREE/scripts/build-desktop.sh" "${BUILD_ARGS[@]}"
BUILT_VER="$(node -p "require('$WORK_TREE/dist-desktop/build-info.json').version" 2>/dev/null || echo '?')"
log "Built version: v${BUILT_VER}"
WORK_TREE="$WORK_TREE" \
ARTIFACT_DIR="$WORK_TREE/dist-desktop" \
DESKTOP_UPDATE_BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://exdev.co.kr/desktop/updates}" \
TAURI_SIGNER_KEY="${TAURI_SIGNER_KEY:-$HOME/.tauri/goldenchart.key}" \
DESKTOP_RELEASE_NOTES="${DESKTOP_RELEASE_NOTES:-Build ${BUILD_NUMBER:-local}}" \
DESKTOP_RELEASE_NOTES="${DESKTOP_RELEASE_NOTES:-Build ${BUILD_NUMBER:-local} v${BUILT_VER}}" \
"$WORK_TREE/scripts/publish-desktop-update.sh"
# latest.json·설치 파일 nginx 즉시 반영 (볼륨 마운트)
if [[ -x "$WORK_TREE/scripts/reload-frontend-desktop-static.sh" ]]; then
WORK_TREE="$WORK_TREE" "$WORK_TREE/scripts/reload-frontend-desktop-static.sh" || true
fi
# Jenkins artifact archive 경로
if [[ -d "$WORK_TREE/dist-desktop" ]]; then
log "Artifacts ready: $WORK_TREE/dist-desktop"
fi
# 웹 frontend Docker 재배포 (latest.json static 포함) — 선택
if [[ "${DESKTOP_DEPLOY_WEB:-0}" == "1" ]] && [[ -x "${DEPLOY_SCRIPT:-/Volumes/ADATA/git/deploy.sh}" ]]; then
log "Trigger web deploy (frontend only)..."
SERVICE_NAME=frontend "${DEPLOY_SCRIPT:-/Volumes/ADATA/git/deploy.sh}"
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
log "Pipeline complete — v${BUILT_VER}"
log "Published: ${DESKTOP_UPDATE_BASE_URL}/latest.json"
+23
View File
@@ -32,6 +32,29 @@ if [[ -f "$BUILD_INFO" ]]; then
fi
NOTES="${DESKTOP_RELEASE_NOTES:-GoldenChart Desktop $VERSION}"
# 동일 버전 재배포 방지 (updater 가 '이미 최신' 으로 보이는 원인)
PUBLISHED_LATEST_URL="${DESKTOP_PUBLISHED_LATEST_URL:-${BASE_URL}/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)"
fi
if [[ -n "$REMOTE_PUB_VER" ]]; then
if ! node -e "
const parse = v => String(v||'0').replace(/^v/i,'').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(1);
" "$VERSION" "$REMOTE_PUB_VER"; then
log "ERROR: publish v${VERSION} <= remote v${REMOTE_PUB_VER} — bump 가 실행되지 않았습니다." >&2
log " build-desktop.sh 가 bump-desktop-version-before-build.sh 를 호출하는지 확인" >&2
exit 1
fi
log "remote v${REMOTE_PUB_VER} → publish v${VERSION} OK"
fi
log "=== Publish Desktop v$VERSION ==="
log "Work tree: $WORK_TREE"
log "Updates src: $UPDATES_SRC"
@@ -54,12 +54,9 @@ export PATH="/opt/homebrew/opt/llvm/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/us
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=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}"
"${WORK_TREE}/scripts/jenkins-desktop-pipeline.sh"
</command>
</hudson.tasks.Shell>