- 앱 아이콘: icon.svg 마스터(d3ro 브랜드 — 메탈 섀시+오렌지 웨이브) → png/ico 생성 스크립트(generate-icons.mjs, sharp) + electron-builder win/mac 연결 - 트레이: createEmpty() 빈 아이콘 → 실제 앱 아이콘 (getAppIconPath) - 마이크 테스트: 초기 무음 level:0을 종료로 오인하던 조기 종료 버그 — AUDIO.TEST_LEVEL에 done 플래그 신설(SSOT), STOP 버튼이 실제 캡처 중지, testDevice 실패 시 상태 롤백
148 lines
6.6 KiB
YAML
148 lines
6.6 KiB
YAML
appId: com.d3ro.voice
|
|
productName: D3RO Voice
|
|
copyright: Copyright © 2026 D3RO
|
|
# monorepo(npm workspaces)에서 electron이 루트 node_modules로 호이스팅되어
|
|
# 자동 감지가 실패하는 문제를 피하려고 명시적으로 버전 고정.
|
|
electronVersion: "33.3.0"
|
|
|
|
directories:
|
|
# buildResources를 build/로 지정 — resources/icons/가 비어있어 아이콘 자동 스캔이 실패하는 것을 우회.
|
|
# 아이콘 준비되면 build/icon.png(또는 .ico)를 두고 win.icon을 명시.
|
|
buildResources: build
|
|
output: release/${version}
|
|
|
|
files:
|
|
- out/**/*
|
|
- "!out/**/*.map"
|
|
|
|
# ────────────────────────────────────────────────────────────────────
|
|
# 자동 업데이트 feed — 이 설정이 있어야 electron-builder가
|
|
# latest.yml / latest-mac.yml (update info)를 생성한다.
|
|
# generic provider는 파일 생성만 트리거하고 직접 업로드는 하지 않음
|
|
# (업로드는 scripts/ci/publish-gitlab-release.mjs 담당).
|
|
# d3r0/voice 프로젝트 ID = 1172 —
|
|
# src/main/update-feed.ts의 UPDATE_FEED_URL과 반드시 동일 값 유지.
|
|
# ────────────────────────────────────────────────────────────────────
|
|
publish:
|
|
provider: generic
|
|
url: "https://gitlab.twentyoz.kr:8443/api/v4/projects/1172/packages/generic/d3ro-voice/latest"
|
|
|
|
# prerelease 버전(0.1.1-alpha)에서 채널을 "alpha"로 감지해 alpha.yml을 만드는 동작 차단 —
|
|
# electron-updater(기본 채널 latest)가 latest.yml을 찾으므로 항상 latest 채널로 고정.
|
|
detectUpdateChannel: false
|
|
|
|
# native 모듈은 asar 외부에 배치
|
|
asarUnpack:
|
|
- "node_modules/better-sqlite3/**"
|
|
- "node_modules/uiohook-napi/**"
|
|
- "node_modules/@nut-tree-fork/**"
|
|
|
|
# ────────────────────────────────────────────────────────────────────
|
|
# Windows
|
|
# 주: icon 지정 시 resources/icons/icon.ico 필요. 초기 배포에선 생략하여
|
|
# electron 기본 아이콘 사용(아이콘 준비되면 win.icon 라인 추가).
|
|
# ────────────────────────────────────────────────────────────────────
|
|
win:
|
|
icon: build/icon.ico
|
|
target:
|
|
- target: nsis
|
|
arch:
|
|
- x64
|
|
|
|
# ────────────────────────────────────────────────────────────────────
|
|
# macOS
|
|
# ────────────────────────────────────────────────────────────────────
|
|
mac:
|
|
# icns는 electron-builder가 build/icon.png(1024)에서 자동 생성
|
|
icon: build/icon.png
|
|
category: public.app-category.productivity
|
|
# 파일명 공백 금지 — GitLab Generic Package Registry가 공백을 불허해
|
|
# latest-mac.yml의 url과 레지스트리 업로드명이 어긋나면 업데이트 다운로드 404.
|
|
artifactName: "D3RO-Voice-${version}-${arch}.${ext}"
|
|
# x64 제외 — 사이드카(PyInstaller)가 arm64 전용이라 x64 산출물은 깨진 빌드가 됨.
|
|
# Intel Mac 수요 발생 시 x64 runner에서 별도 빌드.
|
|
target:
|
|
- target: dmg
|
|
arch:
|
|
- arm64
|
|
- target: zip
|
|
arch:
|
|
- arm64
|
|
hardenedRuntime: true
|
|
gatekeeperAssess: false
|
|
entitlements: build/entitlements.mac.plist
|
|
entitlementsInherit: build/entitlements.mac.plist
|
|
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
|
|
|
|
# ────────────────────────────────────────────────────────────────────
|
|
# 공통 리소스 번들
|
|
# ────────────────────────────────────────────────────────────────────
|
|
extraResources:
|
|
# 앱 아이콘 (트레이/런타임용 — paths.ts getAppIconPath)
|
|
- from: build/icon.ico
|
|
to: icons/icon.ico
|
|
- from: build/icon.png
|
|
to: icons/icon.png
|
|
|
|
# 효과음 (플랫폼 공통)
|
|
- from: resources/sounds/
|
|
to: sounds/
|
|
filter:
|
|
- "*.wav"
|
|
|
|
# SoX 바이너리
|
|
- from: resources/sox/
|
|
to: sox/
|
|
filter:
|
|
- "**/*"
|
|
|
|
# Python sidecar (PyInstaller 빌드 결과)
|
|
- from: sidecar-dist/sidecar/
|
|
to: sidecar/
|
|
filter:
|
|
- "**/*"
|
|
|
|
# Ollama 바이너리 (포터블 zip을 사전 배치)
|
|
- from: resources/ollama/
|
|
to: ollama/
|
|
filter:
|
|
- "**/*"
|
|
|
|
nsis:
|
|
# 파일명 공백 금지 — mac.artifactName 주석과 동일한 이유 (latest.yml url 정합)
|
|
artifactName: "D3RO-Voice-Setup-${version}-${arch}.${ext}"
|
|
# oneClick=false + perMachine=false 조합이 System.dll 0xc0000005 크래시 사례(#7921).
|
|
# 사내 테스트 단계에선 oneClick=true로 전환하여 크래시 경로 회피.
|
|
oneClick: true
|
|
perMachine: false
|
|
allowToChangeInstallationDirectory: false
|
|
createDesktopShortcut: true
|
|
createStartMenuShortcut: true
|
|
shortcutName: D3RO Voice
|
|
deleteAppDataOnUninstall: false
|
|
# installer.nsh 비활성화 유지 (System.dll 크래시 방지)
|
|
|
|
npmRebuild: true
|