91 lines
2.9 KiB
Bash
Executable File
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/^/ /'
|