# Commit triggers trigger: - master # PR triggers pr: branches: include: - master paths: include: - azure-pipelines.yml - templates/* - src/* - schemas/JSON/manifests/* pool: vmImage: 'windows-latest' variables: solution: 'src\AppInstallerCLI.sln' appxPackageDir: '$(Build.ArtifactStagingDirectory)/AppxPackages/' EnableDetectorVcpkg: true # Do not set the build version for a PR build. jobs: - job: 'GetReleaseTag' condition: not(eq(variables['Build.Reason'], 'PullRequest')) variables: runCodesignValidationInjection: ${{ false }} skipComponentGovernanceDetection: ${{ true }} steps: - task: PowerShell@2 name: 'GetTag' displayName: Get Release Tag inputs: filePath: 'src\binver\Update-BinVer.ps1' arguments: '-OutVar' workingDirectory: 'src' # Build job creates artifacts for use in test jobs - job: 'Build' timeoutInMinutes: 120 dependsOn: 'GetReleaseTag' condition: always() strategy: matrix: x86_release: buildConfiguration: 'Release' buildPlatform: 'x86' testBuildConfiguration: 'TestRelease' artifactIdentifier: 'x86release' x64_release: buildConfiguration: 'Release' buildPlatform: 'x64' testBuildConfiguration: 'TestRelease' artifactIdentifier: 'x64release' variables: BuildVer: $[counter(dependencies.GetReleaseTag.outputs['GetTag.tag'], 1)] buildOutDir: $(Build.SourcesDirectory)\src\$(buildPlatform)\$(buildConfiguration) buildOutDirAnyCpu: $(Build.SourcesDirectory)\src\AnyCPU\$(buildConfiguration) artifactsDir: $(Build.ArtifactStagingDirectory)\$(buildPlatform) packageLayoutDir: $(Build.BinariesDirectory)\WingetPackageLayout steps: - task: NuGetToolInstaller@1 displayName: Install Nuget # Restores all projects, including native (vcxproj) projects - task: NuGetCommand@2 displayName: Restore Solution inputs: restoreSolution: '$(solution)' # Restore these UAP packages as https://github.com/NuGet/Home/issues/7796 leads to all UAP packages being skipped for restore. # Even though they don't need any actual restore action, they need the project.assets.json file to be created and a direct restore does that. - task: NuGetCommand@2 displayName: Restore AppInstallerCLIPackage inputs: restoreSolution: 'src\AppInstallerCLIPackage\AppInstallerCLIPackage.wapproj' - task: NuGetCommand@2 displayName: Restore AppInstallerTestMsixInstaller inputs: restoreSolution: 'src\AppInstallerTestMsixInstaller\AppInstallerTestMsixInstaller.wapproj' # Restores only .NET core projects, but is still necessary, as without this the IndexCreationTool and LocalhostWebServer projects fail to build - task: DotNetCoreCLI@2 displayName: DotNet Restore inputs: command: 'restore' projects: '**/*.csproj' - task: CmdLine@2 displayName: Enable Vcpkg Install inputs: script: | $(VCPKG_INSTALLATION_ROOT)\vcpkg.exe integrate install workingDirectory: '$(VCPKG_INSTALLATION_ROOT)' - task: PowerShell@2 displayName: Update Binary Version condition: not(eq(variables['Build.Reason'], 'PullRequest')) inputs: filePath: 'src\binver\Update-BinVer.ps1' arguments: '-TargetFile binver\binver\version.h -BuildVersion $(BuildVer)' workingDirectory: 'src' # Build all solutions in the root directory. - task: VSBuild@1 displayName: Build Solution inputs: platform: '$(buildPlatform)' solution: '$(solution)' configuration: '$(buildConfiguration)' msbuildArgs: '/bl:$(artifactsDir)\msbuild.binlog /p:AppxBundlePlatforms="$(buildPlatform)" /p:AppxPackageDir="$(appxPackageDir)" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=SideloadOnly' - task: VSBuild@1 displayName: Build Test Project inputs: platform: '$(buildPlatform)' solution: '$(solution)' configuration: '$(testBuildConfiguration)' msbuildArgs: '/bl:$(artifactsDir)\msbuild-testProject.binlog /p:AppxBundlePlatforms="$(buildPlatform)" /p:AppxPackageDir="$(appxPackageDir)" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=SideloadOnly' - task: MSBuild@1 displayName: Build MSIX Test Installer File inputs: platform: '$(buildPlatform)' solution: 'src\AppInstallerTestMsixInstaller\AppInstallerTestMsixInstaller.wapproj' configuration: '$(buildConfiguration)' msbuildArguments: '/p:AppxPackageOutput="$(Build.ArtifactStagingDirectory)\AppInstallerTestMsixInstaller.msix" /p:AppxBundle=Never /p:UapAppxPackageBuildMode=SideLoadOnly /p:AppxPackageSigningEnabled=false' - task: CopyFiles@2 displayName: 'Copy specific build artifacts' inputs: Contents: | $(buildOutDir)\WindowsPackageManager\WindowsPackageManager.pdb $(buildOutDir)\WinGetUtil\WinGetUtil.dll $(buildOutDir)\WinGetUtil\WinGetUtil.pdb TargetFolder: '$(artifactsDir)' - task: PowerShell@2 displayName: Create Package Layout inputs: filePath: 'src\AppInstallerCLIPackage\Execute-AppxRecipe.ps1' arguments: '-AppxRecipePath AppInstallerCLIPackage\bin\$(buildPlatform)\$(buildConfiguration)\AppInstallerCLIPackage.build.appxrecipe -LayoutPath $(packageLayoutDir) -Force -Verbose' workingDirectory: 'src' - task: CopyFiles@2 displayName: 'Copy Dev Package (Loose Files)' inputs: SourceFolder: '$(packageLayoutDir)' TargetFolder: '$(artifactsDir)\DevPackage' - task: CopyFiles@2 displayName: 'Copy Dev Packages' inputs: SourceFolder: '$(appxPackageDir)' TargetFolder: '$(artifactsDir)\AppxPackages' - task: CopyFiles@2 displayName: 'Copy native binaries for Microsoft.WinGet.Client (net6)' inputs: SourceFolder: $(buildOutDir) Contents: | Microsoft.Management.Deployment.InProc\Microsoft.Management.Deployment.dll Microsoft.Management.Deployment\Microsoft.Management.Deployment.winmd WindowsPackageManager\WindowsPackageManager.dll UndockedRegFreeWinRT\winrtact.dll TargetFolder: $(buildOutDirAnyCpu)\PowerShell\Microsoft.WinGet.Client\net6.0-windows10.0.22000.0\SharedDependencies\$(BuildPlatform) flattenFolders: true - task: CopyFiles@2 displayName: 'Copy native binaries for Microsoft.WinGet.Client (net48)' inputs: SourceFolder: $(buildOutDir) Contents: | Microsoft.Management.Deployment.InProc\Microsoft.Management.Deployment.dll Microsoft.Management.Deployment\Microsoft.Management.Deployment.winmd WindowsPackageManager\WindowsPackageManager.dll UndockedRegFreeWinRT\winrtact.dll TargetFolder: $(buildOutDirAnyCpu)\PowerShell\Microsoft.WinGet.Client\net48\SharedDependencies\$(BuildPlatform) flattenFolders: true - task: CopyFiles@2 displayName: 'Copy native binaries for Microsoft.WinGet.Configuration' inputs: SourceFolder: $(buildOutDir) Contents: | Microsoft.Management.Configuration\Microsoft.Management.Configuration.dll TargetFolder: $(buildOutDirAnyCpu)\PowerShell\Microsoft.WinGet.Configuration\SharedDependencies\$(BuildPlatform) flattenFolders: true - task: CopyFiles@2 displayName: 'Copy managed binaries for Microsoft.WinGet.Configuration in arch specific' inputs: SourceFolder: $(buildOutDirAnyCpu) Contents: | Microsoft.Management.Configuration.Projection\net6.0-windows10.0.22000.0\Microsoft.Management.Configuration.Projection.dll TargetFolder: $(buildOutDirAnyCpu)\PowerShell\Microsoft.WinGet.Configuration\SharedDependencies\$(BuildPlatform) flattenFolders: true - task: CopyFiles@2 displayName: 'Copy PowerShell AnyCPU Module Files' inputs: SourceFolder: '$(buildOutDirAnyCpu)\PowerShell' TargetFolder: '$(artifactsDir)\PowerShell' - task: CopyFiles@2 displayName: 'Copy binaries' inputs: SourceFolder: '$(buildOutDir)' TargetFolder: '$(artifactsDir)' Contents: | AppInstallerCLIE2ETests\** AppInstallerCLITests\** Microsoft.Management.Configuration\** Microsoft.Management.Configuration.UnitTests\** Microsoft.Management.Configuration.OutOfProc\** - task: CopyFiles@2 displayName: 'Copy Files: WinGetUtilInterop.UnitTests' inputs: SourceFolder: '$(Build.SourcesDirectory)\src\WinGetUtilInterop.UnitTests\bin\$(buildPlatform)\$(BuildConfiguration)\net6.0' TargetFolder: '$(artifactsDir)\WinGetUtilInterop.UnitTests\' CleanTargetFolder: true OverWrite: true - task: CopyFiles@2 displayName: 'Copy WinGetUtil to WinGetUtilInterop.UnitTests folder' inputs: Contents: | $(buildOutDir)\WinGetUtil\WinGetUtil.dll TargetFolder: '$(artifactsDir)\WinGetUtilInterop.UnitTests\' flattenFolders: true - task: CopyFiles@2 displayName: 'Copy LocalhostWebServer to E2ETests' inputs: SourceFolder: '$(buildOutDir)\LocalhostWebServer' TargetFolder: '$(artifactsDir)\E2ETests\LocalhostWebServer' # Invoke E2E setup to generate the TestLocalIndex; could optimize out some of its steps if needed - template: templates/e2e-setup.yml parameters: sourceDir: $(Build.SourcesDirectory) localhostWebServerArgs: '-BuildRoot $(artifactsDir)\E2ETests\LocalhostWebServer -StaticFileRoot $(Agent.TempDirectory)\TestLocalIndex -LocalSourceJson $(Build.SourcesDirectory)\src\AppInstallerCLIE2ETests\TestData\localsource.json -TestDataPath $(Build.SourcesDirectory)\src\AppInstallerCLIE2ETests\TestData -ExitBeforeRun' signingCertOutDir: $(artifactsDir)\E2ETests - task: CopyFiles@2 displayName: 'Copy TestLocalIndex' inputs: SourceFolder: '$(Agent.TempDirectory)\TestLocalIndex' TargetFolder: '$(artifactsDir)\E2ETests\TestLocalIndex' - task: CopyFiles@2 displayName: 'Copy TestData' inputs: SourceFolder: '$(Build.SourcesDirectory)\src\AppInstallerCLIE2ETests\TestData\' TargetFolder: '$(artifactsDir)\E2ETests\TestData' - task: CopyFiles@2 displayName: 'Copy Dev Package Dependencies' inputs: SourceFolder: '$(appxPackageDir)\AppInstallerCLIPackage_0.0.2.0_Test\Dependencies\$(buildPlatform)\' TargetFolder: '$(artifactsDir)\E2ETests\DevPackageDependencies' - task: CopyFiles@2 displayName: 'Copy test scripts to artifacts' inputs: Contents: | $(Build.SourcesDirectory)\src\PowerShell\scripts\Execute-WinGetTests.ps1 $(Build.SourcesDirectory)\src\PowerShell\tests\** $(Build.SourcesDirectory)\src\LocalhostWebServer\Run-LocalhostWebServer.ps1 TargetFolder: '$(artifactsDir)\E2ETests\Scripts' flattenFolders: true - task: PublishPipelineArtifact@1 displayName: Publish Pipeline Artifacts inputs: targetPath: '$(artifactsDir)' artifact: 'Build.$(artifactIdentifier)' - task: ComponentGovernanceComponentDetection@0 displayName: Component Governance inputs: scanType: 'Register' verbosity: 'Verbose' alertWarningLevel: 'High' # Test job runs tests using build artifacts - job: 'Test' timeoutInMinutes: 120 dependsOn: 'Build' condition: succeeded('Build') strategy: matrix: x86_release: buildConfiguration: 'Release' buildPlatform: 'x86' testBuildConfiguration: 'TestRelease' artifactIdentifier: 'x86release' x64_release: buildConfiguration: 'Release' buildPlatform: 'x64' testBuildConfiguration: 'TestRelease' artifactIdentifier: 'x64release' variables: buildOutDir: $(Pipeline.Workspace)\Build.$(artifactIdentifier) artifactsDir: $(Build.ArtifactStagingDirectory) packageLayoutDir: $(Pipeline.Workspace)\Build.$(artifactIdentifier)\DevPackage steps: - task: DownloadPipelineArtifact@2 displayName: 'Download Build Artifacts' inputs: artifact: 'Build.$(artifactIdentifier)' path: '$(buildOutDir)' - task: PowerShell@2 displayName: Install Tests Dependencies inputs: targetType: 'inline' script: | Get-ChildItem $(buildOutDir)\E2ETests\DevPackageDependencies -Filter *.appx | %{ Add-AppxPackage $_.FullName } - task: VisualStudioTestPlatformInstaller@1 displayName: Prepare VSTest for E2E Tests inputs: packageFeedSelector: 'nugetOrg' # TODO: Repair-WinGetPackageManager will fail because it tries to install x64 for an x86 build machine. # Remove manual installation of VCLibs (x64) once this is fixed. - powershell: | if ("$(buildPlatform)" -eq "x86") { iwr https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile Microsoft.VCLibs.x64.appx Add-AppxPackage Microsoft.VCLibs.x64.appx } Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Install-Module Microsoft.WinGet.Client -Repository PSGallery -Force Repair-WingetPackageManager -AllUsers -Latest Install-WinGetPackage -Id Microsoft.Sysinternals.PsTools -Source winget displayName: Install Sysinternals PsTools Using Winget condition: succeededOrFailed() - powershell: | $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") PsExec -accepteula -s -i $(buildOutDir)\AppInstallerCLITests\AppInstallerCLITests.exe -logto $(artifactsDir)\AICLI-Unpackaged-System.log -s -r junit -o $(artifactsDir)\TEST-AppInstallerCLI-Unpackaged-System.xml displayName: Run Unit Tests Unpackaged Under System Context workingDirectory: '$(buildOutDir)\AppInstallerCLITests' condition: succeededOrFailed() - powershell: | Uninstall-WinGetPackage -Id Microsoft.Sysinternals.PsTools -Source winget displayName: Clean up Sysinternals PsTools condition: succeededOrFailed() - task: PowerShell@2 displayName: Run Unit Tests Packaged inputs: filePath: 'src\AppInstallerCLITests\Run-TestsInPackage.ps1' arguments: '-Args "~[pips]" -BuildRoot $(buildOutDir) -PackageRoot $(packageLayoutDir) -LogTarget $(artifactsDir)\AICLI-Packaged.log -TestResultsTarget $(artifactsDir)\TEST-AppInstallerCLI-Packaged.xml -ScriptWait' workingDirectory: 'src' condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Unit Test Results inputs: testResultsFormat: 'JUnit' testResultsFiles: '$(artifactsDir)\TEST-*.xml' failTaskOnFailedTests: true condition: succeededOrFailed() - task: PowerShell@2 displayName: 'Set program files directory' inputs: targetType: 'inline' script: | if ("$(buildPlatform)" -eq "x86") { Write-Host "##vso[task.setvariable variable=platformProgramFiles;]${env:ProgramFiles(x86)}" } else { Write-Host "##vso[task.setvariable variable=platformProgramFiles;]${env:ProgramFiles}" } condition: succeededOrFailed() # Resolves resource strings utilized by InProc E2E tests. - task: CopyFiles@2 displayName: 'Copy resources.pri to dotnet directory' inputs: SourceFolder: '$(buildOutDir)\DevPackage' TargetFolder: '$(platformProgramFiles)\dotnet' Contents: resources.pri condition: succeededOrFailed() # Winmd accessed by test runner process (dotnet.exe) - task: CopyFiles@2 displayName: 'Copy winmd to dotnet directory' inputs: SourceFolder: '$(buildOutDir)\DevPackage' TargetFolder: '$(platformProgramFiles)\dotnet' Contents: Microsoft.Management.Deployment.winmd condition: succeededOrFailed() - template: templates/e2e-setup.yml parameters: sourceDir: $(Build.SourcesDirectory) localhostWebServerArgs: '-BuildRoot $(buildOutDir)\E2ETests\LocalhostWebServer -StaticFileRoot $(buildOutDir)\E2ETests\TestLocalIndex -SourceCert $(buildOutDir)\E2ETests\TestSigningCert.cer' - template: templates/e2e-test.template.yml parameters: title: "E2E Tests Packaged" isPackaged: true filter: "TestCategory!=InProcess&TestCategory!=OutOfProcess" - template: templates/e2e-test.template.yml parameters: title: "Microsoft.Management.Deployment E2E Tests (In-process)" isPackaged: false filter: "TestCategory=InProcess" - template: templates/e2e-test.template.yml parameters: title: "Microsoft.Management.Deployment E2E Tests (Out-of-process)" isPackaged: true filter: "TestCategory=OutOfProcess" - task: CopyFiles@2 displayName: 'Copy E2E Tests Package Log to artifacts folder' inputs: SourceFolder: '$(temp)\E2ETestLogs' TargetFolder: '$(artifactsDir)\PackagedLog' condition: succeededOrFailed() - task: VSTest@2 displayName: 'Run tests: WinGetUtilInterop.UnitTests' inputs: testSelector: 'testAssemblies' testAssemblyVer2: 'WinGetUtilInterop.UnitTests.dll' searchFolder: '$(buildOutDir)\WinGetUtilInterop.UnitTests' codeCoverageEnabled: true platform: '$(buildPlatform)' configuration: '$(BuildConfiguration)' diagnosticsEnabled: true condition: succeededOrFailed() - task: VSTest@2 displayName: 'Run tests: Microsoft.Management.Configuration.UnitTests (InProc)' inputs: testRunTitle: Microsoft.Management.Configuration.UnitTests (InProc) testSelector: 'testAssemblies' testAssemblyVer2: '**\Microsoft.Management.Configuration.UnitTests.dll' searchFolder: '$(buildOutDir)\Microsoft.Management.Configuration.UnitTests' testFiltercriteria: 'Category=InProc' codeCoverageEnabled: false platform: '$(buildPlatform)' configuration: '$(BuildConfiguration)' diagnosticsEnabled: true condition: succeededOrFailed() - task: PowerShell@2 displayName: Prepare for Microsoft.Management.Configuration.UnitTests (OutOfProc) inputs: filePath: 'src\Microsoft.Management.Configuration.OutOfProc\Prepare-ConfigurationOOPTests.ps1' arguments: '-BuildOutputPath $(buildOutDir) -PackageLayoutPath $(packageLayoutDir)' condition: succeededOrFailed() - task: VSTest@2 displayName: 'Run tests: Microsoft.Management.Configuration.UnitTests (OutOfProc)' inputs: testRunTitle: Microsoft.Management.Configuration.UnitTests (OutOfProc) testSelector: 'testAssemblies' testAssemblyVer2: '**\Microsoft.Management.Configuration.UnitTests.dll' searchFolder: '$(buildOutDir)\Microsoft.Management.Configuration.UnitTests' testFiltercriteria: 'Category=OutOfProc' codeCoverageEnabled: true platform: '$(buildPlatform)' configuration: '$(BuildConfiguration)' condition: succeededOrFailed() - task: PowerShell@2 displayName: Collect logs for Microsoft.Management.Configuration.UnitTests (OutOfProc) inputs: filePath: 'src\Microsoft.Management.Configuration.OutOfProc\Collect-ConfigurationOOPTests.ps1' arguments: '-TargetLocation $(artifactsDir)\ConfigOOPTestsLog' condition: succeededOrFailed() - powershell: Get-Process LocalhostWebServer | Stop-Process displayName: Stop LocalhostWebServer condition: succeededOrFailed() - task: PublishPipelineArtifact@1 displayName: Publish Pipeline Artifacts inputs: targetPath: '$(artifactsDir)' artifact: 'Test.$(artifactIdentifier).$(System.JobAttempt)' condition: succeededOrFailed() # Build and test PowerShell module - job: 'BuildPowerShellModule' timeoutInMinutes: 120 dependsOn: 'Build' condition: succeeded('Build') variables: buildOutDir: $(Pipeline.Workspace)\Build.x64Release steps: - task: DownloadPipelineArtifact@2 displayName: 'Download Build Artifacts' - task: CopyFiles@2 displayName: 'Copy x64 PowerShell Binaries to Output' inputs: SourceFolder: '$(buildOutDir)\PowerShell' Contents: '**\*' TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: CopyFiles@2 displayName: 'Copy x86 PowerShell Binaries to Output' inputs: SourceFolder: '$(Pipeline.Workspace)\Build.x86release\PowerShell' Contents: '**\*' TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: PowerShell@2 displayName: Generate Microsoft.WinGet.Client Help Documentation inputs: pwsh: true targetType: inline script: | Install-Module -Name platyPS -Force Import-Module platyPS New-ExternalHelp -Path '$(Build.SourcesDirectory)\src\PowerShell\Help\Microsoft.WinGet.Client' -OutputPath '$(Build.ArtifactStagingDirectory)\Microsoft.WinGet.Client' - task: CopyFiles@2 displayName: 'Copy Microsoft.WinGet.DSC module to staging directory' inputs: SourceFolder: '$(Build.SourcesDirectory)\src\PowerShell\Microsoft.WinGet.DSC' Contents: '**\*' TargetFolder: '$(Build.ArtifactStagingDirectory)\Microsoft.WinGet.DSC' - task: PowerShell@2 displayName: Install Tests Dependencies inputs: targetType: 'inline' script: | Get-ChildItem AppxPackages\AppInstallerCLIPackage_0.0.2.0_Test\Dependencies\x64 -Filter *.appx | %{ Add-AppxPackage $_.FullName } workingDirectory: $(buildOutDir) - template: templates/e2e-setup.yml parameters: sourceDir: $(Build.SourcesDirectory) localhostWebServerArgs: '-BuildRoot $(buildOutDir)\E2ETests\LocalhostWebServer -StaticFileRoot $(buildOutDir)\E2ETests\TestLocalIndex -SourceCert $(buildOutDir)\E2ETests\TestSigningCert.cer' - pwsh: .\RunTests.ps1 -testModulesPath $(Build.ArtifactStagingDirectory) -outputPath $(Pipeline.Workspace)\PesterTest -packageLayoutPath $(buildOutDir)\DevPackage workingDirectory: $(Build.SourcesDirectory)\src\PowerShell\tests\ displayName: Run PowerShell 7 Tests - powershell: .\RunTests.ps1 -testModulesPath $(Build.ArtifactStagingDirectory) -outputPath $(Pipeline.Workspace)\WPPesterTest workingDirectory: $(Build.SourcesDirectory)\src\PowerShell\tests\ displayName: Run Windows PowerShell Tests condition: succeededOrFailed() - powershell: Get-Process LocalhostWebServer | Stop-Process displayName: Stop LocalhostWebServer condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Pester Test Results PowerShell 7 inputs: testResultsFormat: 'NUnit' testResultsFiles: '$(Pipeline.Workspace)\PesterTest\Test*.xml' failTaskOnFailedTests: true condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Pester Test Results Windows PowerShell inputs: testResultsFormat: 'NUnit' testResultsFiles: '$(Pipeline.Workspace)\WPPesterTest\Test*.xml' failTaskOnFailedTests: true condition: succeededOrFailed() - task: PublishPipelineArtifact@1 displayName: Publish PowerShell Module Artifacts inputs: targetPath: '$(Build.ArtifactStagingDirectory)' condition: succeededOrFailed() - job: 'Fuzzing' timeoutInMinutes: 60 condition: not(eq(variables['Build.Reason'], 'PullRequest')) strategy: matrix: x64: buildConfiguration: 'Fuzzing' buildPlatform: 'x64' variables: buildOutDir: $(Build.SourcesDirectory)\src\$(buildPlatform)\$(buildConfiguration) artifactsDir: $(Build.ArtifactStagingDirectory)\$(buildPlatform) steps: - task: NuGetToolInstaller@1 displayName: Install Nuget - task: NuGetCommand@2 displayName: Restore Solution inputs: restoreSolution: '$(solution)' - task: VSBuild@1 displayName: Build Fuzzing Artifacts inputs: platform: '$(buildPlatform)' solution: '$(solution)' configuration: '$(buildConfiguration)' msbuildArgs: '/bl:$(artifactsDir)\msbuild.binlog' - task: CopyFiles@2 displayName: Copy Fuzzing Artifacts for Publishing inputs: SourceFolder: '$(buildOutDir)\WinGetYamlFuzzing' Contents: '**' TargetFolder: '$(artifactsDir)' - task: PublishPipelineArtifact@1 displayName: Publish Fuzzing Artifacts inputs: targetPath: '$(artifactsDir)' - task: onefuzz-task@0 inputs: onefuzzOSes: 'Windows' env: onefuzzDropDirectory: '$(buildOutDir)\WinGetYamlFuzzing' SYSTEM_ACCESSTOKEN: $(System.AccessToken)