Skip to content

Commit 7befca3

Browse files
committed
ci(release): move checksums to integrity tsv (2026.6.15.0-7E63)
1 parent 0dc8051 commit 7befca3

6 files changed

Lines changed: 18 additions & 24 deletions

File tree

.github/RELEASE_WORKFLOW.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ integrity TSV are emitted under `dist/` for the workflow to upload.
2929
## Body composition
3030

3131
The release body is the verbatim output of
32-
[Generate-ReleaseNotes.ps1](scripts/Generate-ReleaseNotes.ps1). The body keeps
33-
a bare `SHA256: <hash>` line for older updaters; the full integrity table is
34-
uploaded as `WKVRCProxy-v<version>.integrity.tsv`. Layout:
32+
[Generate-ReleaseNotes.ps1](scripts/Generate-ReleaseNotes.ps1). The body points
33+
readers at `WKVRCProxy-v<version>.integrity.tsv`; the checksum values live in
34+
that TSV asset. Layout:
3535

3636
```
3737
# WKVRCProxy <tag>
@@ -46,11 +46,9 @@ uploaded as `WKVRCProxy-v<version>.integrity.tsv`. Layout:
4646
4747
**Full Changelog**: <compare-url>
4848
49-
SHA256: <hash>
50-
5149
## File integrity
5250
53-
Full SHA256 hashes are attached as `<integrity asset>`.
51+
Full SHA256 hashes are attached as `<integrity TSV>`.
5452
5553
[Additional notes (extras file, if present)]
5654
```

.github/scripts/Generate-ReleaseNotes.ps1

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
1. Title (h1: "<repo> <tag>")
1111
2. What's Changed (auto-changelog from the commit slice between prev tag
1212
and this tag; bucketed by conventional-commit prefix)
13-
3. File integrity (legacy bare SHA256 line plus a pointer to the attached
14-
integrity TSV asset)
13+
3. File integrity (pointer to the attached integrity TSV asset)
1514
4. More (from .github/release-template/links.md, with token substitution)
1615
5. Install (fresh) (from .github/release-template/install.md)
1716
6. Uninstall (from .github/release-template/uninstall.md)
@@ -73,7 +72,7 @@
7372
.PARAMETER Manifest
7473
Path to the per-file manifest emitted by build.ps1 alongside the zip.
7574
Tab-separated <sha256>\t<size_bytes>\t<relative_path> per line. Used
76-
to compose the inner-file rows of the File integrity section.
75+
to confirm that the integrity TSV asset can cover the release contents.
7776
Required (along with -ZipPath, -ZipSize, -ZipSha256) for the File
7877
integrity section to render; otherwise that section is skipped.
7978
@@ -566,15 +565,12 @@ if ($Repo -and $prevTag) {
566565
}
567566

