자동빌드 배포 오류 수정
This commit is contained in:
@@ -74,6 +74,13 @@ if (releaseDir && fs.existsSync(releaseDir)) {
|
||||
const m = name.match(/GoldenChart[_-](\\d+\\.\\d+\\.\\d+)/i);
|
||||
if (m) base = maxVer(base, m[1]);
|
||||
}
|
||||
const releaseBuildInfo = path.join(releaseDir, 'build-info.json');
|
||||
if (fs.existsSync(releaseBuildInfo)) {
|
||||
try {
|
||||
const bi = JSON.parse(fs.readFileSync(releaseBuildInfo, 'utf8'));
|
||||
if (bi.version) base = maxVer(base, bi.version);
|
||||
} catch { /* ignore */ }
|
||||
}
|
||||
}
|
||||
|
||||
const parts = parse(base);
|
||||
|
||||
@@ -26,6 +26,9 @@ if [[ -d "$GIT_DIR" ]]; then
|
||||
git --git-dir="$GIT_DIR" --work-tree="$WORK_TREE" checkout -f main 2>/dev/null || true
|
||||
fi
|
||||
|
||||
chmod +x "$WORK_TREE/scripts/"*.sh 2>/dev/null || true
|
||||
"$WORK_TREE/scripts/prepare-desktop-jenkins-build.sh"
|
||||
|
||||
# Jenkins SCM workspace 가 있으면 scripts 를 WORK_TREE 로 동기 (구 스크립트 방지)
|
||||
if [[ -n "${WORKSPACE:-}" && -d "${WORKSPACE}/scripts" && "${WORKSPACE}" != "$WORK_TREE" ]]; then
|
||||
log "Sync scripts: ${WORKSPACE}/scripts → ${WORK_TREE}/scripts"
|
||||
|
||||
+17
-3
@@ -49,17 +49,31 @@ while read -r OLDREV NEWREV REFNAME; do
|
||||
WORK_TREE="$WORK_TREE" "$RELOAD" >> "$DEPLOY_LOG" 2>&1 || true
|
||||
fi
|
||||
|
||||
# Desktop(macOS·Windows) Jenkins 빌드 — git push 성공 후 자동 (웹 배포와 독립)
|
||||
chmod +x "$WORK_TREE/scripts/update-desktop-source-state.sh" 2>/dev/null || true
|
||||
if [[ -x "$WORK_TREE/scripts/update-desktop-source-state.sh" ]]; then
|
||||
WORK_TREE="$WORK_TREE" "$WORK_TREE/scripts/update-desktop-source-state.sh" || true
|
||||
fi
|
||||
|
||||
# Desktop(macOS·Windows) Jenkins 빌드 — 데스크톱 영향 변경 시에만 자동 트리거
|
||||
WORK_TREE="${WORK_TREE:-/Users/aidev/apps/goldenChart}"
|
||||
TRIGGER="${WORK_TREE}/scripts/trigger-desktop-jenkins-build.sh"
|
||||
if [ -x "$TRIGGER" ]; then
|
||||
DESKTOP_BUILD_NEEDED=1
|
||||
if [[ -x "$WORK_TREE/scripts/desktop-version-scope.sh" ]]; then
|
||||
# shellcheck disable=SC1091
|
||||
source "$WORK_TREE/scripts/desktop-version-scope.sh"
|
||||
if ! desktop_version_diff_affects_app "$OLDREV..$NEWREV"; then
|
||||
DESKTOP_BUILD_NEEDED=0
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Desktop Jenkins 스kip — 데스크톱 영향 없는 변경"
|
||||
fi
|
||||
fi
|
||||
if [ "$DESKTOP_BUILD_NEEDED" = "1" ] && [ -x "$TRIGGER" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Desktop Jenkins 빌드 트리거"
|
||||
if "$TRIGGER" >> "$DEPLOY_LOG" 2>&1; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Desktop 빌드 큐 등록 완료"
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [WARN] Desktop Jenkins 트리거 실패 (웹 배포는 성공)"
|
||||
fi
|
||||
else
|
||||
elif [ "$DESKTOP_BUILD_NEEDED" = "1" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [WARN] trigger-desktop-jenkins-build.sh 없음: $TRIGGER"
|
||||
fi
|
||||
|
||||
|
||||
Executable
+41
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
# Jenkins Desktop 빌드 시작 전 — git 동기화·deps·source-state (1회 성공률 향상)
|
||||
set -euo pipefail
|
||||
|
||||
WORK_TREE="${WORK_TREE:-/Users/aidev/apps/goldenChart}"
|
||||
ROOT="$WORK_TREE"
|
||||
export WORK_TREE
|
||||
|
||||
export PATH="/opt/homebrew/opt/llvm/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:${PATH:-/usr/bin:/bin}"
|
||||
for prefix in "$HOME/homebrew" /opt/homebrew; do
|
||||
[[ -x "$prefix/bin/brew" ]] && eval "$("$prefix/bin/brew" shellenv)"
|
||||
done
|
||||
# shellcheck disable=SC1091
|
||||
[[ -f "$HOME/.cargo/env" ]] && source "$HOME/.cargo/env"
|
||||
|
||||
log() { echo "[prepare-desktop $(date '+%H:%M:%S')] $*"; }
|
||||
|
||||
GIT_DIR="${GIT_DIR:-/Volumes/ADATA/git/goldenChart.git}"
|
||||
if [[ -d "$GIT_DIR" ]]; then
|
||||
log "git fetch + checkout main"
|
||||
if git --git-dir="$GIT_DIR" remote get-url origin >/dev/null 2>&1; then
|
||||
git --git-dir="$GIT_DIR" fetch origin main 2>/dev/null || true
|
||||
fi
|
||||
git --git-dir="$GIT_DIR" --work-tree="$WORK_TREE" checkout -f main 2>/dev/null || true
|
||||
git --git-dir="$GIT_DIR" --work-tree="$WORK_TREE" reset --hard main 2>/dev/null || true
|
||||
fi
|
||||
|
||||
chmod +x "$WORK_TREE/scripts/"*.sh 2>/dev/null || true
|
||||
"$WORK_TREE/scripts/update-desktop-source-state.sh"
|
||||
|
||||
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
|
||||
|
||||
if [[ -f "$WORK_TREE/desktop/updater.pub" ]]; then
|
||||
"$WORK_TREE/scripts/patch-tauri-updater-pubkey.sh"
|
||||
fi
|
||||
|
||||
log "HEAD $(git -C "$WORK_TREE" rev-parse --short HEAD 2>/dev/null || echo n/a)"
|
||||
log "prepare OK"
|
||||
@@ -180,4 +180,9 @@ log "Published v${VERSION}:"
|
||||
ls -la "$PUBLISH_UPDATES"
|
||||
|
||||
log "nginx: /desktop/updates/ → frontend/public/desktop/updates (Docker rebuild 시 반영)"
|
||||
|
||||
if [[ -x "$WORK_TREE/scripts/update-desktop-source-state.sh" ]]; then
|
||||
WORK_TREE="$WORK_TREE" "$WORK_TREE/scripts/update-desktop-source-state.sh" || true
|
||||
fi
|
||||
|
||||
log "Done."
|
||||
|
||||
@@ -56,6 +56,16 @@ if curl_get "${JOB_API}/lastBuild/api/json?tree=building" 2>/dev/null | grep -q
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if curl_get "${JENKINS_URL}/queue/api/json?tree=items[task[name]]" 2>/dev/null | grep -q "\"name\":\"${JENKINS_JOB}\""; then
|
||||
log "[SKIP] Jenkins 큐에 동일 Job 대기 중"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
WORK_TREE="${WORK_TREE:-/Users/aidev/apps/goldenChart}"
|
||||
if [[ -x "$WORK_TREE/scripts/update-desktop-source-state.sh" ]]; then
|
||||
WORK_TREE="$WORK_TREE" "$WORK_TREE/scripts/update-desktop-source-state.sh" || true
|
||||
fi
|
||||
|
||||
parse_crumb_field() {
|
||||
python3 -c "import sys,json; print(json.load(sys.stdin).get('crumbRequestField',''))" 2>/dev/null || true
|
||||
}
|
||||
|
||||
Executable
+56
@@ -0,0 +1,56 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user