Files
2026-08-13 17:51:39 +09:00

91 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Electron 데스크톱 앱 재빌드 → chatbotApp public-ai/downloads/ 배포
#
# ./chatbotDesktopApp-chatbot2.0/build-and-publish.sh
# SKIP_WIN=1 ./chatbotDesktopApp-chatbot2.0/build-and-publish.sh # Mac만
# SKIP_MAC=1 ./chatbotDesktopApp-chatbot2.0/build-and-publish.sh # Win만
set -euo pipefail
DESKTOP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "${DESKTOP_DIR}/.." && pwd)"
DOWNLOADS_DIR="${ROOT_DIR}/chatbotApp-chatbot2.0-agent/public-ai/downloads"
export PATH="/opt/homebrew/bin:/usr/local/bin:${PATH}"
export CSC_IDENTITY_AUTO_DISCOVERY="${CSC_IDENTITY_AUTO_DISCOVERY:-false}"
log() { echo "[desktop-build $(date '+%H:%M:%S')] $*"; }
warn() { log "⚠️ $*"; }
fail() { log "ERROR: $*"; exit 1; }
[[ -f "${DESKTOP_DIR}/package.json" ]] || fail "package.json 없음: ${DESKTOP_DIR}"
cd "${DESKTOP_DIR}"
if [[ ! -d node_modules/electron ]]; then
log "npm 의존성 설치..."
npm ci --prefer-offline 2>/dev/null || npm install
else
log "npm 의존성 확인..."
npm ci --prefer-offline 2>/dev/null || npm install --prefer-offline
fi
SKIP_MAC="${SKIP_MAC:-0}"
SKIP_WIN="${SKIP_WIN:-0}"
built_any=false
case "$(uname -s)" in
Darwin)
if [[ "${SKIP_MAC}" != "1" ]]; then
log "잔여 DMG 볼륨 정리..."
hdiutil detach "/Volumes/EX AI Chatbot" -force 2>/dev/null || true
hdiutil detach "/Volumes/EX AI Chatbot Intel" -force 2>/dev/null || true
hdiutil detach "/Volumes/EX AI Chatbot Silicon" -force 2>/dev/null || true
log "Mac Intel + Apple Silicon (dmg+zip) 빌드..."
# electron-builder는 arch별 dir(.app)만 순차 생성 → finalize-mac이 dmg/zip 생성
# (dmg를 동시 빌드하면 hdiutil detach 충돌로 실패함)
npm run dist:mac
built_any=true
fi
if [[ "${SKIP_WIN}" != "1" ]]; then
log "Windows 32/64비트 (Setup+portable) 빌드 (크로스)..."
if npm run dist:win; then
built_any=true
else
warn "Windows 빌드 실패 — Mac 산출물만 배포합니다"
fi
fi
;;
Linux)
if [[ "${SKIP_WIN}" != "1" ]]; then
log "Windows 32/64비트 (Setup+portable) 빌드..."
if npm run dist:win; then
built_any=true
else
warn "Windows 빌드 실패"
fi
fi
if [[ "${SKIP_MAC}" != "1" ]]; then
warn "Linux에서는 Mac 빌드를 건너뜁니다 (SKIP_MAC 강제)"
fi
;;
MINGW*|MSYS*|CYGWIN*|Windows_NT)
if [[ "${SKIP_WIN}" != "1" ]]; then
log "Windows 32/64비트 (Setup+portable) 빌드..."
npm run dist:win
built_any=true
fi
;;
*)
fail "지원하지 않는 OS: $(uname -s)"
;;
esac
$built_any || fail "빌드된 산출물이 없습니다"
log "downloads/ 로 복사..."
npm run publish-downloads
[[ -d "${DOWNLOADS_DIR}" ]] || fail "downloads 디렉터리 없음: ${DOWNLOADS_DIR}"
log "✅ 데스크톱 앱 배포 완료 → ${DOWNLOADS_DIR}"
ls -lh "${DOWNLOADS_DIR}" | sed 's/^/ /'