trigger: branches: include: - main paths: exclude: - apidocs - docs batch: true pr: branches: include: - main paths: exclude: - apidocs - docs variables: BuildConfiguration: Release jobs: - job: scrape_x64 displayName: "Scrape headers: x64" timeoutInMinutes: 60 pool: vmImage: windows-2022 workspace: clean: all steps: - checkout: self lfs: true - task: UseDotNet@2 displayName: ⚙ Install .NET SDK inputs: packageType: sdk useGlobalJson: true - task: PowerShell@2 displayName: Set build version inputs: targetType: inline script: | .\scripts\Install-DotNetTool.ps1 -Name nbgv nbgv cloud - task: PowerShell@2 displayName: GenerateMetadataSource.ps1 - x64 inputs: filePath: 'scripts\GenerateMetadataSource.ps1' arguments: '-arch x64' errorActionPreference: 'continue' pwsh: true - publish: 'generation\WinSDK\obj' displayName: Publish x64 generated assets artifact: 'generated_x64' - job: scrape_x86 displayName: "Scrape headers: x86" timeoutInMinutes: 60 pool: vmImage: windows-2022 workspace: clean: all steps: - checkout: self lfs: true - task: UseDotNet@2 displayName: ⚙ Install .NET SDK inputs: packageType: sdk useGlobalJson: true - task: PowerShell@2 displayName: GenerateMetadataSource.ps1 - x86 inputs: filePath: 'scripts\GenerateMetadataSource.ps1' arguments: '-arch x86 -scrapeConstants' errorActionPreference: 'continue' pwsh: true - publish: 'generation\WinSDK\obj' displayName: Publish x86 generated assets artifact: 'generated_x86' - job: scrape_arm64 displayName: "Scrape headers: arm64" timeoutInMinutes: 60 pool: vmImage: windows-2022 workspace: clean: all steps: - checkout: self lfs: true - task: UseDotNet@2 displayName: ⚙ Install .NET SDK inputs: packageType: sdk useGlobalJson: true - task: PowerShell@2 displayName: GenerateMetadataSource.ps1 - arm64 inputs: filePath: 'scripts\GenerateMetadataSource.ps1' arguments: '-arch arm64' errorActionPreference: 'continue' pwsh: true - publish: 'generation\WinSDK\obj' displayName: Publish arm64 generated assets artifact: 'generated_arm64' - job: build_winmd displayName: Build, test, sign, package winmd workspace: clean: all dependsOn: ['scrape_x64','scrape_x86','scrape_arm64'] variables: OutputPackagesDir: $(Build.SourcesDirectory)\bin\Packages\Release\NuGet pool: vmImage: windows-2022 steps: - checkout: self lfs: true - task: BatchScript@1 displayName: Set up VS environment inputs: filename: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat' modifyEnvironment: true - task: UseDotNet@2 displayName: ⚙ Install .NET SDK inputs: packageType: sdk useGlobalJson: true # ESRP Authenticode sign package DLLs - task: UseDotNet@2 displayName: Install DotNet 2.1.x for signing tasks inputs: packageType: runtime version: 2.1.x - script: dotnet --info displayName: Display .NET SDK/runtime info - task: DownloadPipelineArtifact@2 displayName: Download x64 generated assets inputs: artifact: 'generated_x64' path: 'generation\WinSDK\obj' - task: DownloadPipelineArtifact@2 displayName: Download x86 generated assets inputs: artifact: 'generated_x86' path: 'generation\WinSDK\obj' - task: DownloadPipelineArtifact@2 displayName: Download arm64 generated assets inputs: artifact: 'generated_arm64' path: 'generation\WinSDK\obj' - task: PowerShell@2 displayName: Build metadata binary inputs: filePath: 'scripts\BuildMetadataBin.ps1' arguments: '-assetsScrapedSeparately' pwsh: true - task: EsrpCodeSigning@1 displayName: 'Authenticode Sign Binaries in Metadata package' inputs: ConnectedServiceName: 'Xlang Code Signing' FolderPath: '$(Build.SourcesDirectory)\bin' Pattern: 'Windows.Win32.winmd' signConfigType: 'inlineSignParams' inlineOperation: | [ { "keyCode": "CP-230012", "operationSetCode": "SigntoolSign", "parameters": [ { "parameterName": "OpusName", "parameterValue": "Microsoft" }, { "parameterName": "OpusInfo", "parameterValue": "http://www.microsoft.com" }, { "parameterName": "PageHash", "parameterValue": "/NPH" }, { "parameterName": "FileDigest", "parameterValue": "/fd sha256" }, { "parameterName": "TimeStamp", "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" } ], "toolName": "signtool.exe", "toolVersion": "6.2.9304.0" } ] SessionTimeout: '60' MaxConcurrency: '50' MaxRetryAttempts: '2' condition: and(succeeded(), eq(variables['SignFiles'], 'true'), ne(variables['Build.Reason'], 'PullRequest')) - task: EsrpCodeSigning@1 displayName: Authenticode sign net8.0 binaries in Generator SDK package inputs: ConnectedServiceName: 'Xlang Code Signing' FolderPath: '$(Build.SourcesDirectory)\bin\$(BuildConfiguration)\net8.0' Pattern: 'ClangSharpSourceToWinmd.dll,ConstantsScraper.dll,CsvHelper.dll,ICSharpCode.Decompiler.dll,MetadataTasks.dll,MetadataUtils.dll,WinmdUtils.dll' signConfigType: 'inlineSignParams' inlineOperation: | [ { "keyCode": "CP-230012", "operationSetCode": "SigntoolSign", "parameters": [ { "parameterName": "OpusName", "parameterValue": "Microsoft" }, { "parameterName": "OpusInfo", "parameterValue": "http://www.microsoft.com" }, { "parameterName": "PageHash", "parameterValue": "/NPH" }, { "parameterName": "FileDigest", "parameterValue": "/fd sha256" }, { "parameterName": "TimeStamp", "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" } ], "toolName": "signtool.exe", "toolVersion": "6.2.9304.0" } ] SessionTimeout: '60' MaxConcurrency: '50' MaxRetryAttempts: '2' condition: and(succeeded(), eq(variables['SignFiles'], 'true'), ne(variables['Build.Reason'], 'PullRequest')) - task: PowerShell@2 displayName: Do packages inputs: filePath: $(Build.SourcesDirectory)\scripts\DoPackages.ps1 arguments: -SkipInstallTools pwsh: true - task: PowerShell@2 displayName: Do samples inputs: filePath: $(Build.SourcesDirectory)\scripts\DoSamples.ps1 arguments: -SkipInstallTools pwsh: true - task: PowerShell@2 displayName: Do tests inputs: filePath: $(Build.SourcesDirectory)\scripts\DoTests.ps1 arguments: -SkipInstallTools pwsh: true - task: EsrpCodeSigning@1 displayName: 'Sign nuget packages' inputs: ConnectedServiceName: 'Xlang Code Signing' FolderPath: '$(OutputPackagesDir)' Pattern: '*.nupkg' signConfigType: 'inlineSignParams' inlineOperation: | [ { "KeyCode" : "CP-401405", "OperationCode" : "NuGetSign", "Parameters" : {}, "ToolName" : "sign", "ToolVersion" : "1.0" }, { "KeyCode" : "CP-401405", "OperationCode" : "NuGetVerify", "Parameters" : {}, "ToolName" : "sign", "ToolVersion" : "1.0" } ] SessionTimeout: '60' MaxConcurrency: '50' MaxRetryAttempts: '2' condition: and(succeeded(), eq(variables['SignFiles'], 'true'), ne(variables['Build.Reason'], 'PullRequest')) - publish: bin/logs artifact: build_logs displayName: 📢 Publish build logs condition: always() - task: PublishPipelineArtifact@1 displayName: 'Publish NuGet packages to pipeline artifacts' inputs: targetPath: '$(OutputPackagesDir)' artifact: NuGetPackages # There's a problem on microsoft.visualstudio.com that requires the guid instead of NuGetCommand@2 # Don't publish if we're using pre-generated source - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 displayName: 'NuGet push' inputs: command: push packagesToPush: '$(OutputPackagesDir)/**/*.nupkg;!$(OutputPackagesDir)/**/*.symbols.nupkg' publishVstsFeed: 'c1408dcb-1833-4ae4-9af5-1a891a12cc3c' allowPackageConflicts: true condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))