Files PR Validation #7512
Workflow file for this run
This file contains hidden or 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
| # Copyright (c) Files Community | |
| # Licensed under the MIT License. | |
| # Abstract: | |
| # This CI is executed when a new commit is created on the main branch or | |
| # on a PR whose head branch is the main branch. | |
| # However, the CI will not be executed if files not directly related to | |
| # source code maintenance are updated. | |
| name: Files CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - 'assets/**' | |
| - 'builds/**' | |
| - 'docs/**' | |
| - '*.md' | |
| pull_request: | |
| paths-ignore: | |
| - 'assets/**' | |
| - 'builds/**' | |
| - 'docs/**' | |
| - '*.md' | |
| run-name: ${{ github.event_name == 'pull_request' && 'Files PR Validation' || 'Files CI Validation' }} | |
| env: | |
| WORKING_DIR: ${{ github.workspace }} # Default: 'D:\a\Files\Files' | |
| SOLUTION_PATH: '${{ github.workspace }}\Files.slnx' | |
| PACKAGE_PROJECT_DIR: '${{ github.workspace }}\src\Files.App (Package)' | |
| PACKAGE_PROJECT_PATH: '${{ github.workspace }}\src\Files.App (Package)\Files.Package.wapproj' | |
| TESTS_ARCHITECTURE: 'x64' | |
| TESTS_CONFIGURATION: 'Release' | |
| TESTS_ASSEMBLY_DIR: '${{ github.workspace }}\artifacts\TestsAssembly' | |
| AXE_TESTS_PROJECT_DIR: '${{ github.workspace }}\tests\Files.InteractionTests' | |
| AXE_TESTS_PROJECT_PATH: '${{ github.workspace }}\tests\Files.InteractionTests\Files.InteractionTests.csproj' | |
| UNIT_TESTS_PROJECT_DIR: '${{ github.workspace }}\tests\Files.App.UnitTests' | |
| UNIT_TESTS_PROJECT_PATH: '${{ github.workspace }}\tests\Files.App.UnitTests\Files.App.UnitTests.csproj' | |
| ARTIFACTS_STAGING_DIR: '${{ github.workspace }}\artifacts' | |
| APPX_PACKAGE_DIR: '${{ github.workspace }}\artifacts\AppxPackages' | |
| APPX_SELFSIGNED_CERT_PATH: '${{ github.workspace }}\.github\workflows\FilesApp_SelfSigned.pfx' | |
| WINAPPDRIVER_EXE86_PATH: 'C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe' | |
| WINAPPDRIVER_EXE64_PATH: 'C:\Program Files\Windows Application Driver\WinAppDriver.exe' | |
| jobs: | |
| check-formatting: | |
| if: github.repository_owner == 'files-community' | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout the repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 2 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| - name: Install XamlStyler.Console | |
| run: 'dotnet tool install --global XamlStyler.Console' | |
| - name: Check XAML formatting | |
| id: check-step | |
| run: | | |
| $changedFiles = (git diff --diff-filter=d --name-only HEAD~1) -split "\n" | Where-Object {$_ -like "*.xaml"} | |
| foreach ($file in $changedFiles) | |
| { | |
| xstyler -p -l None -f $file | |
| if ($LASTEXITCODE -ne 0) | |
| { | |
| echo "::error file=$file::Format check failed" | |
| } | |
| } | |
| continue-on-error: true | |
| - name: Fail if necessary | |
| if: steps.check-step.outcome == 'failure' | |
| run: exit 1 | |
| build: | |
| if: github.repository_owner == 'files-community' | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| configuration: [Debug, Release] | |
| platform: [x64, arm64] | |
| env: | |
| CONFIGURATION: ${{ matrix.configuration }} | |
| ARCHITECTURE: ${{ matrix.platform }} | |
| steps: | |
| - name: Checkout the repository | |
| uses: actions/checkout@v4 | |
| - name: Setup MSBuild | |
| uses: microsoft/setup-msbuild@v2 | |
| - name: Setup NuGet | |
| uses: NuGet/setup-nuget@v2 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| global-json-file: global.json | |
| - name: Restore Files | |
| shell: pwsh | |
| run: | | |
| msbuild $env:SOLUTION_PATH ` | |
| -t:Restore ` | |
| -p:Platform=$env:ARCHITECTURE ` | |
| -p:Configuration=$env:CONFIGURATION ` | |
| -p:PublishReadyToRun=true ` | |
| -v:quiet | |
| - if: env.CONFIGURATION != env.TESTS_CONFIGURATION || env.ARCHITECTURE != env.TESTS_ARCHITECTURE | |
| name: Build Files | |
| run: | | |
| msbuild ` | |
| $env:PACKAGE_PROJECT_PATH ` | |
| -t:Build ` | |
| -p:Configuration=$env:CONFIGURATION ` | |
| -p:Platform=$env:ARCHITECTURE ` | |
| -p:AppxBundle=Never ` | |
| -v:quiet | |
| - if: env.CONFIGURATION == env.TESTS_CONFIGURATION && env.ARCHITECTURE == env.TESTS_ARCHITECTURE | |
| name: Create self signed cert as a pfx file | |
| run: ./.github/scripts/Generate-SelfCertPfx.ps1 -Destination "$env:APPX_SELFSIGNED_CERT_PATH" | |
| - if: env.CONFIGURATION == env.TESTS_CONFIGURATION && env.ARCHITECTURE == env.TESTS_ARCHITECTURE | |
| name: Build & package Files | |
| run: | | |
| msbuild ` | |
| $env:PACKAGE_PROJECT_PATH ` | |
| -t:Build ` | |
| -t:_GenerateAppxPackage ` | |
| -p:Configuration=$env:CONFIGURATION ` | |
| -p:Platform=$env:ARCHITECTURE ` | |
| -p:AppxBundlePlatforms=$env:TESTS_ARCHITECTURE ` | |
| -p:AppxBundle=Always ` | |
| -p:UapAppxPackageBuildMode=SideloadOnly ` | |
| -p:AppxPackageDir=$env:APPX_PACKAGE_DIR ` | |
| -p:AppxPackageSigningEnabled=true ` | |
| -p:PackageCertificateKeyFile=$env:APPX_SELFSIGNED_CERT_PATH ` | |
| -p:PackageCertificatePassword="" ` | |
| -p:PackageCertificateThumbprint="" ` | |
| -v:quiet | |
| - if: env.ARCHITECTURE == env.TESTS_ARCHITECTURE && env.CONFIGURATION == env.TESTS_CONFIGURATION | |
| name: Build interaction tests | |
| run: | | |
| msbuild $env:AXE_TESTS_PROJECT_PATH ` | |
| -t:Build ` | |
| -p:Configuration=$env:CONFIGURATION ` | |
| -p:Platform=$env:TESTS_ARCHITECTURE ` | |
| -v:quiet | |
| - if: env.ARCHITECTURE == env.TESTS_ARCHITECTURE && env.CONFIGURATION == env.TESTS_CONFIGURATION | |
| name: Copy tests bin to the artifacts dir | |
| shell: pwsh | |
| run: | | |
| Copy-Item ` | |
| -Path "$env:AXE_TESTS_PROJECT_DIR\bin" ` | |
| -Destination "$env:TESTS_ASSEMBLY_DIR" -Recurse | |
| - if: env.ARCHITECTURE == env.TESTS_ARCHITECTURE && env.CONFIGURATION == env.TESTS_CONFIGURATION | |
| name: Upload the packages to the Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: 'Appx Packages (${{ env.CONFIGURATION }}, ${{ env.ARCHITECTURE }})' | |
| path: ${{ env.ARTIFACTS_STAGING_DIR }} | |
| axe-test: | |
| if: github.repository_owner == 'files-community' && always() | |
| needs: [build] | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| configuration: [Release] | |
| platform: [x64] | |
| env: | |
| CONFIGURATION: ${{ matrix.configuration }} | |
| PLATFORM: ${{ matrix.platform }} | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| steps: | |
| - if: contains(join(needs.*.result, ','), 'failure') | |
| name: Fail if necessary | |
| run: exit 1 | |
| - name: Checkout the repository | |
| uses: actions/checkout@v4 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| global-json-file: global.json | |
| - name: Download the packages from the Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: 'Appx Packages (${{ env.CONFIGURATION }}, ${{ env.PLATFORM }})' | |
| path: ${{ env.ARTIFACTS_STAGING_DIR }} | |
| - name: Prepare for the tests | |
| shell: powershell | |
| run: | | |
| Set-Location "$env:APPX_PACKAGE_DIR" | |
| $AppxPackageBundleDir = Get-ChildItem -Filter Files.Package_*_Test -Name | |
| Set-Location $AppxPackageBundleDir | |
| ./Install.ps1 -Force | |
| Get-AppxPackage | |
| Set-DisplayResolution -Width 1920 -Height 1080 -Force | |
| Start-Process -FilePath "$env:WINAPPDRIVER_EXE86_PATH" | |
| # Retry the tests if first attempt fails | |
| - name: Run interaction tests | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 15 | |
| max_attempts: 2 | |
| shell: pwsh | |
| command: | | |
| dotnet test ` | |
| $env:TESTS_ASSEMBLY_DIR\**\Files.InteractionTests.dll ` | |
| --logger "trx;LogFileName=$env:TESTS_ASSEMBLY_DIR\testResults.trx" | |
| - if: github.event_name == 'pull_request' | |
| uses: geekyeggo/delete-artifact@v5 | |
| with: | |
| name: '*' | |
| unit-test: | |
| if: github.repository_owner == 'files-community' && always() | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| configuration: [Release] | |
| platform: [x64] | |
| env: | |
| CONFIGURATION: ${{ matrix.configuration }} | |
| PLATFORM: ${{ matrix.platform }} | |
| steps: | |
| - if: contains(join(needs.*.result, ','), 'failure') | |
| name: Fail if necessary | |
| run: exit 1 | |
| - name: Checkout the repository | |
| uses: actions/checkout@v4 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| global-json-file: global.json | |
| - name: Build the unit tests | |
| run: | | |
| dotnet build $env:UNIT_TESTS_PROJECT_PATH -c $env:CONFIGURATION -a $env:PLATFORM | |
| - name: Run the unit tests | |
| run: | | |
| Set-DisplayResolution -Width 1920 -Height 1080 -Force | |
| dotnet test $env:UNIT_TESTS_PROJECT_DIR\bin\**\Files.App.UnitTests.dll |