docs(release): record the v1.5.0 publish and download refresh
Some checks failed
deploy-site / deploy (push) Failing after 30s

Notes the canonical feed now serving 1.5.0 (installer hash verified), the
runtime and portable aliases pointing at the same version, and the landing
site reporting commit 5c11ee2 / 1.5.0. Also records that the site's CI
deployment still fails without a Cloudflare API token, so this refresh went
out through an authenticated local deploy, and that the stale-alias bug found
while publishing is fixed and closed.
This commit is contained in:
Yun Chan 2026-09-23 16:39:48 +09:00
parent 0e4f2de4d0
commit 856e375f3e
5 changed files with 40 additions and 13 deletions

View file

@ -6,7 +6,7 @@
| 항목 | 정본 | 현재 판정 |
|---|---|---|
| 제품 버전 | `release/product-version.json`: `1.3.0` | source SSOT 확정 |
| 제품 버전 | `release/product-version.json`: `1.5.0` | source SSOT 확정 |
| Android | versionCode `1030001` | production AAB 미생성 |
| iOS | build `1030001` | production archive 미검증 |
| Android upload key | alias `d3ro-upload-20260821`, cert SHA-256 `4F:AC:69:24:...:15:2B:54` | external PKCS12·user-only ACL·Credential Manager·private-key readback GREEN; CI secret·복구 백업·AAB signer 대조 대기 |
@ -16,10 +16,10 @@
| Firebase | Console `u/0`, `u/1` 모두 D3RO project 없음 | 사용자 승인 후 project·Android app 생성 필요 |
| AdMob | app `ca-app-pub-1039714767792854~6427959892`; banner `/9840591290`; rewarded `/2255790918` | SSOT 확정. `검토 필요`·`광고 게재 제한`·store 미연결·결제 프로필 미완료 |
| updater feed (canonical) | `https://git.chanpaca.net/api/packages/yunchan/generic/d3ro-voice/latest` | Forgejo Generic Registry. GitLab project 1172은 legacy mirror |
| release notes | `CHANGELOG.md` `## [1.3.0]` + Play changelog `1030001.txt` (ko/en) | 태그 전 확정·검증 필수 |
| 직전 게시본 | Forgejo Release `v1.1.0` (2026-09-15 게시, unsigned installer) | `v1.2.0`·`v1.3.0` 파이프라인은 Forgejo 저장소 시크릿이 없어 실패 = 게시본 없음. 설치본이 있는 마지막 버전은 `1.1.0` |
| release notes | `CHANGELOG.md` `## [1.5.0]` + Play changelog `1050000.txt` (ko/en) | 태그 전 확정·검증 필수 |
| 직전 게시본 | Forgejo Generic Registry `1.5.0` (2026-09-23 게시, unsigned installer + runtime/portable) | `v1.2.0`·`v1.3.0` 파이프라인은 서명/사이드카 선행 조건에서 실패했고 `v1.4.0`은 게시되지 않았다. `1.3.2`·`1.3.7`·`1.5.0`은 무서명 로컬 게시 경로(GAP-REL-06)를 사용했다 |
live canonical feed(`git.chanpaca.net/.../d3ro-voice/latest`)의 `latest.yml`은 현재 `1.1.0`을 보고한다. 시크릿을 채우고 `v1.3.0` 파이프라인이 GREEN이 되면 그 값이 `1.3.0`으로 올라가고, 그때부터 기존 설치본이 자동 업데이트를 받는다.
live canonical feed(`git.chanpaca.net/.../d3ro-voice/latest`)의 `latest.yml`은 현재 `1.5.0`을 보고한다(2026-09-23 무서명 로컬 게시). `runtime-latest/runtime.json`과 `portable-latest/portable.json`도 `1.5.0`이다. 서명 인증서를 확보하면 이보다 높은 버전을 서명 게시해 대체한다.
## desktop 릴리스 파이프라인
@ -110,6 +110,22 @@ https://gitlab.twentyoz.kr:8443/api/v4/projects/1172/packages/generic/d3ro-voice
- **회수(rollback)**: `stagingPercentage`를 낮추거나 `killSwitch`를 켠다. 이미 배포된 버전은 되돌리지 않고 더 높은 patch로 forward-fix한다.
## `1.5.0` 릴리스 기록 (2026-09-23)
서명 인증서가 없는 상태라 CI 서명 파이프라인 대신 **무서명 로컬 게시**로 내보냈다.
1. `release/product-version.json`을 `1.5.0`(android/iOS `1050000`, 2026-09-23)으로 올리고 `npm run version:sync` → `npm run version:check` GREEN.
2. `CHANGELOG.md` `## [1.5.0] - 2026-09-23` 확정. `site/src/release.ts`와 `apps/web/src/lib/desktop-release.ts`는 `sync-version`이 자동 반영.
3. 게이트 GREEN: `version:check`, `release:metadata`, `security:secrets`, `check:design`, `lint`, `typecheck`, 데스크톱 빌드, `check:desktop-renderer`.
4. 커밋 후 `npm run release:tag` → annotated `v1.5.0` → `git push chanpaca main` + `git push chanpaca v1.5.0` (legacy mirror `origin`에도 함께).
5. 런타임을 먼저 게시: `npm run sidecar:build`(UIA 포함) → `npm run release:portable:build` → `npm run release:portable`. `runtime-latest/runtime.json`과 `portable-latest/portable.json`이 `1.5.0`을 보고하고, 로컬 해시와 원격 sha256이 일치함을 확인했다.
6. 업데이터 게시: `npm run release:updater -- --build --ack-unsigned`. 설치본 `D3RO-Voice-Setup-1.5.0-x64.exe` = 91.2MiB(95,612,108 bytes), `latest.yml` 버전 `1.5.0`, sha512가 로컬과 일치하며 canonical feed에서 익명 206을 반환한다.
7. 사이트: CI `deploy` 워크플로는 `CF_API_TOKEN` 시크릿이 없어 여전히 실패한다(GAP-REL-09b). 대신 인증된 로컬 wrangler로 `npm run build --prefix site` → release-identity 작성 → `npx wrangler pages deploy site/dist --project-name d3ro --branch main`을 실행했고, `https://d3ro.chanpaca.net/release-identity.json`이 commit `5c11ee2`, version `1.5.0`을 보고한다. 라이브 번들이 `D3RO-Voice-Setup-1.5.0-x64.exe`를 계산한다.
8. 게시 중 발견: `publish-portable-release.mjs`의 "동일 파일 건너뛰기"가 1MiB 초과 파일을 크기만으로 비교해, 크기가 우연히 같은 `runtime-latest` 볼륨 일부를 낡은 바이트로 남겼다. 파일 목록 API의 sha256으로 정확히 비교하고, 내용이 다르면 별칭 버전 전체를 지우고 다시 올리도록 수정했다(GAP-REL-11).
9. **남은 게이트**: 실제 설치본에서 자동 업데이트 E2E, Electron GUI에서 제안 오버레이·수락 삽입·비밀번호 차단 검증(GAP-INPUT-07), 모바일 production은 별개.
## `1.3.0` 릴리스 절차 (canonical = Forgejo Actions)
**선행 조건 — Forgejo 저장소 시크릿.** `.forgejo/workflows/release.yml`은 아래 4개가