fix(release): restore automatic updates by shipping the speech engine on demand
Some checks failed
deploy-site / deploy (push) Failing after 1m15s

Auto-update could not work at all: the installer was 189 MB because it carried
the local speech engine and ffmpeg, and the download feed rejects uploads over
about 100 MiB, so update metadata could never be published.

The installer now leaves those components out and the app fetches them the first
time they are needed, verifying every part and the joined archive before
installing. The installer is 90.6 MiB, the update feed is published again, and
updates stay small because the engine is not re-sent on every release.

The fetch is visible and recoverable: the download runs with progress, a failed
install cleans up after itself, and Settings > STT shows the runtime status with
a manual download action for when the automatic one cannot run.
This commit is contained in:
Yun Chan 2026-09-18 13:51:49 +09:00
parent 0411f389d9
commit 0fbbbc1756
42 changed files with 1137 additions and 123 deletions

View file

@ -4,6 +4,10 @@ copyright: Copyright © 2026 D3RO
# monorepo(npm workspaces)에서 electron이 루트 node_modules로 호이스팅되어
# 자동 감지가 실패하는 문제를 피하려고 명시적으로 버전 고정.
electronVersion: "33.4.11"
# 설치 크기 절감 — 지원 로케일만 포함한다
electronLanguages:
- ko
- en-US
directories:
# buildResources를 build/로 지정 — resources/icons/가 비어있어 아이콘 자동 스캔이 실패하는 것을 우회.
@ -14,6 +18,8 @@ directories:
files:
- out/**/*
- "!out/**/*.map"
# ffmpeg 정적 바이너리(61MB)는 설치본에 넣지 않는다 — 필요할 때 런타임으로 내려받는다
- "!node_modules/@ffmpeg-installer/**"
# ────────────────────────────────────────────────────────────────────
# 자동 업데이트 feed — 이 설정이 있어야 electron-builder가
@ -36,8 +42,6 @@ asarUnpack:
- "node_modules/better-sqlite3/**"
- "node_modules/uiohook-napi/**"
- "node_modules/@nut-tree-fork/**"
# ffmpeg 정적 바이너리는 실행 파일이므로 asar 내부에서 spawn할 수 없다
- "node_modules/@ffmpeg-installer/**"
# ────────────────────────────────────────────────────────────────────
# Windows
@ -115,20 +119,11 @@ extraResources:
- from: resources/sox/
to: sox/
# faster-whisper STT 사이드카 (PyInstaller onedir: sidecar.exe + _internal/).
# 반드시 존재해야 한다. 누락되면 로컬 전사가 전혀 동작하지 않는다.
# 빌드: npm --prefix apps/desktop run sidecar:build
# electron-builder는 이 트리를 재귀로 복사한다(_internal 포함).
# 서명 검증에 실패하면 복사가 중간에 끊겨 _internal이 빠지므로,
# 서명 없이 로컬 검증할 때는 -c.win.forceCodeSigning=false 를 사용한다.
- from: sidecar-dist/sidecar/
to: sidecar/
filter:
- "**/*"
# 주의: 로컬 AI 런타임(사이드카 엔진, ffmpeg)은 여기에 넣지 않는다.
# 포함하면 설치본이 Cloudflare 업로드 한도(100MiB)를 넘어 자동 업데이트 메타데이터를
# 게시할 수 없다(실측: 엔진 포함 189MB vs 엔진 제외 90.5MiB). 런타임은 처음 필요할 때
# RuntimeProvisioner가 feed에서 내려받아 검증한 뒤 해제해 설치한다.
# ffmpeg (파일 전사/미디어 변환용). CI가 resources/ffmpeg/에 배치한다.
- from: resources/ffmpeg/
to: ffmpeg/
# Ollama 바이너리 (포터블 zip을 사전 배치)
- from: resources/ollama/