d3ro-voice/apps/desktop/electron-builder.yml
yunchan8804 aa65e710ec feat: 배포 파이프라인 — Ollama/sidecar 번들 + NSIS 자동 VC++ + GitLab CI + 온보딩 모달
- sidecar 슬림화: torch/pyannote 제거, ctranslate2 GPU 감지, /diarize 삭제
- Ollama 번들: resources/ollama/에 포터블 바이너리 배치, LocalLLMService 1순위 탐색
- installer.nsh: VC++ 재배포 x64 자동 다운로드(aka.ms 경유) + 사일런트 설치
- electron-builder: extraResources에 ollama 추가, nsis.include로 installer.nsh 연결
- scripts: download-ollama.ps1/sh 신규
- LLM.PULL_MODEL IPC 핸들러 + LocalLLMService.pullModel() 구현 (api/pull 스트리밍)
- 온보딩 모달: gemma4:e4b 미설치 감지 시 자동 표시, 진행률 UI, i18n(ko/en) 키 추가
- .gitlab-ci.yml: Windows 러너에서 sidecar/sox/ollama 준비 후 NSIS 패키징, 태그 시 Release 자동 생성
2026-04-15 19:47:27 +09:00

124 lines
4.5 KiB
YAML

appId: com.d3ro.voice
productName: D3RO Voice
copyright: Copyright © 2026 D3RO
directories:
buildResources: resources
output: release/${version}
files:
- out/**/*
- "!out/**/*.map"
# native 모듈은 asar 외부에 배치
asarUnpack:
- "node_modules/better-sqlite3/**"
- "node_modules/uiohook-napi/**"
- "node_modules/@nut-tree-fork/**"
# ────────────────────────────────────────────────────────────────────
# Windows
# ────────────────────────────────────────────────────────────────────
win:
target:
- target: nsis
arch:
- x64
icon: resources/icons/icon.ico
# ────────────────────────────────────────────────────────────────────
# macOS
# ────────────────────────────────────────────────────────────────────
mac:
category: public.app-category.productivity
icon: resources/icons/icon.icns
target:
- target: dmg
arch:
- arm64
- x64
- target: zip
arch:
- arm64
- x64
hardenedRuntime: true
gatekeeperAssess: false
entitlements: build/entitlements.mac.plist
entitlementsInherit: build/entitlements.mac.plist
# notarize: 환경변수 APPLE_ID / APPLE_APP_SPECIFIC_PASSWORD / APPLE_TEAM_ID 설정 시 활성화.
# CI/dev 환경에서는 NOTARIZE=false로 스킵 가능.
notarize: false
extendInfo:
NSMicrophoneUsageDescription: "D3RO Voice는 음성 인식을 위해 마이크 접근이 필요합니다."
NSCameraUsageDescription: "D3RO Voice는 스크린 컨텍스트 캡처를 위해 화면 녹화 권한이 필요합니다."
NSAppleEventsUsageDescription: "D3RO Voice는 활성 앱 정보를 가져오기 위해 다른 앱 제어 권한이 필요합니다."
NSSystemAdministrationUsageDescription: "D3RO Voice는 전역 핫키 등록을 위해 접근성 권한이 필요합니다."
dmg:
writeUpdateInfo: false
contents:
- x: 130
y: 220
- x: 410
y: 220
type: link
path: /Applications
# ────────────────────────────────────────────────────────────────────
# Linux (참고용)
# ────────────────────────────────────────────────────────────────────
linux:
target:
- AppImage
category: Utility
icon: resources/icons/icon.png
# ────────────────────────────────────────────────────────────────────
# 공통 리소스 번들
# ────────────────────────────────────────────────────────────────────
extraResources:
# 효과음 (플랫폼 공통)
- from: resources/sounds/
to: sounds/
filter:
- "*.wav"
# 앱 아이콘 (트레이 등 런타임에서 참조)
- from: resources/icons/
to: icons/
filter:
- "**/*"
# SoX 바이너리 (번들되어 있으면 번들, 없으면 시스템 PATH)
- from: resources/sox/
to: sox/
filter:
- "**/*"
# Python sidecar (PyInstaller 빌드 결과)
# 빌드 전: python scripts/build-sidecar.py (플랫폼에서 개별 실행)
- from: sidecar-dist/sidecar/
to: sidecar/
filter:
- "**/*"
# Ollama 바이너리
# 빌드 전: powershell scripts/download-ollama.ps1 (Windows)
# bash scripts/download-ollama.sh (macOS/Linux)
# 번들된 ollama가 있으면 LocalLLMService가 1순위로 사용.
- from: resources/ollama/
to: ollama/
filter:
- "**/*"
nsis:
oneClick: false
perMachine: false
allowToChangeInstallationDirectory: true
createDesktopShortcut: true
createStartMenuShortcut: true
shortcutName: D3RO Voice
deleteAppDataOnUninstall: false
include: build/installer.nsh
npmRebuild: true