From 94b047ed173cbc9effbc85533a0b9fb481308d86 Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Wed, 22 Jul 2026 07:23:02 -0400 Subject: [PATCH 01/11] use msix bundler --- .github/workflows/publish-msstore.yml | 314 +++++++++--------- .github/workflows/uno-dotnet.yml | 77 +++-- .vscode/settings.json | 6 + .../AzureKeyVaultStudio.csproj | 2 +- .../AzureKeyVaultStudio/Package.appxmanifest | 2 +- src/uno/AzureKeyVaultStudio/msbuild.ps1 | 15 +- 6 files changed, 233 insertions(+), 183 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index 18049b1b..439af70a 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -3,29 +3,115 @@ name: Publish to Microsoft Store on: workflow_dispatch: inputs: - release_notes: - description: 'Release notes for Store submission' - required: false - default: 'Updated version' + version: + description: 'Package version to publish (example: 2.1.0 or 2.1.0.0)' + required: true + +permissions: + contents: read + +concurrency: + group: publish-to-store + cancel-in-progress: false env: DOTNET_VERSION: 10.0.x CONFIGURATION: Release - STORE_PRODUCT_ID: 9NBLGGH4NNS1 STORE_APP_ID: ${{ secrets.STORE_APP_ID }} + PROJECT_PATH: ./src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio.csproj jobs: - debug_store_access: - name: Debug Store credentials + prepare_version: + name: Prepare release version + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.value }} + + steps: + - name: Validate version + id: version + shell: pwsh + run: | + $versionInput = '${{ github.event.inputs.version }}' + $version = ($versionInput -replace '^v', '').Trim() + if ($version -notmatch '^\d+(?:\.\d+){2,3}$') { + throw "Version '$versionInput' is not in the expected format. Examples: 2.1.0 or 2.1.0.0." + } + $parts = $version.Split('.') + if ($parts.Length -eq 3) { + $version = "$($parts[0]).$($parts[1]).$($parts[2]).0" + } + echo "value=$version" >> $env:GITHUB_OUTPUT + + build_msix_packages: + name: Build MSIX package for (${{ matrix.platform }}) + needs: prepare_version runs-on: windows-latest + strategy: + matrix: + platform: [x64, x86, arm64] + timeout-minutes: 45 + steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + + - name: Setup .NET + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - name: Build MSIX package for ${{ matrix.platform }} + shell: pwsh + run: | + $version = '${{ needs.prepare_version.outputs.version }}' + $packageRoot = Join-Path $env:GITHUB_WORKSPACE 'artifacts/store-bundle' + $platformDir = Join-Path $packageRoot '${{ matrix.platform }}' + + New-Item -ItemType Directory -Force -Path $packageRoot | Out-Null + New-Item -ItemType Directory -Force -Path $platformDir | Out-Null + + dotnet msbuild "${{ env.PROJECT_PATH }}" ` + /t:Build ` + /p:Configuration=Release ` + /p:TargetFramework=net10.0-windows10.0.26100 ` + /p:WindowsPackageType=MSIX ` + /p:GenerateAppxPackageOnBuild=true ` + /p:UapAppxPackageBuildMode=StoreUpload ` + /p:AppxBundle=Never ` + /p:Platform=${{ matrix.platform }} ` + /p:AppxPackageSigningEnabled=false ` + /p:AppxPackageDir="$platformDir\" ` + /p:Version=$version ` + /p:AppxManifestIdentityVersion=$version + + - name: Upload MSIX package artifact + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a + with: + name: msix-${{ matrix.platform }} + path: artifacts/store-bundle/${{ matrix.platform }}/** + if-no-files-found: error + + publish_to_partner_center: + name: Publish MSIX bundle to Partner Center + needs: [prepare_version, build_msix_packages] + runs-on: windows-latest + timeout-minutes: 25 + + steps: + - name: Checkout repository + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + + - name: Setup .NET + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} - name: Configure Microsoft Store CLI - uses: microsoft/microsoft-store-apppublisher@v1.1 + uses: microsoft/microsoft-store-apppublisher@b76227f539d68e6465f79bbbc82ed92f61081aa4 - - name: Reconfigure store credentials + - name: Reconfigure Store credentials shell: pwsh run: | msstore reconfigure ` @@ -34,149 +120,77 @@ jobs: --clientId ${{ secrets.AZURE_AD_APPLICATION_CLIENT_ID }} ` --clientSecret ${{ secrets.AZURE_AD_APPLICATION_SECRET }} - - name: List all apps (find correct IDs) - shell: pwsh - run: | - Write-Host "--- Listing all apps visible to these credentials ---" - msstore apps list + - name: Download MSIX artifacts + uses: actions/download-artifact@v4 + with: + pattern: msix-* + path: artifacts/store-bundle/downloaded + merge-multiple: false - - name: Try getting product by Store ID + - name: Collect MSIX files for bundling shell: pwsh - continue-on-error: true run: | - Write-Host "--- Trying apps get with ProductId: ${{ env.STORE_PRODUCT_ID }} ---" - msstore apps get ${{ env.STORE_PRODUCT_ID }} --verbose + $packageRoot = Join-Path $env:GITHUB_WORKSPACE 'artifacts/store-bundle' + $bundleSource = Join-Path $packageRoot 'msix-source' + $downloadRoot = Join-Path $packageRoot 'downloaded' + New-Item -ItemType Directory -Force -Path $bundleSource | Out-Null + + $msixFiles = Get-ChildItem -Path $downloadRoot -Recurse -File -Filter *.msix -ErrorAction SilentlyContinue + + if (-not $msixFiles) { + throw "No .msix files were found under $downloadRoot" + } + + $msixFiles | Copy-Item -Destination $bundleSource -Force + + Write-Host "Collected MSIX files for bundling:" + Write-Host "*******************************************************" + Get-ChildItem -Path $bundleSource -File -Filter *.msix | ForEach-Object { Write-Host " - $($_.FullName)" } + Write-Host "*******************************************************" - - name: Print configured info + - name: Bundle MSIX packages into a single msixbundle + id: bundler + uses: LanceMcCarthy/Action-MsixBundler@77c9b8fdbc620b6e42c26f4c4252321cf24fda18 + with: + msix-folder: ${{ github.workspace }}\artifacts\store-bundle\msix-source + msixbundle-filepath: ${{ github.workspace }}\artifacts\store-bundle\bundle\AzureKeyVaultStudio_${{ needs.prepare_version.outputs.version }}_x86_x64_arm64.msixbundle + msixbundle-version: ${{ needs.prepare_version.outputs.version }} + + # - name: Prepare msixbundle for publishing + # shell: pwsh + # run: | + # $publishInput = Join-Path $env:GITHUB_WORKSPACE 'artifacts/store-bundle/msix-input' + # $destDir = Join-Path $publishInput 'bundle' + # New-Item -ItemType Directory -Force -Path $destDir | Out-Null + + # $bundlePath = '${{ steps.bundler.outputs.msixbundle_path }}' + # Copy-Item -Path $bundlePath -Destination $destDir -Force + + # Write-Host "Prepared msixbundle for publishing:" + # Get-ChildItem -Path $publishInput -Recurse -File -Filter *.msixbundle | ForEach-Object { Write-Host " - $($_.FullName)" } + + - name: Upload msixbundle to the Microsoft Store (no certification) shell: pwsh - continue-on-error: true run: | - msstore info - - # build_and_publish: - # name: Build MSIX and Publish to Store - # runs-on: windows-latest - # needs: debug_store_access - # steps: - # - name: Checkout repository - # uses: actions/checkout@v4 - # - # - name: Setup .NET - # uses: actions/setup-dotnet@v4 - # with: - # dotnet-version: ${{ env.DOTNET_VERSION }} - # - # - name: Restore workloads - # run: dotnet workload restore - # - # - name: Restore NuGet packages - # run: dotnet restore ./AzureKeyVaultStudio/AzureKeyVaultStudio.csproj - # - # - name: Build MSIX for x64 - # shell: pwsh - # run: | - # dotnet publish ./AzureKeyVaultStudio/AzureKeyVaultStudio.csproj ` - # -f net10.0-windows10.0.26100 ` - # -r win-x64 ` - # -c ${{ env.CONFIGURATION }} ` - # -p:WindowsPackageType=MSIX ` - # -p:GenerateAppxPackageOnBuild=true ` - # -p:UapAppxPackageBuildMode=StoreUpload ` - # -p:AppxPackageSigningEnabled=false ` - # -p:AppxBundle=Never ` - # -p:AppxPackageDir="${{ github.workspace }}\AzureKeyVaultStudio\artifacts\win-x64\" ` - # -p:SelfContained=true ` - # -p:PublishReadyToRun=true ` - # -p:PublishTrimmed=false ` - # -p:Version=2.0.${{ github.run_number }} - # - # - name: Build MSIX for ARM64 - # shell: pwsh - # run: | - # dotnet publish ./AzureKeyVaultStudio/AzureKeyVaultStudio.csproj ` - # -f net10.0-windows10.0.26100 ` - # -r win-arm64 ` - # -c ${{ env.CONFIGURATION }} ` - # -p:Platform=arm64 ` - # -p:WindowsPackageType=MSIX ` - # -p:GenerateAppxPackageOnBuild=true ` - # -p:UapAppxPackageBuildMode=StoreUpload ` - # -p:AppxPackageSigningEnabled=false ` - # -p:AppxBundle=Never ` - # -p:AppxPackageDir="${{ github.workspace }}\AzureKeyVaultStudio\artifacts\win-arm64\" ` - # -p:SelfContained=true ` - # -p:PublishReadyToRun=true ` - # -p:PublishTrimmed=false ` - # -p:Version=2.0.${{ github.run_number }} - # - # - name: Locate Store packages - # shell: pwsh - # run: | - # $packageRoot = "${{ github.workspace }}\AzureKeyVaultStudio\artifacts" - # $patterns = @("*.msix", "*.msixupload", "*.msixbundle", "*.appxbundle") - # $packages = foreach ($pattern in $patterns) { - # Get-ChildItem -Recurse -Filter $pattern -Path $packageRoot -ErrorAction SilentlyContinue - # } - # if (-not $packages) { - # Write-Error "No Store package files found!" - # exit 1 - # } - # foreach ($file in $packages) { - # Write-Host "Found: $($file.FullName)" - # } - # - # - name: Configure Microsoft Store CLI - # uses: microsoft/microsoft-store-apppublisher@v1.1 - # - # - name: Reconfigure store credentials - # shell: pwsh - # run: | - # msstore reconfigure ` - # --tenantId ${{ secrets.AZURE_AD_TENANT_ID }} ` - # --sellerId ${{ secrets.SELLER_ID }} ` - # --clientId ${{ secrets.AZURE_AD_APPLICATION_CLIENT_ID }} ` - # --clientSecret ${{ secrets.AZURE_AD_APPLICATION_SECRET }} - # - # - name: Publish x64 MSIX to Store - # shell: pwsh - # run: | - # $outputRoot = "${{ github.workspace }}\AzureKeyVaultStudio\artifacts\win-x64" - # $patterns = @("*.msix", "*.msixupload", "*.msixbundle", "*.appxbundle") - # $packageFile = @( - # foreach ($pattern in $patterns) { - # Get-ChildItem -Recurse -Filter $pattern -Path $outputRoot -ErrorAction SilentlyContinue | Select-Object -First 1 - # } - # ) | Where-Object { $_ } | Select-Object -First 1 - # if (-not $packageFile) { - # Write-Error "Could not find x64 Store package" - # exit 1 - # } - # msstore publish "$($packageFile.FullName)" ` - # -id ${{ env.STORE_APP_ID }} - # - # - name: Publish ARM64 MSIX to Store - # shell: pwsh - # run: | - # $outputRoot = "${{ github.workspace }}\AzureKeyVaultStudio\artifacts\win-arm64" - # $patterns = @("*.msix", "*.msixupload", "*.msixbundle", "*.appxbundle") - # $packageFile = @( - # foreach ($pattern in $patterns) { - # Get-ChildItem -Recurse -Filter $pattern -Path $outputRoot -ErrorAction SilentlyContinue | Select-Object -First 1 - # } - # ) | Where-Object { $_ } | Select-Object -First 1 - # if (-not $packageFile) { - # Write-Error "Could not find ARM64 Store package" - # exit 1 - # } - # msstore publish "$($packageFile.FullName)" ` - # -id ${{ env.STORE_APP_ID }} - # - # - name: Upload artifacts - # if: always() - # continue-on-error: true - # uses: actions/upload-artifact@v4 - # with: - # name: store-packages - # path: | - # AzureKeyVaultStudio\artifacts\**\*.msix - # AzureKeyVaultStudio\artifacts\**\*.msixupload + + $path_to_my_msix_bundle = "${{steps.bundler.outputs.msixbundle_path}}" + Write-Output $path_to_my_msix_bundle + + msstore publish $projectDir ` + --appId ${{ env.STORE_APP_ID }} ` + --inputDirectory $path_to_my_msix_bundle ` + --noCommit ` + --verbose + + if ($LASTEXITCODE -ne 0) { + throw "msstore publish failed with exit code $LASTEXITCODE" + } + + # - name: Upload package artifacts + # if: always() + # uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a + # with: + # name: store-package + # path: | + # artifacts/** + diff --git a/.github/workflows/uno-dotnet.yml b/.github/workflows/uno-dotnet.yml index 92afde1b..e298d0c0 100644 --- a/.github/workflows/uno-dotnet.yml +++ b/.github/workflows/uno-dotnet.yml @@ -1,14 +1,18 @@ -name: Build and Release +name: Release + on: - workflow_dispatch: push: branches: - master - - + workflow_dispatch: + inputs: + run_release: + type: boolean + description: Run Release true or false + pull_request: - types: [opened, synchronize, reopened] + types: [opened] branches: - master @@ -46,12 +50,12 @@ jobs: Move-Item -Path ".\bin\Release\net10.0-windows10.0.26100\win-x64\publish\*.exe" -Destination "$env:GITHUB_WORKSPACE\win-x64\" -Force - name: Create Package shell: pwsh - run: tar -cvf azurekeyvaultstudio.win-x64.tar win-x64 + run: Compress-Archive -Path "win-x64/*" -DestinationPath "azurekeyvaultstudio.win-x64.zip" -Force - name: Upload Artifact uses: actions/upload-artifact@v4 with: - name: azurekeyvaultstudio.win-x64.tar - path: azurekeyvaultstudio.win-x64.tar + name: azurekeyvaultstudio.win-x64.zip + path: azurekeyvaultstudio.win-x64.zip build_windows_arm64: name: Build Windows ARM64 @@ -77,15 +81,15 @@ jobs: Move-Item -Path ".\bin\Release\net10.0-windows10.0.26100\win-arm64\publish\*.exe" -Destination "$env:GITHUB_WORKSPACE\win-arm64\" -Force - name: Create Package shell: pwsh - run: tar -cvf azurekeyvaultstudio.win-arm64.tar win-arm64 + run: Compress-Archive -Path "win-arm64/*" -DestinationPath "azurekeyvaultstudio.win-arm64.zip" -Force - name: Upload Artifact uses: actions/upload-artifact@v4 with: - name: azurekeyvaultstudio.win-arm64.tar - path: azurekeyvaultstudio.win-arm64.tar + name: azurekeyvaultstudio.win-arm64.zip + path: azurekeyvaultstudio.win-arm64.zip build_macos_x64: - name: Build macOS + name: Build macOS x64 (untested) runs-on: macos-latest steps: - uses: actions/checkout@v4 @@ -109,12 +113,15 @@ jobs: Move-Item -Path "./bin/Release/net10.0-desktop/osx-x64/publish/*.app" -Destination "$env:GITHUB_WORKSPACE/osx-x64/" -Force - name: Create Package shell: pwsh - run: tar -cvf azurekeyvaultstudio.macos-x64.tar osx-x64 + run: | + $appBundle = Get-ChildItem -Path "$env:GITHUB_WORKSPACE/osx-x64" -Filter "*.app" | Select-Object -First 1 + if (-not $appBundle) { Get-ChildItem -recurse; throw "No macOS app bundle was found for packaging." } + ditto -c -k --sequesterRsrc --keepParent "$($appBundle.FullName)" "$env:GITHUB_WORKSPACE/azurekeyvaultstudio.macos-x64.zip" - name: Upload Artifact uses: actions/upload-artifact@v4 with: - name: azurekeyvaultstudio.macos-x64.tar - path: azurekeyvaultstudio.macos-x64.tar + name: azurekeyvaultstudio.macos-x64.zip + path: azurekeyvaultstudio.macos-x64.zip build_macos_arm64: name: Build macOS ARM64 @@ -141,12 +148,15 @@ jobs: Move-Item -Path "./bin/Release/net10.0-desktop/osx-arm64/publish/*.app" -Destination "$env:GITHUB_WORKSPACE/osx-arm64/" -Force - name: Create Package shell: pwsh - run: tar -cvf azurekeyvaultstudio.macos-arm64.tar osx-arm64 + run: | + $appBundle = Get-ChildItem -Path "$env:GITHUB_WORKSPACE/osx-arm64" -Filter "*.app" | Select-Object -First 1 + if (-not $appBundle) { Get-ChildItem -recurse; throw "No macOS app bundle was found for packaging." } + ditto -c -k --sequesterRsrc --keepParent "$($appBundle.FullName)" "$env:GITHUB_WORKSPACE/azurekeyvaultstudio.macos-arm64.zip" - name: Upload Artifact uses: actions/upload-artifact@v4 with: - name: azurekeyvaultstudio.macos-arm64.tar - path: azurekeyvaultstudio.macos-arm64.tar + name: azurekeyvaultstudio.macos-arm64.zip + path: azurekeyvaultstudio.macos-arm64.zip build_linux: name: Build Linux @@ -184,7 +194,7 @@ jobs: name: Release Packages needs: [build_windows_x64, build_windows_arm64, build_macos_x64, build_macos_arm64, build_linux] runs-on: ubuntu-latest - if: github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/master' || github.event.inputs.run_release == 'true' steps: - uses: actions/checkout@v4 - name: Download all artifacts @@ -194,10 +204,35 @@ jobs: - name: List artifacts shell: pwsh run: Get-ChildItem -Recurse + - name: Generate checksums for Cask + shell: bash + run: | + sha256sum \ + "./azurekeyvaultstudio.win-x64.zip/azurekeyvaultstudio.win-x64.zip" \ + "./azurekeyvaultstudio.win-arm64.zip/azurekeyvaultstudio.win-arm64.zip" \ + "./azurekeyvaultstudio.macos-x64.zip/azurekeyvaultstudio.macos-x64.zip" \ + "./azurekeyvaultstudio.macos-arm64.zip/azurekeyvaultstudio.macos-arm64.zip" \ + "./azurekeyvaultstudio.linux-x64.tar/azurekeyvaultstudio.linux-x64.tar" > SHA256SUMS.txt - name: Create Release run: | - gh release create v${{ env.APP_VERSION_NUMBER }} --draft --title "Azure Key Vault v${{ env.APP_VERSION_NUMBER }}" || true - gh release upload v${{ env.APP_VERSION_NUMBER }} "./azurekeyvaultstudio.win-x64.tar/azurekeyvaultstudio.win-x64.tar" "./azurekeyvaultstudio.win-arm64.tar/azurekeyvaultstudio.win-arm64.tar" "./azurekeyvaultstudio.macos-x64.tar/azurekeyvaultstudio.macos-x64.tar" "./azurekeyvaultstudio.macos-arm64.tar/azurekeyvaultstudio.macos-arm64.tar" "./azurekeyvaultstudio.linux-x64.tar/azurekeyvaultstudio.linux-x64.tar" --clobber || true + cat > RELEASE_NOTES.md <<'EOF' + Notes: + - macOS x64 build is untested + + ### SHA256 Hashes of the release artifacts: + ```text + EOF + cat ./SHA256SUMS.txt >> RELEASE_NOTES.md + echo '```' >> RELEASE_NOTES.md + gh release create v${{ env.APP_VERSION_NUMBER }} --draft --title "Azure Key Vault Explorer v${{ env.APP_VERSION_NUMBER }}" --notes-file RELEASE_NOTES.md || true + gh release upload v${{ env.APP_VERSION_NUMBER }} \ + "./azurekeyvaultstudio.win-x64.zip/azurekeyvaultstudio.win-x64.zip" \ + "./azurekeyvaultstudio.win-arm64.zip/azurekeyvaultstudio.win-arm64.zip" \ + "./azurekeyvaultstudio.macos-x64.zip/azurekeyvaultstudio.macos-x64.zip" \ + "./azurekeyvaultstudio.macos-arm64.zip/azurekeyvaultstudio.macos-arm64.zip" \ + "./azurekeyvaultstudio.linux-x64.tar/azurekeyvaultstudio.linux-x64.tar" \ + "./SHA256SUMS.txt" \ + --clobber || true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: bash diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..a0f64a46 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "github-actions.workflows.pinned.workflows": [ + ".github/workflows/publish-msstore.yml", + ".github/workflows/uno-dotnet.yml" + ] +} \ No newline at end of file diff --git a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio.csproj b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio.csproj index b26259af..95891a1c 100644 --- a/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio.csproj +++ b/src/uno/AzureKeyVaultStudio/AzureKeyVaultStudio.csproj @@ -12,7 +12,7 @@ AzureKeyVaultStudio io.github.cricketthomas.AzureKeyVaultExplorer - 2.1.1.0 + 2.1.2.0 2 cricketthomas diff --git a/src/uno/AzureKeyVaultStudio/Package.appxmanifest b/src/uno/AzureKeyVaultStudio/Package.appxmanifest index b6b86bc4..d3553162 100644 --- a/src/uno/AzureKeyVaultStudio/Package.appxmanifest +++ b/src/uno/AzureKeyVaultStudio/Package.appxmanifest @@ -6,7 +6,7 @@ xmlns:uap18="http://schemas.microsoft.com/appx/manifest/uap/windows10/18" IgnorableNamespaces="uap rescap uap18"> - + Key Vault Explorer Arthur Thomas IV diff --git a/src/uno/AzureKeyVaultStudio/msbuild.ps1 b/src/uno/AzureKeyVaultStudio/msbuild.ps1 index 8073a84e..1823af27 100644 --- a/src/uno/AzureKeyVaultStudio/msbuild.ps1 +++ b/src/uno/AzureKeyVaultStudio/msbuild.ps1 @@ -1,16 +1,11 @@ param( - [string]$BuildNumber = '2.1.1.0' + [string]$BuildNumber = '2.1.1.0', + [string]$OutputPath = 'C:\temp\output' ) -msbuild .\AzureKeyVaultStudio.csproj /t:Restore,Build /r /p:TargetFramework='net10.0-windows10.0.26100' /p:Configuration=Release /p:Platform=x64 /p:GenerateAppxPackageOnBuild=true /p:AppxBundle=Never /p:UapAppxPackageBuildMode=StoreUpload /p:AppxManifestIdentityVersion=$BuildNumber /p:AppxPackageDir="C:\temp\output\$BuildNumber"; +msbuild .\AzureKeyVaultStudio.csproj /t:Restore,Build /r /p:TargetFramework='net10.0-windows10.0.26100' /p:Configuration=Release /p:Platform=x64 /p:GenerateAppxPackageOnBuild=true /p:AppxBundle=Never /p:UapAppxPackageBuildMode=StoreUpload /p:AppxManifestIdentityVersion=$BuildNumber /p:AppxPackageDir="$OutputPath\$BuildNumber"; -return +msbuild .\AzureKeyVaultStudio.csproj /t:Restore,Build /r /p:TargetFramework='net10.0-windows10.0.26100' /p:Configuration=Release /p:Platform=x86 /p:GenerateAppxPackageOnBuild=true /p:AppxBundle=Never /p:UapAppxPackageBuildMode=StoreUpload /p:AppxManifestIdentityVersion=$BuildNumber /p:AppxPackageDir="$OutputPath\$BuildNumber"; -msbuild .\AzureKeyVaultStudio.csproj /t:Restore,Build /r /p:TargetFramework='net10.0-windows10.0.26100' /p:Configuration=Release /p:Platform=x86 /p:GenerateAppxPackageOnBuild=true /p:AppxBundle=Never /p:UapAppxPackageBuildMode=StoreUpload /p:AppxManifestIdentityVersion=$BuildNumber /p:AppxPackageDir="C:\temp\output\$BuildNumber"; - - - - - -msbuild .\AzureKeyVaultStudio.csproj /t:Restore,Build /r /p:TargetFramework='net10.0-windows10.0.26100' /p:Configuration=Release /p:Platform=arm64 /p:GenerateAppxPackageOnBuild=true /p:AppxBundle=Never /p:UapAppxPackageBuildMode=StoreUpload /p:AppxManifestIdentityVersion=$BuildNumber /p:AppxPackageDir="C:\temp\output\$BuildNumber"; +msbuild .\AzureKeyVaultStudio.csproj /t:Restore,Build /r /p:TargetFramework='net10.0-windows10.0.26100' /p:Configuration=Release /p:Platform=arm64 /p:GenerateAppxPackageOnBuild=true /p:AppxBundle=Never /p:UapAppxPackageBuildMode=StoreUpload /p:AppxManifestIdentityVersion=$BuildNumber /p:AppxPackageDir="$OutputPath\$BuildNumber"; From 4a2976532466e8569593f89e2c35121f48826eea Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Wed, 22 Jul 2026 07:27:43 -0400 Subject: [PATCH 02/11] use msix bundler --- .github/workflows/publish-msstore.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index 439af70a..eb5532b4 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -72,7 +72,7 @@ jobs: New-Item -ItemType Directory -Force -Path $platformDir | Out-Null dotnet msbuild "${{ env.PROJECT_PATH }}" ` - /t:Build ` + /t:Restore,Build ` /p:Configuration=Release ` /p:TargetFramework=net10.0-windows10.0.26100 ` /p:WindowsPackageType=MSIX ` From 42e8d3318d043ef5462e664eec142e5f05a0a061 Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Wed, 22 Jul 2026 07:43:49 -0400 Subject: [PATCH 03/11] use msix bundler --- .github/workflows/publish-msstore.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index eb5532b4..cc0203c9 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -72,7 +72,8 @@ jobs: New-Item -ItemType Directory -Force -Path $platformDir | Out-Null dotnet msbuild "${{ env.PROJECT_PATH }}" ` - /t:Restore,Build ` + /restore ` + /t:Build ` /p:Configuration=Release ` /p:TargetFramework=net10.0-windows10.0.26100 ` /p:WindowsPackageType=MSIX ` From 1477f5a850fa43237c0cba96b4fe395d79ddd7a0 Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Wed, 22 Jul 2026 07:45:24 -0400 Subject: [PATCH 04/11] use msix bundler --- .github/workflows/codeql.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 1e1bce85..b68553a4 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -14,8 +14,7 @@ name: "CodeQL" on: push: branches: [ "master", "dev" ] - pull_request: - branches: [ "master", "dev" ] + jobs: analyze: From e8909b1ea841ca2ecbd6c9899147a667ffb2514a Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Wed, 22 Jul 2026 08:01:40 -0400 Subject: [PATCH 05/11] use msix bundler --- .github/workflows/publish-msstore.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index cc0203c9..c649ea54 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -87,7 +87,6 @@ jobs: /p:AppxManifestIdentityVersion=$version - name: Upload MSIX package artifact - if: always() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with: name: msix-${{ matrix.platform }} @@ -177,8 +176,7 @@ jobs: $path_to_my_msix_bundle = "${{steps.bundler.outputs.msixbundle_path}}" Write-Output $path_to_my_msix_bundle - msstore publish $projectDir ` - --appId ${{ env.STORE_APP_ID }} ` + msstore publish --appId ${{ env.STORE_APP_ID }} ` --inputDirectory $path_to_my_msix_bundle ` --noCommit ` --verbose From 3ed56f3fa1bd94786a5736672f11e1bf022ee25c Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Wed, 22 Jul 2026 08:20:34 -0400 Subject: [PATCH 06/11] use msix bundler --- .github/workflows/publish-msstore.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index c649ea54..5e22e509 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -174,14 +174,17 @@ jobs: run: | $path_to_my_msix_bundle = "${{steps.bundler.outputs.msixbundle_path}}" + $inputDirectory = Split-Path -Path $path_to_my_msix_bundle -Parent Write-Output $path_to_my_msix_bundle - msstore publish --appId ${{ env.STORE_APP_ID }} ` - --inputDirectory $path_to_my_msix_bundle ` + msstore publish ` + --appId ${{ env.STORE_APP_ID }} ` + --inputDirectory $inputDirectory ` --noCommit ` --verbose if ($LASTEXITCODE -ne 0) { + Write-Host $Error[0] throw "msstore publish failed with exit code $LASTEXITCODE" } From e3091ce8bfc35f9ad9ae99edc97661956b95224f Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Wed, 22 Jul 2026 08:44:14 -0400 Subject: [PATCH 07/11] use msix bundler --- .github/workflows/publish-msstore.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index 5e22e509..16aad4fe 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -176,8 +176,10 @@ jobs: $path_to_my_msix_bundle = "${{steps.bundler.outputs.msixbundle_path}}" $inputDirectory = Split-Path -Path $path_to_my_msix_bundle -Parent Write-Output $path_to_my_msix_bundle + $projectDir = Join-Path $env:GITHUB_WORKSPACE 'src/uno/AzureKeyVaultStudio' - msstore publish ` + + msstore publish $projectDir ` --appId ${{ env.STORE_APP_ID }} ` --inputDirectory $inputDirectory ` --noCommit ` From 15a49f5fddd1468958f03a3ba07d1f8a38418fb7 Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Thu, 23 Jul 2026 07:47:16 -0400 Subject: [PATCH 08/11] use msix bundler --- .github/workflows/publish-msstore.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index 16aad4fe..757ab6c0 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -172,14 +172,13 @@ jobs: - name: Upload msixbundle to the Microsoft Store (no certification) shell: pwsh run: | - - $path_to_my_msix_bundle = "${{steps.bundler.outputs.msixbundle_path}}" - $inputDirectory = Split-Path -Path $path_to_my_msix_bundle -Parent - Write-Output $path_to_my_msix_bundle - $projectDir = Join-Path $env:GITHUB_WORKSPACE 'src/uno/AzureKeyVaultStudio' + $path_to_my_msix_bundle = "${{steps.bundler.outputs.msixbundle_path}}".Trim() + $inputDirectory = (Split-Path -Path $path_to_my_msix_bundle -Parent).Trim() + Write-Output "msixbundle path: '$path_to_my_msix_bundle'" + Write-Output "input directory: '$inputDirectory'" - msstore publish $projectDir ` + msstore publish $path_to_my_msix_bundle ` --appId ${{ env.STORE_APP_ID }} ` --inputDirectory $inputDirectory ` --noCommit ` From 3d0fe30bdc98af0b79834bb3b4465ca80fc6e7d4 Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Thu, 23 Jul 2026 08:10:17 -0400 Subject: [PATCH 09/11] use msix bundler --- .github/workflows/publish-msstore.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index 757ab6c0..abf05b97 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -181,7 +181,6 @@ jobs: msstore publish $path_to_my_msix_bundle ` --appId ${{ env.STORE_APP_ID }} ` --inputDirectory $inputDirectory ` - --noCommit ` --verbose if ($LASTEXITCODE -ne 0) { From 3786a6d5a3c75891e11c46085314739aa9a80c0b Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Thu, 23 Jul 2026 08:27:14 -0400 Subject: [PATCH 10/11] working pipeline --- .github/workflows/publish-msstore.yml | 27 +++++++-------------------- .github/workflows/uno-dotnet.yml | 2 +- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index abf05b97..ac5f749b 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -156,18 +156,6 @@ jobs: msixbundle-filepath: ${{ github.workspace }}\artifacts\store-bundle\bundle\AzureKeyVaultStudio_${{ needs.prepare_version.outputs.version }}_x86_x64_arm64.msixbundle msixbundle-version: ${{ needs.prepare_version.outputs.version }} - # - name: Prepare msixbundle for publishing - # shell: pwsh - # run: | - # $publishInput = Join-Path $env:GITHUB_WORKSPACE 'artifacts/store-bundle/msix-input' - # $destDir = Join-Path $publishInput 'bundle' - # New-Item -ItemType Directory -Force -Path $destDir | Out-Null - - # $bundlePath = '${{ steps.bundler.outputs.msixbundle_path }}' - # Copy-Item -Path $bundlePath -Destination $destDir -Force - - # Write-Host "Prepared msixbundle for publishing:" - # Get-ChildItem -Path $publishInput -Recurse -File -Filter *.msixbundle | ForEach-Object { Write-Host " - $($_.FullName)" } - name: Upload msixbundle to the Microsoft Store (no certification) shell: pwsh @@ -177,7 +165,6 @@ jobs: Write-Output "msixbundle path: '$path_to_my_msix_bundle'" Write-Output "input directory: '$inputDirectory'" - msstore publish $path_to_my_msix_bundle ` --appId ${{ env.STORE_APP_ID }} ` --inputDirectory $inputDirectory ` @@ -188,11 +175,11 @@ jobs: throw "msstore publish failed with exit code $LASTEXITCODE" } - # - name: Upload package artifacts - # if: always() - # uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a - # with: - # name: store-package - # path: | - # artifacts/** + - name: Upload package artifacts + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a + with: + name: store-package + path: | + artifacts/** diff --git a/.github/workflows/uno-dotnet.yml b/.github/workflows/uno-dotnet.yml index e298d0c0..6bd2b9c4 100644 --- a/.github/workflows/uno-dotnet.yml +++ b/.github/workflows/uno-dotnet.yml @@ -1,4 +1,4 @@ -name: Release +name: Release Azure Key Vault Explorer on: From 61580a7e85e935eb6265fad04af84ce597585d76 Mon Sep 17 00:00:00 2001 From: cricketthomas Date: Thu, 23 Jul 2026 08:43:03 -0400 Subject: [PATCH 11/11] working pipeline --- .github/workflows/publish-msstore.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish-msstore.yml b/.github/workflows/publish-msstore.yml index ac5f749b..1fcd7318 100644 --- a/.github/workflows/publish-msstore.yml +++ b/.github/workflows/publish-msstore.yml @@ -168,6 +168,7 @@ jobs: msstore publish $path_to_my_msix_bundle ` --appId ${{ env.STORE_APP_ID }} ` --inputDirectory $inputDirectory ` + --noCommit ` --verbose if ($LASTEXITCODE -ne 0) {