trigger: - main - develop - patch/* pr: - main - develop - patch/* parameters: - name: buildExternals displayName: 'The specific native artifacts to use for this build.' type: number default: 0 - name: VM_IMAGE_WINDOWS type: string default: 'Azure-Pipelines-windows-2022' - name: VM_IMAGE_WINDOWS_NATIVE type: string default: 'Azure-Pipelines-windows-2019' - name: VM_IMAGE_MAC type: string default: 'Azure-Pipelines-macOS-10.15' - name: VM_IMAGE_LINUX type: string default: 'Azure-Pipelines-ubuntu-18.04' variables: SKIASHARP_VERSION: 2.88.0 FEATURE_NAME_PREFIX: 'feature/' VERBOSITY: normal GIT_SHA: $(Build.SourceVersion) GIT_BRANCH_NAME: $(Build.SourceBranch) GIT_URL: $(Build.Repository.Uri) FEATURE_NAME: '' PREVIEW_LABEL: 'preview' BUILD_NUMBER: $[counter(format('_{0}_{1}_{2}__', variables['SKIASHARP_VERSION'], variables['Build.SourceBranch'], variables['PREVIEW_LABEL']), 1)] TIZEN_LINUX_PACKAGES: libxcb-xfixes0 libxcb-render-util0 libwebkitgtk-1.0-0 libxcb-image0 acl libsdl1.2debian libv4l-0 libxcb-randr0 libxcb-shape0 libxcb-icccm4 libsm6 gettext rpm2cpio cpio bridge-utils openvpn MANAGED_LINUX_PACKAGES: ttf-ancient-fonts ninja-build MONO_VERSION_MACOS: '6_12_7' MONO_VERSION_LINUX: '' XCODE_VERSION: 12.4 DOTNET_VERSION_PREVIOUS: 3.1.413 DOTNET_VERSION: 6.0.200 DOTNET_VERSION_PREVIEW: '' DOTNET_WORKLOAD_SOURCE: 'https://aka.ms/dotnet/maui/6.0.200/preview.13.json' VS_VERSION_PREVIEW: 17/pre CONFIGURATION: 'Release' DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true THROW_ON_TEST_FAILURE: true NUGET_DIFF_PRERELEASE: false ENABLE_CODE_COVERAGE: true EMSCRIPTEN_VERSION: 2.0.23 XHARNESS_VERSION: 1.0.0-prerelease.21404.1 resources: repositories: - repository: xamarin-templates type: github name: xamarin/yaml-templates endpoint: xamarin ref: refs/heads/main stages: - stage: prepare displayName: Prepare Build jobs: - job: prepare # Prepare Build displayName: Prepare Build pool: ${{ if startsWith(parameters.VM_IMAGE_LINUX, 'Azure-Pipelines-') }}: vmImage: ${{ replace(parameters.VM_IMAGE_LINUX, 'Azure-Pipelines-', '') }} ${{ if not(startsWith(parameters.VM_IMAGE_LINUX, 'Azure-Pipelines-')) }}: name: ${{ parameters.VM_IMAGE_LINUX }} steps: - checkout: none - template: azure-templates-variables.yml parameters: updateBuild: true - stage: native_windows displayName: Native Windows dependsOn: prepare jobs: - template: azure-templates-bootstrapper.yml # Build Native Android|x86 (Win) parameters: name: native_android_x86_windows displayName: Android x86 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-android additionalArgs: --buildarch=x86 installWindowsSdk: false artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Android|x64 (Win) parameters: name: native_android_x64_windows displayName: Android x64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-android additionalArgs: --buildarch=x64 installWindowsSdk: false artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Android|arm (Win) parameters: name: native_android_arm_windows displayName: Android arm buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-android additionalArgs: --buildarch=arm installWindowsSdk: false artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Android|arm64 (Win) parameters: name: native_android_arm64_windows displayName: Android arm64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-android additionalArgs: --buildarch=arm64 installWindowsSdk: false artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Tizen (Win) parameters: name: native_tizen_windows displayName: Tizen buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-tizen installWindowsSdk: false artifactName: native - template: azure-templates-bootstrapper.yml # Build ANGLE UWP|x86 (Win) parameters: name: native_uwp_angle_x86_windows displayName: ANGLE x86 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: ANGLE additionalArgs: -Script .\native\uwp\build.cake --buildarch=x86 artifactName: native - template: azure-templates-bootstrapper.yml # Build ANGLE UWP|x64 (Win) parameters: name: native_uwp_angle_x64_windows displayName: ANGLE x64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: ANGLE additionalArgs: -Script .\native\uwp\build.cake --buildarch=x64 artifactName: native - template: azure-templates-bootstrapper.yml # Build ANGLE UWP|arm (Win) parameters: name: native_uwp_angle_arm_windows displayName: ANGLE arm buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: ANGLE additionalArgs: -Script .\native\uwp\build.cake --buildarch=arm artifactName: native - template: azure-templates-bootstrapper.yml # Build ANGLE UWP|arm64 (Win) parameters: name: native_uwp_angle_arm64_windows displayName: ANGLE arm64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: ANGLE additionalArgs: -Script .\native\uwp\build.cake --buildarch=arm64 artifactName: native - template: azure-templates-bootstrapper.yml # Build Native UWP|x86 (Win) parameters: name: native_uwp_x86_windows displayName: UWP x86 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-uwp additionalArgs: --buildarch=x86 --skipAngle=true artifactName: native - template: azure-templates-bootstrapper.yml # Build Native UWP|x64 (Win) parameters: name: native_uwp_x64_windows displayName: UWP x64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-uwp additionalArgs: --buildarch=x64 --skipAngle=true artifactName: native - template: azure-templates-bootstrapper.yml # Build Native UWP|arm (Win) parameters: name: native_uwp_arm_windows displayName: UWP arm buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-uwp additionalArgs: --buildarch=arm --skipAngle=true artifactName: native - template: azure-templates-bootstrapper.yml # Build Native UWP|arm64 (Win) parameters: name: native_uwp_arm64_windows displayName: UWP arm64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-uwp additionalArgs: --buildarch=arm64 --skipAngle=true artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Win32|x86 (Win) parameters: name: native_win32_x86_windows displayName: Win32 x86 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-windows additionalArgs: --buildarch=x86 artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Win32|x64 (Win) parameters: name: native_win32_x64_windows displayName: Win32 x64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-windows additionalArgs: --buildarch=x64 artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Win32|arm64 (Win) parameters: name: native_win32_arm64_windows displayName: Win32 arm64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-windows additionalArgs: --buildarch=arm64 artifactName: native - template: azure-templates-bootstrapper.yml # Build Native NanoServer|x64 (Win) parameters: name: native_win32_x64_nanoserver_windows displayName: Nano Server x64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_WINDOWS_NATIVE}} target: externals-nanoserver additionalArgs: --buildarch=x64 artifactName: native tools: - nano-api-scan - stage: native_macos displayName: Native macOS dependsOn: prepare jobs: - template: azure-templates-bootstrapper.yml # Build Native Android|x86 (macOS) parameters: name: native_android_x86_macos displayName: Android x86 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-android additionalArgs: --buildarch=x86 - template: azure-templates-bootstrapper.yml # Build Native Android|x64 (macOS) parameters: name: native_android_x64_macos displayName: Android x64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-android additionalArgs: --buildarch=x64 - template: azure-templates-bootstrapper.yml # Build Native Android|arm (macOS) parameters: name: native_android_arm_macos displayName: Android arm buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-android additionalArgs: --buildarch=arm - template: azure-templates-bootstrapper.yml # Build Native Android|arm64 (macOS) parameters: name: native_android_arm64_macos displayName: Android arm64 buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-android additionalArgs: --buildarch=arm64 - template: azure-templates-bootstrapper.yml # Build Native iOS (macOS) parameters: name: native_ios_macos displayName: iOS buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-ios artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Mac Catalyst (macOS) parameters: name: native_maccatalyst_macos displayName: Mac Catalyst buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-maccatalyst artifactName: native - template: azure-templates-bootstrapper.yml # Build Native macOS (macOS) parameters: name: native_macos_macos displayName: macOS buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-macos artifactName: native - template: azure-templates-bootstrapper.yml # Build Native tvOS (macOS) parameters: name: native_tvos_macos displayName: tvOS buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-tvos artifactName: native - template: azure-templates-bootstrapper.yml # Build Native watchOS (macOS) parameters: name: native_watchos_macos displayName: watchOS buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-watchos artifactName: native - template: azure-templates-bootstrapper.yml # Build Native Tizen (macOS) parameters: name: native_tizen_macos displayName: Tizen buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_MAC }} target: externals-tizen condition: false # TODO: TIZEN INSTALL BUGS - stage: native_linux displayName: Native Linux dependsOn: prepare jobs: - template: azure-templates-linux-matrix.yml # Build Native Linux (Linux) parameters: artifactName: native buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_LINUX }} builds: - name: '' - name: nodeps desc: 'No Deps' additionalArgs: --verifyExcluded=fontconfig gnArgs: skia_use_fontconfig=false matrix: - arch: x64 docker: scripts/Docker/debian9/amd64 - arch: x64 variant: alpine docker: scripts/Docker/alpine/amd64 - arch: arm docker: scripts/Docker/debian9/clang-cross target: externals-linux-clang-cross - arch: arm64 docker: scripts/Docker/debian9/clang-cross dockerArgs: --build-arg TOOLCHAIN_ARCH=aarch64-linux-gnu --build-arg TOOLCHAIN_ARCH_SHORT=arm64 target: externals-linux-clang-cross - template: azure-templates-bootstrapper.yml # Build Native Tizen (Linux) parameters: name: native_tizen_linux displayName: Tizen buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_LINUX }} packages: $(TIZEN_LINUX_PACKAGES) target: externals-tizen - stage: native_wasm displayName: Native WASM dependsOn: prepare jobs: - template: azure-templates-wasm-matrix.yml # Build Native WASM (Linux) parameters: buildExternals: ${{ parameters.buildExternals }} vmImage: ${{ parameters.VM_IMAGE_LINUX }} artifactName: native emscripten: - 2.0.5 - 2.0.6 - 2.0.9 - 2.0.11 - 2.0.12 - 2.0.23 - stage: managed displayName: Build Managed dependsOn: - native_windows - native_macos - native_linux - native_wasm jobs: - template: azure-templates-bootstrapper.yml # Build Managed (Windows) parameters: name: managed_windows displayName: Managed (Windows) vmImage: ${{ parameters.VM_IMAGE_WINDOWS}} target: libs additionalArgs: --skipExternals="all" installPreviewVs: true requiredArtifacts: - native artifactName: managed postBuildSteps: - pwsh: Remove-Item ./output/native/ -Recurse -Force -ErrorAction Continue displayName: Delete the native folder - template: azure-templates-bootstrapper.yml # Build Managed (macOS) parameters: name: managed_macos displayName: Managed (macOS) vmImage: ${{ parameters.VM_IMAGE_MAC }} target: libs additionalArgs: --skipExternals="all" requiredArtifacts: - native artifactName: managed postBuildSteps: - pwsh: Remove-Item ./output/native/ -Recurse -Force -ErrorAction Continue displayName: Delete the native folder - template: azure-templates-bootstrapper.yml # Build Managed (Linux) parameters: name: managed_linux displayName: Managed (Linux) vmImage: ${{ parameters.VM_IMAGE_LINUX }} packages: $(MANAGED_LINUX_PACKAGES) target: libs additionalArgs: --skipExternals="all" requiredArtifacts: - native artifactName: managed postBuildSteps: - pwsh: Remove-Item ./output/native/ -Recurse -Force -ErrorAction Continue displayName: Delete the native folder - stage: package displayName: Package NuGets dependsOn: managed jobs: - template: azure-templates-bootstrapper.yml # Package NuGets parameters: name: package_windows displayName: Package NuGets vmImage: ${{ parameters.VM_IMAGE_WINDOWS}} target: nuget additionalArgs: --packall=true --skipbuild=true installWindowsSdk: false installDotNet: false requiredArtifacts: - managed - native postBuildSteps: - task: PublishBuildArtifacts@1 displayName: Publish the nuget artifacts inputs: artifactName: nuget pathToPublish: 'output/nugets' - task: PublishBuildArtifacts@1 displayName: Publish the special nuget artifacts inputs: artifactName: nuget_special pathToPublish: 'output/nugets-special' - task: PublishBuildArtifacts@1 displayName: Publish the special nuget artifacts inputs: artifactName: nuget_symbols pathToPublish: 'output/nugets-symbols' - task: PublishBuildArtifacts@1 displayName: Publish the SignList.xml into nuget artifacts inputs: artifactName: nuget pathToPublish: 'SignList.xml' - pwsh: | Remove-Item ./output/native/ -Recurse -Force Remove-Item ./output/nugets/ -Recurse -Force Remove-Item ./output/nugets-special/ -Recurse -Force Remove-Item ./output/nugets-symbols/ -Recurse -Force displayName: Delete the pre-published folders - stage: api_diff displayName: API Diff dependsOn: package jobs: - template: azure-templates-bootstrapper.yml # API Diff parameters: name: api_diff_windows displayName: API Diff vmImage: ${{ parameters.VM_IMAGE_WINDOWS}} target: docs-api-diff additionalArgs: --nugetDiffPrerelease=$(NUGET_DIFF_PRERELEASE) shouldPublish: false requiredArtifacts: - package_windows requiredArtifactsMap: - src: nuget dst: nugets preBuildSteps: - pwsh: .\scripts\install-gtk.ps1 displayName: Install GTK# 2.12 postBuildSteps: - task: PublishBuildArtifacts@1 displayName: Publish the API diffs condition: always() inputs: artifactName: api-diff pathToPublish: '$(Build.SourcesDirectory)\output\api-diff' - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: - stage: signing displayName: Sign NuGets dependsOn: package jobs: - template: sign-artifacts/jobs/v2.yml@xamarin-templates parameters: ${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/heads/patch/')) }}: signType: 'Real' ${{ if not(or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/heads/patch/'))) }}: signType: 'Test' - stage: sbom displayName: 'Software Bill of Materials' dependsOn: signing jobs: - template: compliance/sbom/job.v1.yml@xamarin-templates # Software Bill of Materials (SBOM): https://eng.ms/docs/cloud-ai-platform/devdiv/one-engineering-system-1es/1es-docs/secure-supply-chain/ado-sbom-generator parameters: artifactNames: ['nuget'] packageName: 'SkiaSharp' packageFilter: '*.nupkg' - stage: tests displayName: Tests dependsOn: - native_windows - native_macos - native_linux - native_wasm jobs: - template: azure-templates-bootstrapper.yml # Tests|netfx (Windows) parameters: name: tests_netfx_windows displayName: Windows (.NET Framework) vmImage: ${{ parameters.VM_IMAGE_WINDOWS}} target: tests-netfx additionalArgs: --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) installPreviewVs: true installWindowsSdk: false shouldPublish: false requiredArtifacts: - native_win32_x86_windows - native_win32_x64_windows postBuildSteps: - task: PublishTestResults@2 displayName: Publish the .NET Framework test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp*.Desktop.Tests/**/TestResults.xml' testRunTitle: 'Windows .NET Framework Tests' - template: azure-templates-bootstrapper.yml # Tests|netcore (Windows) parameters: name: tests_netcore_windows displayName: Windows (.NET Core) vmImage: ${{ parameters.VM_IMAGE_WINDOWS}} target: tests-netcore additionalArgs: --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) installWindowsSdk: false shouldPublish: false requiredArtifacts: - native_win32_x86_windows - native_win32_x64_windows tools: - dotnet-reportgenerator-globaltool postBuildSteps: - task: PublishTestResults@2 displayName: Publish the .NET Core test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp*.NetCore.Tests/**/TestResults.xml' testRunTitle: 'Windows .NET Core Tests' - task: PublishBuildArtifacts@1 displayName: 'Publish the code coverage results' inputs: artifactName: coverage_netcore_windows pathToPublish: 'output/coverage' - template: azure-templates-bootstrapper.yml # Tests|netfx (macOS) parameters: name: tests_netfx_macos displayName: macOS (.NET Framework) vmImage: ${{ parameters.VM_IMAGE_MAC }} target: tests-netfx additionalArgs: --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) shouldPublish: false requiredArtifacts: - native_macos_macos postBuildSteps: - task: PublishTestResults@2 displayName: Publish the Mono test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp*.Desktop.Tests/**/TestResults.xml' testRunTitle: 'macOS Mono Tests' - template: azure-templates-bootstrapper.yml # Tests|netcore (macOS) parameters: name: tests_netcore_macos displayName: macOS (.NET Core) vmImage: ${{ parameters.VM_IMAGE_MAC }} target: tests-netcore additionalArgs: --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) shouldPublish: false requiredArtifacts: - native_macos_macos tools: - dotnet-reportgenerator-globaltool postBuildSteps: - task: PublishTestResults@2 displayName: Publish the .NET Core test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp*.NetCore.Tests/**/TestResults.xml' testRunTitle: 'macOS .NET Core Tests' - task: PublishBuildArtifacts@1 displayName: 'Publish the code coverage results' inputs: artifactName: coverage_netcore_macos pathToPublish: 'output/coverage' - template: azure-templates-bootstrapper.yml # Tests|android (macOS) parameters: name: tests_android_macos displayName: Android (macOS) vmImage: ${{ parameters.VM_IMAGE_MAC }} target: tests-android additionalArgs: --device=android-emulator-32_30 --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) shouldPublish: false requiredArtifacts: - native_android_x86_macos - native_android_x64_macos - native_android_arm_macos - native_android_arm64_macos preBuildSteps: - pwsh: | dotnet tool install Microsoft.DotNet.XHarness.CLI ` --global ` --add-source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json ` --version "$env:XHARNESS_VERSION" displayName: Install the xharness .NET Core tool - bash: sh -c "echo \"y\" | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \"emulator\" \"system-images;android-30;google_apis_playstore;x86\"" displayName: Install the Android emulator postBuildSteps: - task: PublishTestResults@2 displayName: Publish the Android test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'output/logs/testlogs/SkiaSharp.Android.Tests/**/TestResults.xml' testRunTitle: 'Android Tests' - task: PublishBuildArtifacts@1 displayName: Publish the test logs condition: always() inputs: artifactName: testlogs_android pathToPublish: 'output/logs/testlogs' - template: azure-templates-bootstrapper.yml # Tests|ios (macOS) parameters: name: tests_ios_macos displayName: iOS (macOS) vmImage: ${{ parameters.VM_IMAGE_MAC }} target: tests-ios additionalArgs: --device=ios-simulator-64 --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) shouldPublish: false requiredArtifacts: - native_ios_macos preBuildSteps: - template: azure-templates-provisioning-profiles.yml - pwsh: | dotnet tool install Microsoft.DotNet.XHarness.CLI ` --global ` --add-source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json ` --version "$env:XHARNESS_VERSION" displayName: Install the xharness .NET Core tool postBuildSteps: - task: PublishTestResults@2 displayName: Publish the iOS test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'output/logs/testlogs/SkiaSharp.iOS.Tests/**/TestResults.xml' testRunTitle: 'iOS Tests' - task: PublishBuildArtifacts@1 displayName: Publish the test logs condition: always() inputs: artifactName: testlogs_ios pathToPublish: 'output/logs/testlogs' - template: azure-templates-bootstrapper.yml # Tests|netfx (Linux) parameters: name: tests_netfx_linux displayName: Linux (.NET Framework) vmImage: ${{ parameters.VM_IMAGE_LINUX }} packages: $(MANAGED_LINUX_PACKAGES) target: tests-netfx additionalArgs: --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) shouldPublish: false requiredArtifacts: - native_linux_x64_linux postBuildSteps: - task: PublishTestResults@2 displayName: Publish the Mono test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp*.Desktop.Tests/**/TestResults.xml' testRunTitle: 'Linux Mono Tests' - template: azure-templates-bootstrapper.yml # Tests|netcore (Linux) parameters: name: tests_netcore_linux displayName: Linux (.NET Core) vmImage: ${{ parameters.VM_IMAGE_LINUX }} packages: $(MANAGED_LINUX_PACKAGES) target: tests-netcore additionalArgs: --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=$(ENABLE_CODE_COVERAGE) shouldPublish: false requiredArtifacts: - native_linux_x64_linux tools: - dotnet-reportgenerator-globaltool postBuildSteps: - task: PublishTestResults@2 displayName: Publish the .NET Core test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp*.NetCore.Tests/**/TestResults.xml' testRunTitle: 'Linux .NET Core Tests' - task: PublishBuildArtifacts@1 displayName: 'Publish the code coverage results' inputs: artifactName: coverage_netcore_linux pathToPublish: 'output/coverage' - template: azure-templates-bootstrapper.yml # Tests [WASM] (Linux) parameters: name: tests_wasm_linux displayName: WASM (Linux) vmImage: ${{ parameters.VM_IMAGE_LINUX }} packages: $(MANAGED_LINUX_PACKAGES) ninja-build target: tests-wasm additionalArgs: --skipExternals="all" --throwOnTestFailure=$(THROW_ON_TEST_FAILURE) --coverage=false --chromedriver=$(CHROMEWEBDRIVER) shouldPublish: false requiredArtifacts: - native_wasm_linux installEmsdk: true initScript: source ~/emsdk/emsdk_env.sh postBuildSteps: - task: PublishTestResults@2 displayName: Publish the WASM test results condition: always() inputs: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp*.Wasm.Tests/**/TestResults.xml' testRunTitle: 'Linux WASM Tests' # TODO: add tests for linux alpine # TODO: add tests for linux no dependencies # TODO: add tests for windows nano server - job: coverage_reports # Coverage Reports displayName: Coverage Reports pool: ${{ if startsWith(parameters.VM_IMAGE_LINUX, 'Azure-Pipelines-') }}: vmImage: ${{ replace(parameters.VM_IMAGE_LINUX, 'Azure-Pipelines-', '') }} ${{ if not(startsWith(parameters.VM_IMAGE_LINUX, 'Azure-Pipelines-')) }}: name: ${{ parameters.VM_IMAGE_LINUX }} dependsOn: - tests_netcore_windows - tests_netcore_macos - tests_netcore_linux steps: - checkout: self - template: azure-templates-variables.yml - task: DownloadBuildArtifacts@0 displayName: Download the coverage_netcore_windows artifact inputs: artifactName: coverage_netcore_windows downloadPath: output - task: DownloadBuildArtifacts@0 displayName: Download the coverage_netcore_macos artifact inputs: artifactName: coverage_netcore_macos downloadPath: output - task: DownloadBuildArtifacts@0 displayName: Download the coverage_netcore_linux artifact inputs: artifactName: coverage_netcore_linux downloadPath: output - task: PublishCodeCoverageResults@1 displayName: 'Publish the code coverage results' inputs: codeCoverageTool: Cobertura summaryFileLocation: 'output/**/Cobertura.xml' - stage: samples displayName: Samples dependsOn: package jobs: - template: azure-templates-bootstrapper.yml # Build Samples (Windows) parameters: name: samples_windows displayName: Windows vmImage: ${{ parameters.VM_IMAGE_WINDOWS}} target: samples installPreviewVs: true requiredArtifactsMap: - src: nuget dst: nugets postBuildSteps: - pwsh: Remove-Item ./output/nugets/ -Recurse -Force -ErrorAction Continue displayName: Delete the nugets folder - template: azure-templates-bootstrapper.yml # Build Samples (macOS) parameters: name: samples_macos displayName: macOS vmImage: ${{ parameters.VM_IMAGE_MAC }} target: samples shouldPublish: false requiredArtifactsMap: - src: nuget dst: nugets preBuildSteps: - template: azure-templates-provisioning-profiles.yml - template: azure-templates-bootstrapper.yml # Build Samples (Linux) parameters: name: samples_linux displayName: Linux vmImage: ${{ parameters.VM_IMAGE_LINUX }} packages: $(MANAGED_LINUX_PACKAGES) target: samples shouldPublish: false requiredArtifactsMap: - src: nuget dst: nugets installEmsdk: true initScript: source ~/emsdk/emsdk_env.sh - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: - stage: checks displayName: Run Code Checks dependsOn: prepare jobs: - template: azure-templates-bootstrapper.yml # Run Code Checks parameters: name: native_checks_windows displayName: Run Code Checks condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/heads/patch/')) vmImage: ${{ parameters.VM_IMAGE_WINDOWS}} target: git-sync-deps installWindowsSdk: false installDotNet: false shouldPublish: false postBuildSteps: - task: CredScan@2 displayName: Analyze source for credentials condition: always() inputs: toolMajorVersion: 'V2' - task: PoliCheck@1 displayName: Run PoliCheck condition: always() inputs: inputType: 'Basic' targetType: 'F' - task: SdtReport@1 displayName: Create security analysis report condition: always() inputs: AllTools: false APIScan: false BinSkim: false CodesignValidation: false CredScan: true FortifySCA: false FxCop: false ModernCop: false MSRD: false PoliCheck: true RoslynAnalyzers: false SDLNativeRules: false Semmle: false TSLint: false ToolLogsNotFoundAction: 'Standard' - task: PublishSecurityAnalysisLogs@3 displayName: Publish security analysis logs condition: always() - task: TSAUpload@1 displayName: Publish TSA logs condition: always() continueOnError: true inputs: tsaVersion: 'TsaV2' codebase: 'NewOrUpdate' tsaEnvironment: 'PROD' codeBaseName: 'SkiaSharp_main' notificationAlias: 'xamacomd@microsoft.com' notifyAlwaysV2: false instanceUrlForTsaV2: 'DEVDIV' projectNameDEVDIV: 'DevDiv' areaPath: 'DevDiv\VS Client - Runtime SDKs\SkiaSharp' iterationPath: 'DevDiv\OneVS' uploadAPIScan: false uploadBinSkim: false uploadCredScan: true uploadFortifySCA: false uploadFxCop: false uploadModernCop: false uploadPoliCheck: true uploadPREfast: false uploadRoslyn: false uploadTSLint: false uploadAsync: true