568567
# --- File integrity ---
569-
# Keep a bare SHA256 line in the body for older updaters. Full integrity data
570-
# is published as a separate .integrity.tsv release asset.
568+
# Full integrity data is published as a separate .integrity.tsv release asset.
571569
$includeIntegrity = $ZipPath -and $ZipSha256 -and $ZipSize -gt 0 -and $Manifest -and (Test-Path -LiteralPath $Manifest)
572570
if ($includeIntegrity) {
573571
$zipNameForLine = if ($zipNameToken) { $zipNameToken } else { Split-Path -Leaf $ZipPath }
574572
$integrityName = $zipNameForLine -replace '\.zip$', '.integrity.tsv'
575573
[void]$sb.AppendLine()
576-
[void]$sb.AppendLine("SHA256: $($ZipSha256.ToUpper())")
577-
[void]$sb.AppendLine()
578574
[void]$sb.AppendLine("## File integrity")
579575
[void]$sb.AppendLine()
580576
[void]$sb.AppendLine("Full SHA256 hashes are attached as ``$integrityName``.")

.github/scripts/Test-GenerateReleaseNotes.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ try {
159159
-Manifest $manifestPath `
160160
-SkipScrub) -join "`n"
161161

162-
Assert-Contains -Text $IntegrityNotes -Expected "SHA256: $zipSha"
163162
Assert-Contains -Text $IntegrityNotes -Expected 'WKVRCProxy-v2026.5.3.0.integrity.tsv'
163+
Assert-NotContains -Text $IntegrityNotes -Unexpected "SHA256: $zipSha"
164164
Assert-NotContains -Text $IntegrityNotes -Unexpected 'WKVRCProxy.exe '
165165

166166
Write-Host 'Generate-ReleaseNotes tests passed.'

.github/workflows/release.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ name: Release
88
# zip filename all match the tag. build.ps1 validates the shape and fails fast on a malformed tag.
99
# Builds the full distribution via build.ps1 on a Windows runner — required because the build
1010
# produces win-x64 exes and uses PowerShell-only cmdlets — then attaches the zip
11-
# from dist/ to a GitHub release with a SHA256 line so updater.exe can verify the download.
11+
# from dist/ to a GitHub release with an integrity TSV so updater.exe can verify the download.
1212
#
1313
# Changelog promotion: before the build runs, .github/scripts/Update-Changelog.ps1 renames the
1414
# "## Unreleased" heading in CHANGELOG.md to "## [vTAG] - DATE", linking
@@ -141,7 +141,7 @@ jobs:
141141
Write-Host "Release zip: $($zip.Name)"
142142
Write-Host "Release manifest: $($manifest.Name)"
143143
Write-Host "Integrity asset: $integrityName"
144-
Write-Host "SHA256: $hash"
144+
Write-Host "Zip digest: $hash"
145145
146146
- name: Generate release body
147147
id: changelog
@@ -155,9 +155,9 @@ jobs:
155155
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
156156
run: |
157157
# Composes the full release body: title + auto-changelog slice +
158-
# legacy zip SHA + integrity-asset pointer + four
159-
# templated evergreen sections (More / Install / Uninstall / What
160-
# you need to do) + optional .github/release-extras/<tag>.md.
158+
# integrity-asset pointer + four templated evergreen sections
159+
# (More / Install / Uninstall / What you need to do) + optional
160+
# .github/release-extras/<tag>.md.
161161
# See .github/scripts/Generate-ReleaseNotes.ps1 for filtering rules,
162162
# token substitution, and scrub gates.
163163
$body = & ./.github/scripts/Generate-ReleaseNotes.ps1 `

src/WKVRCProxy.Tests/UpdaterShaTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
namespace WKVRCProxy.Tests;
99

10-
// Updater's SHA256-line regex extraction + ComputeSha256 + tag-version
11-
// parsing. These are the gates between "tampered/corrupted zip" and
12-
// "installed-on-user-machine" a regression here lets bad zips through.
10+
// Updater checksum extraction + ComputeSha256 + tag-version parsing. These
11+
// are the gates between "tampered/corrupted zip" and "installed-on-user-
12+
// machine"; a regression here lets bad zips through.
1313
public class UpdaterShaTests
1414
{
1515
[Fact]

src/WKVRCProxy.Updater/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ internal static Version ParseTagVersion(string tag)
252252
if (string.IsNullOrEmpty(zipUrl))
253253
throw new InvalidOperationException("No .zip asset on latest release.");
254254

255-
// Pull the SHA256: <hex> line out of the release body. release.yml
256-
// always emits one; releases published by other paths won't.
255+
// Prefer the integrity TSV asset, then GitHub's asset digest. Keep
256+
// the body parser as a compatibility fallback for older releases.
257257
string body = releaseElement.TryGetProperty("body", out var b) ? (b.GetString() ?? "") : "";
258258
string? sha = await ResolveExpectedZipShaAsync(http, zipName, zipDigest, integrityUrl, body)
259259
.ConfigureAwait(false);

0 commit comments

Comments
 (0)