#!/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" 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 "$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" 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 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" 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_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 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} v${BUILT_VER}}" \ "$WORK_TREE/scripts/publish-desktop-update.sh" 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 if [[ -d "$WORK_TREE/dist-desktop" ]]; then log "Artifacts ready: $WORK_TREE/dist-desktop" fi 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 — v${BUILT_VER}" log "Published: ${DESKTOP_UPDATE_BASE_URL}/latest.json"