Update main.yml #2
This file contains 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
name: WinUI 3 MSIX app | |
on: | |
# Triggers the workflow on push or pull request events but only for the master branch | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
env: | |
Unsigned_Artifact_Name: MSIX Package | |
jobs: | |
build: | |
strategy: | |
matrix: | |
configuration: [Release] | |
platform: [x64] | |
runs-on: windows-latest | |
env: | |
Solution_Name: MyPhone | |
steps: | |
- uses: actions/checkout@v3 | |
# Install the .NET Core workload | |
- name: Install .NET Core | |
uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: 6.0.x | |
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild | |
- name: Setup MSBuild | |
uses: microsoft/[email protected] | |
# Restore the application to populate the obj folder with RuntimeIdentifiers | |
- name: Restore the application | |
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration | |
env: | |
Configuration: ${{ matrix.configuration }} | |
# Create the app package by building and packaging the project | |
- name: Create the app package | |
run: | | |
msbuild $env:Solution_Name ` | |
/p:Configuration=$env:Configuration ` | |
/p:Platform=$env:Platform ` | |
/p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode ` | |
/p:AppxBundle=$env:Appx_Bundle ` | |
/p:AppxPackageDir="$env:Appx_Package_Dir" ` | |
/p:GenerateAppxPackageOnBuild=true | |
env: | |
Appx_Bundle: Never | |
Appx_Package_Build_Mode: SideloadOnly | |
Appx_Package_Dir: Packages\ | |
Configuration: ${{ matrix.configuration }} | |
Platform: ${{ matrix.platform }} | |
# Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact | |
- name: Upload MSIX package | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ env.Unsigned_Artifact_Name }} | |
path: ${{ env.Solution_Name }}\\Packages | |
bundle: | |
name: Bundle and sign the MSIX package | |
runs-on: windows-latest | |
needs: build | |
env: | |
Bundling_Workspace_Path: BundlingWorkspace | |
Bundle_Install_Path: BundlePackage | |
Unsigned_Packages_Path: Packages | |
steps: | |
- name: Setup VS Dev Environment | |
uses: seanmiddleditch/gha-setup-vsdevenv@v4 | |
- name: Download build artifacts | |
uses: actions/[email protected] | |
with: | |
name: ${{ env.Unsigned_Artifact_Name }} | |
path: ${{ env.Unsigned_Packages_Path }} | |
- name: Prepare workspace | |
run: | | |
mkdir $env:Bundle_Install_Path | |
mkdir $env:Bundling_Workspace_Path | |
Write-Output "Current worksapce structure:" | |
ls | |
- name: Bundle package | |
run: | | |
cp "${env:Unsigned_Packages_Path}\*\*.msix" $env:Bundling_Workspace_Path -Verbose | |
$files = ls $env:Bundling_Workspace_Path | Sort-Object -Property Name -Descending | |
$bundleName = $files[0].Name | |
$bundleName = $bundleName.Substring(0, $bundleName.LastIndexOf('_')) | |
foreach ($f in $files) { | |
$beginIndex = $f.Name.LastIndexOf('_') | |
$endIndex = $f.Name.LastIndexOf('.') | |
$bundleName += $f.Name.Substring($beginIndex, $endIndex - $beginIndex) | |
} | |
$bundleName += ".msixbundle" | |
Write-Output "Making MSIX bundle ${bundleName}" | |
MakeAppx bundle /d $env:Bundling_Workspace_Path /p "${env:Bundle_Install_Path}\${bundleName}" | |
"MSIX_Bunde_FileName=$bundleName" >> $env:GITHUB_ENV | |
# Decode the base 64 encoded pfx and save the Signing_Certificate | |
#- name: Decode the pfx | |
# id: decode-pfx | |
# run: | | |
# $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.TESTING_PFX_BASE64_ENCODED }}") | |
# $certificatePath = "GitHubActionsWorkflow.pfx" | |
# [IO.File]::WriteAllBytes($certificatePath, $pfx_cert_byte) | |
#- name: Sign the bundle | |
# run: | | |
# SignTool sign /fd SHA256 /a /f GitHubActionsWorkflow.pfx /p "${{ secrets.TESTING_PFX_PASSPHRASE }}" "${env:Bundle_Install_Path}\${{ env.MSIX_Bunde_FileName }}" | |
# Remove the pfx | |
#- name: Post Decode the pfx | |
# if: ${{ steps.decode-pfx.outcome == 'success' || steps.decode-pfx.outcome == 'failure' }} | |
# run: Remove-Item -path GitHubActionsWorkflow.pfx | |
- name: Prepare for upload | |
run: | | |
$files = ls $env:Unsigned_Packages_Path | Sort-Object -Property Name -Descending | |
$contentPath = $files[0].Name | |
$contentPath = "${env:Unsigned_Packages_Path}\$contentPath" | |
Write-Output "Content source path: $contentPath" | |
Write-Output "Copying install scripts" | |
cp "$contentPath\*.ps1" $env:Bundle_Install_Path -Verbose | |
Write-Output "Copying debug symbols" | |
cp "${env:Unsigned_Packages_Path}\*\*.msixsym" $env:Bundle_Install_Path -Verbose | |
Write-Output "Copying dependencies and resources" | |
ls $contentPath | Where-Object -Property Attributes -eq Directory | cp -Recurse -Destination $env:Bundle_Install_Path -Verbose | |
Write-Output "Downloading public certificate" | |
$public_cert_byte = [System.Convert]::FromBase64String("${{ secrets.TESTING_PUBLIC_CERT_BASE64_ENCODED }}") | |
$public_cert_path = "${env:Bundle_Install_Path}\MyPhoneTestingCert_GithubAction.cer" | |
[IO.File]::WriteAllBytes("$public_cert_path", $public_cert_byte) | |
Write-Output "Downloaded public certificate at $public_cert_path" | |
$artifactName = $env:MSIX_Bunde_FileName.Substring(0, $env:MSIX_Bunde_FileName.LastIndexOf('.')) | |
"Bundle_Artifact_Name=$artifactName" >> $env:GITHUB_ENV | |
- name: Delete old unsigned artifact | |
uses: GeekyEggo/[email protected] | |
with: | |
name: ${{ env.Unsigned_Artifact_Name }} | |
- name: Upload signed MSIX package bundle | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ env.Bundle_Artifact_Name }} | |
path: ${{ env.Bundle_Install_Path }} |