From 0f160545ab2bb32d74eb8d1c23093166ff1c61c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 02:26:54 +0200 Subject: [PATCH 1/8] Changelog. --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..977fde43 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +This is the first changelog file for Wino's beta workflow. + +**Changelog** + +- Literally nothing. Everything will be alright though... + +BKK \ No newline at end of file From 1365e42fd79aa02a8edff4568cab86b63eacb966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 02:46:06 +0200 Subject: [PATCH 2/8] Explicit nuget.config for the workflow. --- .github/workflows/beta-release.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index 7cd90bcb..5819c541 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -20,6 +20,7 @@ jobs: PROJECT_PATH: Wino.Mail.WinUI/Wino.Mail.WinUI.csproj MANIFEST_PATH: Wino.Mail.WinUI/Package.appxmanifest CHANGELOG_PATH: CHANGELOG.md + NUGET_CONFIG_PATH: ${{ github.workspace }}\nuget.config PACKAGE_OUTPUT_DIR: ${{ github.workspace }}\artifacts\package RELEASE_OUTPUT_DIR: ${{ github.workspace }}\artifacts\release CERTIFICATE_PFX_PATH: ${{ github.workspace }}\artifacts\signing\beta-signing-cert.pfx @@ -53,7 +54,6 @@ jobs: uses: actions/setup-dotnet@v4 with: dotnet-version: 10.0.x - source-url: https://nuget.pkg.github.com/bkaankose/index.json env: NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -176,7 +176,17 @@ jobs: [IO.File]::WriteAllBytes($env:CERTIFICATE_CER_PATH, $certificate.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert)) - name: Restore WinUI project dependencies - run: dotnet restore ${{ env.PROJECT_PATH }} --configfile nuget.config -p:Platform=x64 -p:RuntimeIdentifier=win-x64 + shell: pwsh + run: | + if (-not (Test-Path $env:NUGET_CONFIG_PATH)) { + throw "NuGet config file not found: $env:NUGET_CONFIG_PATH" + } + + dotnet restore $env:PROJECT_PATH ` + --configfile $env:NUGET_CONFIG_PATH ` + -p:Platform=x64 ` + -p:RuntimeIdentifier=win-x64 ` + /p:RestoreConfigFile="$env:NUGET_CONFIG_PATH" - name: Build MSIX bundle shell: pwsh @@ -188,8 +198,10 @@ jobs: dotnet build $env:PROJECT_PATH ` --configuration Release ` --no-restore ` + --configfile $env:NUGET_CONFIG_PATH ` /p:Platform=x64 ` /p:RuntimeIdentifier=win-x64 ` + /p:RestoreConfigFile="$env:NUGET_CONFIG_PATH" ` /p:GenerateAppxPackageOnBuild=true ` /p:UapAppxPackageBuildMode=SideloadOnly ` /p:AppxBundle=Always ` From b8ce7e7422874b62850e8d8d5ca0e7401bb85d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 02:52:38 +0200 Subject: [PATCH 3/8] Fix the incorrect feed for community toolkit extension thing. --- nuget.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nuget.config b/nuget.config index 189af110..3fecbf88 100644 --- a/nuget.config +++ b/nuget.config @@ -14,13 +14,13 @@ + - From ccf7c0607b49c3f66a1188652b2a826d22f53831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 03:06:18 +0200 Subject: [PATCH 4/8] Remove cert password. --- .github/workflows/beta-release.yml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index 5819c541..e15d7f41 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -40,16 +40,11 @@ jobs: shell: pwsh env: BETA_SIGNING_CERT_PFX_BASE64: ${{ secrets.BETA_SIGNING_CERT_PFX_BASE64 }} - BETA_SIGNING_CERT_PASSWORD: ${{ secrets.BETA_SIGNING_CERT_PASSWORD }} run: | if ([string]::IsNullOrWhiteSpace($env:BETA_SIGNING_CERT_PFX_BASE64)) { throw "Missing required secret: BETA_SIGNING_CERT_PFX_BASE64" } - if ([string]::IsNullOrWhiteSpace($env:BETA_SIGNING_CERT_PASSWORD)) { - throw "Missing required secret: BETA_SIGNING_CERT_PASSWORD" - } - - name: Setup .NET SDK uses: actions/setup-dotnet@v4 with: @@ -164,13 +159,12 @@ jobs: shell: pwsh env: BETA_SIGNING_CERT_PFX_BASE64: ${{ secrets.BETA_SIGNING_CERT_PFX_BASE64 }} - BETA_SIGNING_CERT_PASSWORD: ${{ secrets.BETA_SIGNING_CERT_PASSWORD }} run: | $signingDir = Split-Path -Parent $env:CERTIFICATE_PFX_PATH New-Item -ItemType Directory -Path $signingDir -Force | Out-Null [IO.File]::WriteAllBytes($env:CERTIFICATE_PFX_PATH, [Convert]::FromBase64String($env:BETA_SIGNING_CERT_PFX_BASE64)) - $certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($env:CERTIFICATE_PFX_PATH, $env:BETA_SIGNING_CERT_PASSWORD, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) + $certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($env:CERTIFICATE_PFX_PATH, $null, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) New-Item -ItemType Directory -Path (Split-Path -Parent $env:CERTIFICATE_CER_PATH) -Force | Out-Null [IO.File]::WriteAllBytes($env:CERTIFICATE_CER_PATH, $certificate.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert)) @@ -190,8 +184,6 @@ jobs: - name: Build MSIX bundle shell: pwsh - env: - BETA_SIGNING_CERT_PASSWORD: ${{ secrets.BETA_SIGNING_CERT_PASSWORD }} run: | New-Item -ItemType Directory -Path $env:PACKAGE_OUTPUT_DIR -Force | Out-Null @@ -209,7 +201,7 @@ jobs: /p:AppxPackageDir="$env:PACKAGE_OUTPUT_DIR\\" ` /p:AppxPackageVersion=${{ steps.metadata.outputs.package_version }} ` /p:PackageCertificateKeyFile="$env:CERTIFICATE_PFX_PATH" ` - /p:PackageCertificatePassword="$env:BETA_SIGNING_CERT_PASSWORD" ` + /p:PackageCertificatePassword= ` /p:PackageCertificateThumbprint= ` /p:AppxPackageSigningEnabled=true From 260e1ab93527075d1a48b961ddb7a112e1eff931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 03:17:34 +0200 Subject: [PATCH 5/8] RID issue fix. --- .github/workflows/beta-release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index e15d7f41..30114b4e 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -179,7 +179,6 @@ jobs: dotnet restore $env:PROJECT_PATH ` --configfile $env:NUGET_CONFIG_PATH ` -p:Platform=x64 ` - -p:RuntimeIdentifier=win-x64 ` /p:RestoreConfigFile="$env:NUGET_CONFIG_PATH" - name: Build MSIX bundle @@ -192,7 +191,6 @@ jobs: --no-restore ` --configfile $env:NUGET_CONFIG_PATH ` /p:Platform=x64 ` - /p:RuntimeIdentifier=win-x64 ` /p:RestoreConfigFile="$env:NUGET_CONFIG_PATH" ` /p:GenerateAppxPackageOnBuild=true ` /p:UapAppxPackageBuildMode=SideloadOnly ` From 0bcc7a76470e2a0ec48fc082fed907a6b0126136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 03:37:47 +0200 Subject: [PATCH 6/8] Use existing version from the branch. --- .github/workflows/beta-release.yml | 42 ++---------------------------- 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index 30114b4e..8ebafc01 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -80,8 +80,7 @@ jobs: } $baseVersion = '{0}.{1}.{2}' -f $Matches.major, $Matches.minor, $Matches.patch - $nextRevision = [int]$Matches.revision + 1 - $packageVersion = '{0}.{1}.{2}.{3}' -f $Matches.major, $Matches.minor, $Matches.patch, $nextRevision + $packageVersion = $currentVersionText $matchingTags = git tag --list "v$baseVersion.*" $releaseNumbers = @() @@ -101,52 +100,15 @@ jobs: throw "Failed to resolve the checked out commit SHA." } - $previousReleaseTag = git tag --sort=-creatordate --list 'v*.*.*.*' | Select-Object -First 1 - $commitLines = @() - if (-not [string]::IsNullOrWhiteSpace($previousReleaseTag)) { - $commitLines = git log "$previousReleaseTag..$headSha" --pretty=format:"- %s (%h)" - } - else { - $commitLines = git log $headSha -n 20 --pretty=format:"- %s (%h)" - } - - $buildDateUtc = (Get-Date).ToUniversalTime().ToString("yyyy-MM-dd HH:mm 'UTC'") $notesInput = Get-Content -LiteralPath $changelogPath -Raw if ([string]::IsNullOrWhiteSpace($notesInput)) { throw "Release notes file is empty: $changelogPath" } $notesInput = $notesInput.Trim() - $metadataSection = @" - ## Build metadata - - - Package version: `$packageVersion` - - Release tag: `$releaseTag` - - Commit: `$headSha` - - Built: $buildDateUtc - "@ - - $commitSection = if ($commitLines.Count -gt 0) { - $commitHeader = if ([string]::IsNullOrWhiteSpace($previousReleaseTag)) { "## Recent commits" } else { "## Commits since $previousReleaseTag" } - @" - $commitHeader - - $($commitLines -join [Environment]::NewLine) - "@ - } - else { - '' - } - - $releaseNotesBody = @( - $notesInput - $metadataSection.Trim() - $commitSection.Trim() - ) | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } - New-Item -ItemType Directory -Path $env:RELEASE_OUTPUT_DIR -Force | Out-Null $releaseNotesPath = Join-Path $env:RELEASE_OUTPUT_DIR 'beta-release-notes.md' - $releaseNotesBody -join ([Environment]::NewLine + [Environment]::NewLine) | Set-Content -LiteralPath $releaseNotesPath -Encoding utf8 + $notesInput | Set-Content -LiteralPath $releaseNotesPath -Encoding utf8 "package_version=$packageVersion" >> $env:GITHUB_OUTPUT "base_version=$baseVersion" >> $env:GITHUB_OUTPUT From 89b48d3ac4b3ef0602ee38a700f717af9f5a27fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 04:01:25 +0200 Subject: [PATCH 7/8] Moer updates on beta release pipeline. --- .github/workflows/beta-release.yml | 40 ++++++------------------------ 1 file changed, 7 insertions(+), 33 deletions(-) diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index 8ebafc01..20ecf174 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -79,19 +79,8 @@ jobs: throw "Manifest version '$currentVersionText' is not a four-part numeric version." } - $baseVersion = '{0}.{1}.{2}' -f $Matches.major, $Matches.minor, $Matches.patch $packageVersion = $currentVersionText - - $matchingTags = git tag --list "v$baseVersion.*" - $releaseNumbers = @() - foreach ($tag in $matchingTags) { - if ($tag -match "^v$([regex]::Escape($baseVersion))\.(\d+)$") { - $releaseNumbers += [int]$Matches[1] - } - } - - $nextReleaseNumber = if ($releaseNumbers.Count -gt 0) { ($releaseNumbers | Measure-Object -Maximum).Maximum + 1 } else { 1 } - $releaseTag = "v$baseVersion.$nextReleaseNumber" + $releaseTag = "v$packageVersion" $releaseTitleInput = $env:RELEASE_TITLE_INPUT $releaseTitle = if ([string]::IsNullOrWhiteSpace($releaseTitleInput)) { $releaseTag } else { $releaseTitleInput.Trim() } @@ -111,7 +100,6 @@ jobs: $notesInput | Set-Content -LiteralPath $releaseNotesPath -Encoding utf8 "package_version=$packageVersion" >> $env:GITHUB_OUTPUT - "base_version=$baseVersion" >> $env:GITHUB_OUTPUT "release_tag=$releaseTag" >> $env:GITHUB_OUTPUT "release_title=$releaseTitle" >> $env:GITHUB_OUTPUT "release_notes_path=$releaseNotesPath" >> $env:GITHUB_OUTPUT @@ -174,27 +162,16 @@ jobs: throw "No .msixbundle file was generated under $env:PACKAGE_OUTPUT_DIR" } - $packageZipPath = Join-Path $env:RELEASE_OUTPUT_DIR 'Wino-Mail-Beta-PackageOutput.zip' - if (Test-Path $packageZipPath) { - Remove-Item -LiteralPath $packageZipPath -Force + $releaseAssetPath = Join-Path $env:RELEASE_OUTPUT_DIR "Wino_${{ steps.metadata.outputs.package_version }}.zip" + if (Test-Path $releaseAssetPath) { + Remove-Item -LiteralPath $releaseAssetPath -Force } - Compress-Archive -Path (Join-Path $env:PACKAGE_OUTPUT_DIR '*') -DestinationPath $packageZipPath -Force + Compress-Archive -LiteralPath @($bundle.FullName, $env:CERTIFICATE_CER_PATH) -DestinationPath $releaseAssetPath -Force "bundle_path=$($bundle.FullName)" >> $env:GITHUB_OUTPUT "bundle_name=$($bundle.Name)" >> $env:GITHUB_OUTPUT - "package_zip_path=$packageZipPath" >> $env:GITHUB_OUTPUT - - - name: Upload workflow artifacts - uses: actions/upload-artifact@v4 - with: - name: beta-release-assets-${{ steps.metadata.outputs.release_tag }} - path: | - ${{ steps.package.outputs.bundle_path }} - ${{ env.CERTIFICATE_CER_PATH }} - ${{ steps.metadata.outputs.release_notes_path }} - ${{ steps.package.outputs.package_zip_path }} - if-no-files-found: error + "release_asset_path=$releaseAssetPath" >> $env:GITHUB_OUTPUT - name: Create GitHub prerelease shell: pwsh @@ -202,10 +179,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh release create "${{ steps.metadata.outputs.release_tag }}" ` - "${{ steps.package.outputs.bundle_path }}" ` - "${{ env.CERTIFICATE_CER_PATH }}" ` - "${{ steps.metadata.outputs.release_notes_path }}" ` - "${{ steps.package.outputs.package_zip_path }}" ` + "${{ steps.package.outputs.release_asset_path }}" ` --repo "${{ github.repository }}" ` --target "${{ steps.metadata.outputs.head_sha }}" ` --title "${{ steps.metadata.outputs.release_title }}" ` From 9424fd9a16db96afc212a72f4c37d79e523e59b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 15 Apr 2026 04:01:47 +0200 Subject: [PATCH 8/8] Testing package version. --- Wino.Mail.WinUI/Package.appxmanifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wino.Mail.WinUI/Package.appxmanifest b/Wino.Mail.WinUI/Package.appxmanifest index dfe45eb0..1457e1b4 100644 --- a/Wino.Mail.WinUI/Package.appxmanifest +++ b/Wino.Mail.WinUI/Package.appxmanifest @@ -23,7 +23,7 @@ + Version="2.0.31.0" />