Windows build hardening — single-source VERSION, MajorUpgrade, clean uninstall, signing-ready#29
Open
StephenLovino wants to merge 3 commits into
Open
Windows build hardening — single-source VERSION, MajorUpgrade, clean uninstall, signing-ready#29StephenLovino wants to merge 3 commits into
StephenLovino wants to merge 3 commits into
Conversation
…pgrade, clean uninstall, signing-ready Replaces the noob-tier 1.0.0-hardcoded-in-4-places Windows build with an enterprise pipeline. Bump VERSION and everything downstream follows. Build infrastructure - Add Sources/BetterCastReceiverDesktop/VERSION as the single source of truth - CMake reads VERSION, generates Version.h (consumed by main.cpp) and app.rc (VS_VERSION_INFO block — EXE File Properties now populate) - CI reads VERSION and passes both display + numeric versions to NSIS - Versioned artifact names (BetterCast-Setup-Windows-x64-<version>) Installer (full rewrite) - Major-upgrade pattern: detect previous install via uninstall reg key, run silent uninstall before laying down new files - VDD section is hidden + SectionIn RO (was user-deselectable, frequent support failure mode); components page removed - Driver install via pnputil only, hard-fails if MttVDD.inf missing - Capture published oem*.inf name post-install (PowerShell helper) into HKLM\Software\BetterCast\VDDOemInf; uninstaller reads it back and runs pnputil /delete-driver /force. Fixes prior bug where uninstall looked for VirtualDisplayDriver.inf and silently skipped removal. - 64-bit guard, SetRegView 64, taskkill on running instance, App Paths reg, QuietUninstallString, HelpLink, InstallLocation, EstimatedSize CI hardening - Pin to windows-2022 (was windows-latest) - Concurrency group cancels superseded builds - Dynamic VDD asset discovery via GitHub API (survives upstream renames, fixes prior x86-vs-x64 mismatch) - Hard-fail if MttVDD.inf missing post-extract — refuse to ship broken installer (was silent /nonfatal) - Verify EXE version metadata after build - Optional code-signing step gated on WINDOWS_CERT_PFX_BASE64 + WINDOWS_CERT_PASSWORD secrets; skipped silently if absent. Signs both EXE and installer with DigiCert timestamping. Ready for SignPath. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
VDD release 25.7.23 ships the Intel driver as VirtualDisplayDriver-x86.Driver.Only.zip — the "-x86" suffix is a historical misnomer; the package contains the IddCx driver that runs on x64 Windows. The only true bitness split upstream is ARM64 vs Intel. Previous CI (now reverted) tried to match an x64-named asset that does not exist. Restore the working behaviour but make it explicit and document the misnomer so the next person doesn't repeat my mistake. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The nicehash/NSIS mirror download failed and the winget fallback isn't available on windows-2022, breaking the Build installer step. The runner image already ships NSIS at C:\Program Files (x86)\NSIS\ on PATH, so we just verify makensis is reachable rather than reinstalling. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces the hardcoded-1.0.0-in-4-places Windows build with an enterprise pipeline. Bump
Sources/BetterCastReceiverDesktop/VERSIONand CMake, the EXE resource, the NSIS installer, and CI all follow.What this fixes (from prior support pain)
VirtualDisplayDriver-x86.Driver.Only.zip. Now discovers the x64 asset dynamically via GitHub API and survives upstream renames.VirtualDisplayDriver.inf(wrong name). Now captures the publishedoem*.infname intoHKLM\Software\BetterCast\VDDOemInfpost-install and reads it back at uninstall.makensiswas passed a literal1.0.0. Now driven by VERSION file.File /nonfatal+try/catchswallowed VDD download failures. Now hard-fails ifMttVDD.infis missing.SectionIn RO. Components page removed entirely.Plus, table-stakes enterprise hygiene
taskkillstep so upgrades don't fail on locked files${RunningX64}+SetRegView 64QuietUninstallString,HelpLink,InstallLocation,EstimatedSizereg keys (MDM tools + Windows Update Cleanup recognize the install)windows-2022(was floatingwindows-latest)BetterCast-Setup-Windows-x64-1.0.0)secrets.WINDOWS_CERT_PFX_BASE64+WINDOWS_CERT_PASSWORD. Signs both EXE and installer with DigiCert timestamping. Skipped silently if secrets absent. Ready for SignPath Foundation.Test plan
pnputil /enum-drivers | findstr -i mttvddreturns nothingsigntool verify /paNotes
1.0.0matching what's been shipping. Bump in a follow-up commit when you're ready to release.oem*.infname greps for English field labels (Original Name:,Published Name:). On non-English Windows, capture returns empty and uninstall logs a graceful warning rather than failing — flagging in case you ever ship to a localized OEM image.🤖 Generated with Claude Code