Browse Source

Add '.github/workflows/main.yml'

天问 1 year ago
parent
commit
46255f01ab
1 changed files with 166 additions and 0 deletions
  1. 166 0
      .github/workflows/main.yml

+ 166 - 0
.github/workflows/main.yml

@@ -0,0 +1,166 @@
+
+
+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, x86, ARM64]
+
+    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/setup-msbuild@v1.0.2
+
+      # 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/download-artifact@v3.0.0
+        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/delete-artifact@v1.0.0
+        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 }}