feat(release): make the signing-free install work with nothing but Windows
Some checks failed
deploy-site / deploy (push) Failing after 3m26s

The manual install path still needed 7-Zip, which the target machine does not
have, so "installable without a certificate" was not yet true.

The channel now also publishes the app as byte-split zip parts, and the install
script joins them and extracts with the built-in Windows Expand-Archive after
verifying every part and the joined archive. Version 1.3.1 republishes the
channel from a single build, because a version's artifacts can only match one
build and published volumes are never overwritten.
This commit is contained in:
Yun Chan 2026-09-18 12:03:18 +09:00
parent c35c6f3e95
commit 0411f389d9
30 changed files with 234 additions and 118 deletions

View file

@ -67,6 +67,21 @@ for (const volume of index.volumes) {
payloads.push({ name: volume.name, bytes, contentType: 'application/octet-stream' })
}
// 수동 설치용 zip 분할 부품 (Windows 내장 Expand-Archive로 해제 — 7-Zip 불필요)
for (const part of index.zipParts ?? []) {
const partPath = join(releaseDir, part.name)
if (!existsSync(partPath)) {
console.error(`[portable] zip 부품이 없습니다: ${partPath}`)
process.exit(1)
}
const partBytes = await readFile(partPath)
const partSha = createHash('sha256').update(partBytes).digest('hex')
if (partSha !== part.sha256) {
console.error(`[portable] zip 부품 sha256 불일치 (${part.name})`)
process.exit(1)
}
payloads.push({ name: part.name, bytes: partBytes, contentType: 'application/octet-stream' })
}
payloads.push({
name: 'portable.json',
bytes: Buffer.from(`${JSON.stringify(index, null, 2)}\n`, 'utf8'),
@ -145,7 +160,7 @@ console.log(
' scoop bucket add d3ro https://git.chanpaca.net/yunchan/d3ro-voice.git',
' scoop install d3ro/d3ro-voice',
'',
' 수동 설치(7-Zip 필요):',
' 수동 설치(추가 도구 불필요):',
` irm ${FEED}/portable-latest/install-d3ro-voice.ps1 | iex`,
'',
' 참고: 이 채널은 서명이 없어 자동 업데이트 피드를 갱신하지 않습니다.',