diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f9627fd..049fd44 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -111,7 +111,8 @@ package-windows: # expose_as는 와일드카드와 병행 불가라 제거. Artifacts 링크는 Job 페이지에서 접근. paths: - apps/desktop/release/*/*.exe - - apps/desktop/release/*/latest.yml + # latest.yml — detectUpdateChannel:false로 채널 고정. *.yml로 방어적 매치. + - apps/desktop/release/*/*.yml - apps/desktop/release/*/*.blockmap expire_in: 90 days rules: @@ -151,6 +152,8 @@ package-macos: - apps/desktop/sidecar/.venv-ci/bin/pip install -r apps/desktop/sidecar/requirements.txt - apps/desktop/sidecar/.venv-ci/bin/python apps/desktop/scripts/build-sidecar.py # 2) SoX 번들 (brew sox → resources/sox/ 복사 + dylib rpath 재배치) + # runner에 sox 미설치면 user-level brew로 설치 (idempotent) + - command -v sox >/dev/null 2>&1 || brew install sox - bash apps/desktop/scripts/install-sox.sh # 3) Ollama 다운로드 (darwin tgz) - bash apps/desktop/scripts/download-ollama.sh @@ -161,7 +164,7 @@ package-macos: paths: - apps/desktop/release/*/*.dmg - apps/desktop/release/*/*.zip - - apps/desktop/release/*/latest-mac.yml + - apps/desktop/release/*/*.yml - apps/desktop/release/*/*.blockmap expire_in: 90 days rules: diff --git a/apps/desktop/electron-builder.yml b/apps/desktop/electron-builder.yml index 03fadbc..ad392a9 100644 --- a/apps/desktop/electron-builder.yml +++ b/apps/desktop/electron-builder.yml @@ -27,6 +27,10 @@ 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/**" diff --git a/scripts/ci/publish-gitlab-release.mjs b/scripts/ci/publish-gitlab-release.mjs index 78bde58..13aa636 100644 --- a/scripts/ci/publish-gitlab-release.mjs +++ b/scripts/ci/publish-gitlab-release.mjs @@ -31,7 +31,7 @@ if (!/^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$/.test(version)) { const releaseDirectory = fileURLToPath(new URL(`../../apps/desktop/release/${version}/`, import.meta.url)); // 업로드 대상 수집 — 설치파일 + 업데이터 메타데이터만 (unpacked 디렉토리 제외) -const ASSET_PATTERN = /(\.exe|\.dmg|\.zip|\.blockmap|^latest(-mac|-linux)?\.yml)$/; +const ASSET_PATTERN = /(\.exe|\.dmg|\.zip|\.blockmap|^(latest|alpha|beta)(-mac|-linux)?\.yml)$/; const files = []; for (const name of await readdir(releaseDirectory)) { @@ -130,7 +130,7 @@ function safeAssetName(name) { } function isUpdateMetadata(name) { - return /(?:\.blockmap$|^latest(?:-mac|-linux)?\.yml$)/.test(name); + return /(?:\.blockmap$|^(?:latest|alpha|beta)(?:-mac|-linux)?\.yml$)/.test(name); } async function buildDescription() {