From 3cd2fc1dbac244de4c420528ef9e92faf82886d2 Mon Sep 17 00:00:00 2001 From: Zac Gaetano Date: Sun, 31 May 2026 11:16:40 -0400 Subject: [PATCH] @ rebrand installer from TeamsISO to Dragon-ISO - Rename TeamsISO.Installer.wixproj to Dragon-ISO.Installer.wixproj - Update Package.wxs: product name, shortcuts, registry keys, ARP metadata, install directory, and icon all updated to Dragon-ISO - Switch UI from WixUI_InstallDir to WixUI_Minimal (no dir picker) - Add .NET 8 Desktop Runtime detection (registry band key + Version) - Fix release.yml: signing step referenced Dragon-ISO.exe but AssemblyName=DragonISO so exe is DragonISO.exe (no hyphen) - Fix release.yml: upload-artifact@v3 to @v4, add signtool null-guard to MSI signing step Co-Authored-By: Claude Sonnet 4.6 @ --- .forgejo/workflows/release.yml | 43 +++---- ...r.wixproj => Dragon-ISO.Installer.wixproj} | 16 +-- installer/Package.wxs | 106 +++++++++++------- 3 files changed, 94 insertions(+), 71 deletions(-) rename installer/{TeamsISO.Installer.wixproj => Dragon-ISO.Installer.wixproj} (66%) diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index f5708dd..69295bd 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -1,4 +1,4 @@ -name: Release +name: Release # Triggered by pushing an annotated tag of the form v1.2.3 (or any v-prefixed # semver). The job runs on a Windows runner because building the WiX MSI @@ -54,48 +54,48 @@ jobs: } - name: Restore (Windows solution filter) - run: dotnet restore TeamsISO.Windows.slnf + run: dotnet restore Dragon-ISO.Windows.slnf - name: Build (Release, treat warnings as errors) - run: dotnet build TeamsISO.Windows.slnf --configuration Release --no-restore /p:Version=${{ steps.ver.outputs.version }} + run: dotnet build Dragon-ISO.Windows.slnf --configuration Release --no-restore /p:Version=${{ steps.ver.outputs.version }} - name: Run unit tests (excluding requires=ndi) run: > - dotnet test TeamsISO.Windows.slnf + dotnet test Dragon-ISO.Windows.slnf --configuration Release --no-build --filter "Category!=ndi&requires!=ndi" - - name: Publish TeamsISO.App (framework-dependent, win-x64) + - name: Publish Dragon-ISO.App (framework-dependent, win-x64) run: > - dotnet publish src/TeamsISO.App/TeamsISO.App.csproj + dotnet publish src/Dragon-ISO.App/Dragon-ISO.App.csproj --configuration Release --runtime win-x64 --self-contained false - --output publish/TeamsISO + --output publish/Dragon-ISO /p:Version=${{ steps.ver.outputs.version }} - - name: Publish TeamsISO.Console (framework-dependent, win-x64) + - name: Publish Dragon-ISO.Console (framework-dependent, win-x64) run: > - dotnet publish src/TeamsISO.Console/TeamsISO.Console.csproj + dotnet publish src/Dragon-ISO.Console/Dragon-ISO.Console.csproj --configuration Release --runtime win-x64 --self-contained false - --output publish/TeamsISO-Console + --output publish/Dragon-ISO-Console /p:Version=${{ steps.ver.outputs.version }} # Code-sign the WPF .exe BEFORE the MSI is built, so the MSI's embedded # binaries are signed too. Skipped silently when the signing secrets - # aren't configured — that's the default state and keeps unsigned builds + # aren't configured — that's the default state and keeps unsigned builds # working unchanged. # # To enable signing, set both Forgejo Actions secrets: - # SIGN_CERT_PFX_BASE64 — base64 of your code-signing PFX file + # SIGN_CERT_PFX_BASE64 — base64 of your code-signing PFX file # ( certutil -encode in.pfx out.b64; strip BEGIN/END lines ) - # SIGN_CERT_PASSWORD — the PFX password + # SIGN_CERT_PASSWORD — the PFX password # Optionally: - # SIGN_TIMESTAMP_URL — RFC 3161 timestamp server (default: digicert) - - name: Sign TeamsISO.exe (optional, skipped if no cert) + # SIGN_TIMESTAMP_URL — RFC 3161 timestamp server (default: digicert) + - name: Sign Dragon-ISO.exe (optional, skipped if no cert) if: ${{ steps.signcfg.outputs.enabled == 'true' }} env: SIGN_CERT_PFX_BASE64: ${{ secrets.SIGN_CERT_PFX_BASE64 }} @@ -116,13 +116,13 @@ jobs: /fd SHA256 ` /td SHA256 ` /tr $tsUrl ` - 'publish/TeamsISO/TeamsISO.exe' - if ($LASTEXITCODE -ne 0) { throw "signtool failed on TeamsISO.exe (exit $LASTEXITCODE)" } + 'publish/Dragon-ISO/DragonISO.exe' + if ($LASTEXITCODE -ne 0) { throw "signtool failed on Dragon-ISO.exe (exit $LASTEXITCODE)" } Remove-Item $pfxPath -Force - name: Build MSI installer run: > - dotnet build installer/TeamsISO.Installer.wixproj + dotnet build installer/Dragon-ISO.Installer.wixproj --configuration Release /p:Version=${{ steps.ver.outputs.version }} @@ -136,7 +136,7 @@ jobs: "name=$($msi.Name)" >> $env:GITHUB_OUTPUT Write-Host "MSI: $($msi.FullName) ($($msi.Length) bytes)" - # Sign the produced MSI itself. Same gate as exe signing — runs only if + # Sign the produced MSI itself. Same gate as exe signing — runs only if # the cert secret is set. Splitting the two stages means the inner exe # is signed before being embedded, AND the wrapping MSI carries its own # signature for SmartScreen. @@ -155,6 +155,7 @@ jobs: $signtool = Get-ChildItem 'C:\Program Files (x86)\Windows Kits\10\bin' -Recurse -Filter signtool.exe ` | Where-Object { $_.FullName -match '\\x64\\' } ` | Select-Object -First 1 + if (-not $signtool) { throw 'signtool.exe not found on runner' } & $signtool.FullName sign ` /f $pfxPath ` /p $env:SIGN_CERT_PASSWORD ` @@ -166,7 +167,7 @@ jobs: Remove-Item $pfxPath -Force - name: Upload MSI as workflow artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ steps.msi.outputs.name }} path: ${{ steps.msi.outputs.path }} @@ -195,7 +196,7 @@ jobs: Write-Host "No release found for $env:TAG; creating one." $body = @{ tag_name = $env:TAG - name = "TeamsISO $env:TAG" + name = "Dragon-ISO $env:TAG" body = "Automated build from tag $env:TAG." draft = $false prerelease = $env:TAG -match '-(alpha|beta|rc)' diff --git a/installer/TeamsISO.Installer.wixproj b/installer/Dragon-ISO.Installer.wixproj similarity index 66% rename from installer/TeamsISO.Installer.wixproj rename to installer/Dragon-ISO.Installer.wixproj index 07d9c05..c406e93 100644 --- a/installer/TeamsISO.Installer.wixproj +++ b/installer/Dragon-ISO.Installer.wixproj @@ -2,7 +2,7 @@ Package - TeamsISO-Setup-$(Version) + Dragon-ISO-Setup-$(Version) x64 @@ -10,15 +10,15 @@ - $(MSBuildThisFileDirectory)..\publish\TeamsISO\ + $(MSBuildThisFileDirectory)..\publish\Dragon-ISO\ - PublishDir=$(PublishDir);AssetsDir=$(MSBuildThisFileDirectory)..\src\TeamsISO.App\Assets\ + PublishDir=$(PublishDir);AssetsDir=$(MSBuildThisFileDirectory)..\src\Dragon-ISO.App\Assets\ false @@ -32,4 +32,4 @@ - + \ No newline at end of file diff --git a/installer/Package.wxs b/installer/Package.wxs index 911a206..14d151c 100644 --- a/installer/Package.wxs +++ b/installer/Package.wxs @@ -1,22 +1,27 @@ - + Keywords="Dragon-ISO, NDI, Microsoft Teams, ISO recording, broadcast, live production, vMix, OBS, switcher, Wild Dragon" /> - - + @@ -56,37 +61,51 @@ - - + - + - - + + - - + + + + + + + @@ -107,11 +126,11 @@ --> - + @@ -129,30 +148,33 @@ - + Icon="DragonISOIcon" /> - + Icon="DragonISOIcon" /> - + \ No newline at end of file