feat(release): switchboard 릴리스 체계 이식 — Mac 배포 + Registry 게시 + 자동 업데이트

- package-macos CI job: arm64 무서명(ad-hoc) dmg+zip, D3RO_MAC_RUNNER 변수 게이트
- sync-version.mjs: 태그 → package.json 버전 동기화
- publish-gitlab-release.mjs: Generic Package Registry(버전별+latest) 업로드 + Release 생성
- electron-builder: publish generic(latest.yml 생성), 공백 없는 artifactName, mac arm64 단일화
- UpdateService: electron-updater 4h 주기 체크 + 재시작 다이얼로그 (update-feed.ts SSOT)
- @rollup/rollup-win32-x64-msvc → optionalDependencies (mac npm ci EBADPLATFORM 해소)
- docs/deployment/release-guide.md: runner 등록·feed 설정·파일명 규칙 가이드

리뷰 워크플로(3관점 적대적 검증)로 확정된 결함 8건 반영:
publish 부재로 latest.yml 미생성, 파일명 공백 vs 레지스트리 404,
mac EBADPLATFORM, needs optional의 실패 미커버, DELETE 권한 의존,
CHANGELOG regex 경계, --arm64 무시, 다이얼로그 parent 부재
This commit is contained in:
Yun Chan 2026-07-21 12:43:16 +09:00
parent 8f7d300b89
commit 3beba99668
11 changed files with 776 additions and 2291 deletions

View file

@ -2,11 +2,27 @@
> 마지막 갱신: 2026-07-21 (Whisper large-v3-turbo 전환 + 온보딩 2단계 부트스트랩)
## 모델 현대화 트랙 (2026-07-21) — B 완료, A 진행 예정
## 모델 현대화 트랙 (2026-07-21) — B 완료, A 완료(코드), C 완료(코드)
### 방향 결정 (사용자 컨펌)
- **A+B 병행**: B(로컬 Whisper turbo 전환 + 부트스트랩 진행률 UI) 먼저 → A(OpenAI gpt-realtime-2.1 라이브 음성 대화 Premium 백엔드)
- 병렬 트랙: `D:\workspace\agent-switchboard-client`에 D3ROVoice와 동일한 GitLab CI 배포 체계 구축 (백그라운드 에이전트 진행)
- **C (방향 반전 확인됨)**: agent-switchboard-client의 릴리스 체계를 **D3RO로 이식** (원래 지시가 반대로 전달됐었음 — 대상은 이미 우수한 파이프라인 보유). Mac 배포 + Release 자동화 + 자동 업데이트.
### C 완료(코드): switchboard 릴리스 체계 이식 ✅
- **package-macos CI job**: arm64 무서명(ad-hoc, `identity=-` + hardenedRuntime=false + CSC_IDENTITY_AUTO_DISCOVERY=false — switchboard 검증 조합). 사이드카 venv PyInstaller + brew sox 번들 + Ollama darwin. `D3RO_MAC_RUNNER="true"` CI 변수 게이트 + allow_failure(mac 실패 시 Windows 단독 릴리스).
- **sync-version.mjs**: 태그 → apps/desktop/package.json 버전 동기화 (기존 "Setup 1.0.0.exe" 불일치 해소)
- **publish-gitlab-release.mjs**: 산출물을 Generic Package Registry 버전별+latest 업로드 + GitLab Release asset 링크 (기존 PowerShell curl 잡 대체). latest.yml 필수 검증, latest 삭제는 best-effort.
- **electron-builder.yml**: `publish: generic` 추가(latest.yml 생성 트리거 — 없으면 update info 미생성!), 공백 없는 artifactName(`D3RO-Voice-Setup-*`), mac arm64 단일화(x64 사이드카 불가)
- **UpdateService** (신규, 싱글톤+EventEmitter): electron-updater generic provider, 4h 주기, 다운로드 완료 시 재시작 다이얼로그(mainWindow parent). `update-feed.ts` SSOT — URL 미기입 시 비활성. Windows 전용(mac 무서명은 Squirrel.Mac 제약).
- **의존성**: electron-updater 추가, `@rollup/rollup-win32-x64-msvc`를 optionalDependencies로 이동(mac npm ci EBADPLATFORM 해소), lockfile에서 workspace 밖 RN 의존성 163개 정리
- **가이드**: `docs/deployment/release-guide.md` — mac runner 등록, feed URL 2곳 SSOT, 파일명 규칙, 후속(서명/공증/Ed25519) 정리
- **검증**: ultracode 리뷰 워크플로(16 에이전트, 3관점 → 적대적 검증)로 결함 8건(중복 제외) 확정 → 전부 수정. tsc 0 / vitest 41 / YAML·mjs OK.
#### C 남은 사용자 액션
1. MacBook에 gitlab-runner 등록 (tags: macos+arm64, brew sox/Xcode CLT/Python 3.11+) → CI 변수 `D3RO_MAC_RUNNER="true"`
2. 첫 릴리스 후 프로젝트 ID 확인 → `update-feed.ts` + `electron-builder.yml publish.url` 기입 (2곳 동일)
3. GitLab 설정 "Allow anyone to pull from Package Registry" 활성화
4. 다음 태그(v0.1.1-alpha 권장)로 전체 파이프라인 실측
### B 완료: Whisper large-v3-turbo 전환 + 온보딩 2단계 부트스트랩 ✅
- **기본 STT 모델**: `base``large-v3-turbo` (CONFIG_DEFAULTS). 6배 빠름, 정확도 손실 1~2%, 1.6GB