Files
goldenChart/scripts/jenkins-desktop-pipeline.sh
T
2026-06-14 23:02:44 +09:00

96 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Jenkins goldenChart-Desktop-Pipeline — 전체 빌드·배포 진입점
set -euo pipefail
WORK_TREE="${WORK_TREE:-/Users/aidev/apps/goldenChart}"
ROOT="$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 "[desktop-pipeline $(date '+%H:%M:%S')] $*"; }
log "=== goldenChart Desktop Pipeline #${BUILD_NUMBER:-local} ==="
log "WORK_TREE=$WORK_TREE"
cd "$WORK_TREE"
# CI 에서는 BUILD_NUMBER 유무와 관계없이 semver bump (로컬 수동 실행 포함)
export DESKTOP_AUTO_BUMP="${DESKTOP_AUTO_BUMP:-1}"
# Git 동기화 (checkout 후 tauri.conf 가 git 버전으로 리셋됨 → bump 필수)
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
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
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
"$WORK_TREE/scripts/setup-desktop-updater-keys.sh"
fi
BUILD_ARGS=(--all)
if [[ -n "${DESKTOP_BUILD_MAC_ONLY:-}" ]]; then BUILD_ARGS=(--mac); fi
if [[ -n "${DESKTOP_BUILD_WIN_ONLY:-}" ]]; then BUILD_ARGS=(--win); fi
if [[ -n "${BUMP_VERSION:-}" ]]; then
BUILD_ARGS+=(--bump-version "$BUMP_VERSION")
fi
export WORK_TREE
export BUILD_NUMBER="${BUILD_NUMBER:-}"
export DESKTOP_BUMP_ON_CI="${DESKTOP_BUMP_ON_CI:-1}"
# mobile pipeline 과 동일: git checkout 직후 semver bump (0.1.18 등 git 구버전 방지)
if [[ -z "${BUMP_VERSION:-}" ]] && [[ "${DESKTOP_BUMP_ON_CI:-1}" == "1" ]]; then
log "CI Desktop version bump..."
BUMPED="$("$WORK_TREE/scripts/bump-desktop-version-from-release.sh")"
export DESKTOP_SKIP_VERSION_BUMP=1
log "Desktop version → $BUMPED (tauri.conf + package.json)"
else
BUMPED="$(node -p "require('$WORK_TREE/desktop/src-tauri/tauri.conf.json').version" 2>/dev/null || echo '?')"
log "Desktop version bump skipped — using v$BUMPED"
fi
"$WORK_TREE/scripts/build-desktop.sh" "${BUILD_ARGS[@]}"
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}}" \
"$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."