From 81970d9b5c56084e3f25c03c88345ce680b9eed5 Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Wed, 19 Jun 2024 15:08:34 +0800 Subject: [PATCH 1/2] init ci action --- .github/workflows/pipeline-ci.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/pipeline-ci.yml diff --git a/.github/workflows/pipeline-ci.yml b/.github/workflows/pipeline-ci.yml new file mode 100644 index 000000000..9e2e553b8 --- /dev/null +++ b/.github/workflows/pipeline-ci.yml @@ -0,0 +1,19 @@ +name: Windows Calculator Continuous Integration Pipeline +on: + push: + branches: [main, release/**, feature/**] + pull_request: + branches: [main, release/**, feature/**] +jobs: + buildWinCalc: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + - uses: nuget/setup-nuget@v2 + name: Use NuGet 6.x + with: + nuget-version: '6.x' + - run: nuget restore ./src/Calculator.sln +# testCalc: +# needs: buildWinCalc +# runs-on: windows-latest From c180b636229b739eb94dad18cbcb5f7f65632485 Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Fri, 21 Jun 2024 00:56:29 +0800 Subject: [PATCH 2/2] new action --- .github/workflows/action-ci.yml | 160 ++++++++++++++++++ .github/workflows/pipeline-ci.yml | 19 --- src/Calculator/Package.appxmanifest | 2 +- .../WinAppDriverLocalServer.cs | 1 + 4 files changed, 162 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/action-ci.yml delete mode 100644 .github/workflows/pipeline-ci.yml diff --git a/.github/workflows/action-ci.yml b/.github/workflows/action-ci.yml new file mode 100644 index 000000000..f356e0f7f --- /dev/null +++ b/.github/workflows/action-ci.yml @@ -0,0 +1,160 @@ +name: Windows Calculator Continuous Integration Pipeline +run-name: WinCalc-CI-0.${{ github.run_number }} +on: + push: + branches: [main, release/**, feature/**] + pull_request: + branches: [main, release/**, feature/**] + workflow_dispatch: +jobs: + defineBuilds: + name: Define builds + runs-on: windows-latest + env: + isPR: ${{ github.event_name == 'pull_request' }} + outputs: + version: ${{ steps.version.outputs.version }} + platformList: ${{ steps.platformList.outputs.platformList }} + unitTestPlatformList: ${{ steps.unitTestPlatformList.outputs.unitTestPlatformList }} + steps: + - name: Generate version number + id: version + run: | + $version = "0.${{ github.run_number }}.${{ github.run_attempt }}.0" + "version=`"$version`"" | Out-File $env:GITHUB_OUTPUT -Append + shell: pwsh + - name: Choose platforms to build + id: platformList + run: | + if ($env:isPR -eq $false) { + 'platformList=["x64", "x86", "ARM64", "ARM"]' | Out-File $env:GITHUB_OUTPUT -Append + echo 'Build all platforms.' + } + else { + 'platformList=["x64"]' | Out-File $env:GITHUB_OUTPUT -Append + echo 'Build x64 only.' + } + shell: pwsh + - name: Choose platforms for unit test + id: unitTestPlatformList + run: | + if ($env:isPR -eq $false){ + 'unitTestPlatformList=["x64", "x86"]' | Out-File $env:GITHUB_OUTPUT -Append + echo 'Test x64, x86' + } + else{ + 'unitTestPlatformList=["x64"]' | Out-File $env:GITHUB_OUTPUT -Append + echo 'Test x64' + } + shell: pwsh + + build: + needs: defineBuilds + name: Build + runs-on: windows-latest + strategy: + matrix: + platform: ${{ fromJSON(needs.defineBuilds.outputs.platformList) }} + env: + buildVersion: ${{ fromJSON(needs.defineBuilds.outputs.version) }} + steps: + - uses: actions/checkout@v4 + - uses: microsoft/setup-msbuild@v2 + name: Setup msbuild + - uses: nuget/setup-nuget@v2 + name: Use nuget 6.x + with: + nuget-version: '6.x' + - run: nuget restore ./src/Calculator.sln + name: Restore nuget dependencies + - run: | + ./build/scripts/UpdateAppxManifestVersion.ps1 ` + -AppxManifest ./src/Calculator/Package.appxmanifest ` + -Version ${{ env.buildVersion }} + shell: pwsh + name: Set version number in AppxManifest + - run: | + msbuild ./src/Calculator.sln ` + -bl:${{ github.workspace }}/output/Calculator.binlog ` + -p:OutDir=${{ github.workspace }}\output\ ` + -p:Platform=${{ matrix.platform }} ` + -p:Configuration=Release ` + -p:GenerateProjectSpecificOutputFolder=true ` + -p:Version=${{ env.buildVersion }} ` + -maxCpuCount ` + -t:Publish ` + -p:PublishDir=${{ github.workspace }}\output\publish\ + shell: pwsh + name: Build calculator.sln + - uses: actions/upload-artifact@v4 + name: Upload build outputs + with: + name: Build-${{ matrix.platform }} + path: ${{ github.workspace }}/output + + unitTests: + needs: [defineBuilds, build] + runs-on: windows-latest + name: Run unit tests + strategy: + matrix: + platform: ${{ fromJSON(needs.defineBuilds.outputs.unitTestPlatformList) }} + env: + testDir: ${{ github.workspace }}/download/CalculatorUnitTests/AppPackages/CalculatorUnitTests_Test + steps: + - uses: actions/download-artifact@v4 + name: Download build outputs + with: + name: Build-${{ matrix.platform }} + path: ${{ github.workspace }}/download + - run: | + ${{ env.testDir }}/Add-AppDevPackage.ps1 ` + -CertificatePath ${{ env.testDir }}/CalculatorUnitTests.cer ` + -Force + shell: pwsh + name: Install test certificate + - uses: ilammy/msvc-dev-cmd@v1 # this is a workaround because microsoft/vstest-action is broken. + name: Setup dev tools + - run: vstest.console.exe ${{ env.testDir }}/CalculatorUnitTests.msix /Platform:${{ matrix.platform }} + name: Run unit tests + + uiTests: + needs: build + runs-on: windows-latest + name: Run UI tests (x64) + env: + appDir: ${{ github.workspace }}/download/Calculator/AppPackages/Calculator*_Test + pubDir: ${{ github.workspace }}/download/publish + steps: + - uses: actions/download-artifact@v4 + name: Download build outputs + with: + name: Build-x64 + path: ${{ github.workspace }}/download + - run: | + Set-DisplayResolution -Width 1920 -Height 1080 -Force + shell: pwsh + name: Set screen resolution + - run: | + ${{ env.appDir }}/Add-AppDevPackage.ps1 ` + -CertificatePath ${{ env.appDir }}/Calculator*.cer ` + -Force + ${{ env.appDir }}/Add-AppDevPackage.ps1 ` + -Force + shell: powershell + name: Install app + - run: | + Invoke-WebRequest 'https://github.com/microsoft/WinAppDriver/releases/download/v1.2.1/WindowsApplicationDriver_1.2.1.msi' ` + -OutFile (New-Item -Path '${{ github.workspace }}/download2/wad.msi' -Force) + cd ${{ github.workspace }}/download2 + msiexec.exe /i wad.msi /quiet /passive + shell: powershell + name: Install WindowsApplicationDriver + - uses: ilammy/msvc-dev-cmd@v1 # this is a workaround because microsoft/vstest-action is broken. + name: Setup dev tools + - run: | + vstest.console.exe ${{ github.workspace }}\download\publish\CalculatorUITests.dll ` + /Platform:x64 ` + /Settings:${{ github.workspace }}\download\publish\CalculatorUITests.ci.runsettings + shell: pwsh + name: Run UI tests diff --git a/.github/workflows/pipeline-ci.yml b/.github/workflows/pipeline-ci.yml deleted file mode 100644 index 9e2e553b8..000000000 --- a/.github/workflows/pipeline-ci.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Windows Calculator Continuous Integration Pipeline -on: - push: - branches: [main, release/**, feature/**] - pull_request: - branches: [main, release/**, feature/**] -jobs: - buildWinCalc: - runs-on: windows-latest - steps: - - uses: actions/checkout@v3 - - uses: nuget/setup-nuget@v2 - name: Use NuGet 6.x - with: - nuget-version: '6.x' - - run: nuget restore ./src/Calculator.sln -# testCalc: -# needs: buildWinCalc -# runs-on: windows-latest diff --git a/src/Calculator/Package.appxmanifest b/src/Calculator/Package.appxmanifest index 901b04538..3e47982b8 100644 --- a/src/Calculator/Package.appxmanifest +++ b/src/Calculator/Package.appxmanifest @@ -15,7 +15,7 @@ Assets\CalculatorStoreLogo.png - + diff --git a/src/CalculatorUITestFramework/WinAppDriverLocalServer.cs b/src/CalculatorUITestFramework/WinAppDriverLocalServer.cs index eff44e393..e15d6cf53 100644 --- a/src/CalculatorUITestFramework/WinAppDriverLocalServer.cs +++ b/src/CalculatorUITestFramework/WinAppDriverLocalServer.cs @@ -43,6 +43,7 @@ public WinAppDriverLocalServer() this.winAppDriverProcess.StartInfo.CreateNoWindow = true; this.winAppDriverProcess.StartInfo.FileName = path; this.winAppDriverProcess.StartInfo.UseShellExecute = false; + this.winAppDriverProcess.StartInfo.RedirectStandardInput = true; this.winAppDriverProcess.StartInfo.RedirectStandardOutput = true; this.winAppDriverProcess.StartInfo.RedirectStandardError = true; this.winAppDriverProcess.OutputDataReceived += this.OnProcessOutputDataReceived;