trigger: - main - vs* - exp/* - perf/* # If defined here, these values are not overrideable # Once they exist, we should define these as "runtime parameters" # https://github.com/Microsoft/azure-pipelines-yaml/pull/129 # variables: # SignType: real # SkipApplyOptimizationData: false parameters: - name: OptProfDropName displayName: Optional OptProfDrop Override type: string default: 'default' variables: # if OptProfDrop is not set, string '$(OptProfDrop)' will be passed to the build script. - name: OptProfDrop value: '' - name: SourceBranch value: $(IbcSourceBranchName) # If we're not on a vs* branch, use main as our optprof collection branch - ${{ if not(startsWith(variables['Build.SourceBranch'], 'refs/heads/vs')) }}: - name: SourceBranch value: main # if OptProfDropName is set as a parameter, set OptProfDrop to the parameter and unset SourceBranch - ${{ if ne(parameters.OptProfDropName, 'default') }}: - name: OptProfDrop value: ${{parameters.OptProfDropName}} - name: SourceBranch value: '' - name: EnableReleaseOneLocBuild value: true # Enable loc for vs17.12 - name: Codeql.Enabled value: true - group: DotNet-MSBuild-SDLValidation-Params resources: repositories: - repository: 1ESPipelineTemplates type: git name: 1ESPipelineTemplates/1ESPipelineTemplates extends: template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates parameters: featureFlags: autoBaseline: true pool: name: VSEngSS-MicroBuild2022-1ES os: windows sdl: # We generate SBOM ourselves, so don't need steps injected by 1ES. sbom: enabled: false codeSignValidation: enabled: true break: true additionalTargetsGlobPattern: -|**\bootstrapper\**\vs_enterprise.exe credscan: suppressionsFile: $(Build.SourcesDirectory)/eng/CredScanSuppressions.json stages: - stage: build displayName: Build jobs: # The localization setup for release/ branches. Note difference in LclPackageId. main branch is handled separately below. # Used for vs17.2, vs17.4, vs17.6 etc. branches only. # When the branch is setup for localization (the localization ticket needs to be created - https://aka.ms/ceChangeLocConfig, requesting change from one release branch to another), # set 'EnableReleaseOneLocBuild' to true. - ${{ if startsWith(variables['Build.SourceBranch'], 'refs/heads/vs') }}: - template: /eng/common/templates-official/job/onelocbuild.yml@self parameters: MirrorRepo: 'msbuild' LclSource: lclFilesfromPackage LclPackageId: 'LCL-JUNO-PROD-MSBUILDREL' MirrorBranch: ${{ replace(variables['Build.SourceBranch'], 'refs/heads/', '') }} JobNameSuffix: '_release' condition: ${{ variables.EnableReleaseOneLocBuild }} # The localization setup for main branch. Note difference in package ID. Should not be used with release/ branches. - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: - template: /eng/common/templates-official/job/onelocbuild.yml@self parameters: MirrorRepo: 'msbuild' LclSource: lclFilesfromPackage LclPackageId: 'LCL-JUNO-PROD-MSBUILD' MirrorBranch: 'main' JobNameSuffix: '_main' condition: eq(variables['Build.SourceBranch'], 'refs/heads/main') - job: Windows_NT pool: name: VSEngSS-MicroBuild2022-1ES demands: - agent.os -equals Windows_NT timeoutInMinutes: 180 variables: - group: Publish-Build-Assets - name: TeamName value: MSBuild - name: VisualStudio.MajorVersion value: 17 - name: VisualStudio.ChannelName value: 'int.main' - name: VisualStudio.DropName value: Products/$(System.TeamProject)/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber) steps: - task: NuGetToolInstaller@1 displayName: 'Install NuGet.exe' - task: NuGetCommand@2 displayName: Restore internal tools inputs: command: restore feedsToUse: config restoreSolution: 'eng\common\internal\Tools.csproj' nugetConfigPath: 'NuGet.config' restoreDirectory: '$(Build.SourcesDirectory)\.packages' - task: ms-vseng.MicroBuildTasks.30666190-6959-11e5-9f96-f56098202fef.MicroBuildSigningPlugin@1 inputs: signType: $(SignType) zipSources: false condition: and(succeeded(), in(variables['SignType'], 'test', 'real')) - task: MicroBuildOptProfPlugin@6 inputs: ProfilingInputsDropName: '$(VisualStudio.DropName)' ShouldSkipOptimize: true AccessToken: '$(System.AccessToken)' feedSource: 'https://devdiv.pkgs.visualstudio.com/DefaultCollection/_packaging/MicroBuildToolset/nuget/v3/index.json' displayName: 'Install OptProf Plugin' # Required by MicroBuildBuildVSBootstrapper - task: MicroBuildSwixPlugin@4 inputs: dropName: $(VisualStudio.DropName) - script: eng/CIBuild.cmd -configuration $(BuildConfiguration) -officialBuildId $(Build.BuildNumber) -officialSkipApplyOptimizationData $(SkipApplyOptimizationData) /p:RepositoryName=$(Build.Repository.Name) /p:VisualStudioIbcSourceBranchName=$(SourceBranch) /p:VisualStudioDropAccessToken=$(System.AccessToken) /p:VisualStudioDropName=$(VisualStudio.DropName) /p:DotNetSignType=$(SignType) /p:TeamName=MSBuild /p:DotNetPublishUsingPipelines=true /p:VisualStudioIbcDrop=$(OptProfDrop) /p:GenerateSbom=true displayName: Build condition: succeeded() # Required by Microsoft policy - template: eng\common\templates-official\steps\generate-sbom.yml@self # Publish OptProf configuration files - task: 1ES.PublishArtifactsDrop@1 inputs: dropServiceURI: 'https://devdiv.artifacts.visualstudio.com' buildNumber: 'ProfilingInputs/DevDiv/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber)' sourcePath: '$(Build.SourcesDirectory)\artifacts\OptProf\$(BuildConfiguration)\Data' toLowerCase: false usePat: true displayName: 'OptProf - Publish to Artifact Services - ProfilingInputs' condition: succeeded() # Build VS bootstrapper # Generates $(Build.StagingDirectory)\MicroBuild\Output\BootstrapperInfo.json - task: MicroBuildBuildVSBootstrapper@3 inputs: vsMajorVersion: $(VisualStudio.MajorVersion) channelName: $(VisualStudio.ChannelName) manifests: $(VisualStudio.SetupManifestList) outputFolder: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(BuildConfiguration)\Insertion' displayName: 'OptProf - Build VS bootstrapper' condition: succeeded() # Publish run settings - task: PowerShell@2 inputs: filePath: eng\common\sdk-task.ps1 arguments: -configuration $(BuildConfiguration) -task VisualStudio.BuildIbcTrainingSettings /p:VisualStudioDropName=$(VisualStudio.DropName) /p:BootstrapperInfoPath=$(Build.StagingDirectory)\MicroBuild\Output\BootstrapperInfo.json /p:VisualStudioIbcTrainingSettingsPath=$(Build.SourcesDirectory)\eng\config\OptProf.runsettings displayName: 'OptProf - Build IBC training settings' condition: succeeded() # Publish bootstrapper info - task: 1ES.PublishBuildArtifacts@1 inputs: PathtoPublish: $(Build.StagingDirectory)\MicroBuild\Output ArtifactName: MicroBuildOutputs ArtifactType: Container displayName: 'OptProf - Publish Artifact: MicroBuildOutputs' condition: succeeded() - task: 1ES.PublishBuildArtifacts@1 displayName: 'Publish Artifact: logs' inputs: PathtoPublish: 'artifacts\log\$(BuildConfiguration)' ArtifactName: logs condition: succeededOrFailed() # Publishes setup VSIXes to a drop. # Note: The insertion tool looks for the display name of this task in the logs. - task: 1ES.MicroBuildVstsDrop@1 displayName: Upload VSTS Drop inputs: dropName: $(VisualStudio.DropName) dropFolder: 'artifacts\VSSetup\$(BuildConfiguration)\Insertion' dropRetentionDays: '30' # extended by insertion + VS release accessToken: '$(System.AccessToken)' dropServiceUri: 'https://devdiv.artifacts.visualstudio.com' vsDropServiceUri: 'https://vsdrop.corp.microsoft.com/file/v1' condition: succeeded() # Publish an artifact that the RoslynInsertionTool is able to find by its name. - task: 1ES.PublishBuildArtifacts@1 displayName: 'Publish Artifact: VSSetup' inputs: PathtoPublish: 'artifacts\VSSetup\$(BuildConfiguration)' ArtifactName: VSSetup condition: succeeded() # Archive NuGet packages to DevOps. # Publish our NuPkgs as an artifact. The name of this artifact must be PackageArtifacts as the # arcade templates depend on the name. - task: 1ES.PublishBuildArtifacts@1 displayName: 'Publish Artifact: packages' inputs: PathtoPublish: 'artifacts\packages\$(BuildConfiguration)' ArtifactName: PackageArtifacts condition: succeeded() # Publish "IntelliSense" XSD files to their own artifact # so it can be consumed by the insertion-to-VS job - task: 1ES.PublishPipelineArtifact@1 displayName: 'Publish Artifact: xsd' inputs: path: 'artifacts\xsd' artifactName: xsd condition: succeeded() # Publish Asset Manifests for Build Asset Registry job - task: 1ES.PublishBuildArtifacts@1 displayName: Publish Asset Manifests inputs: PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(BuildConfiguration)/AssetManifest' ArtifactName: AssetManifests condition: succeeded() # Tag the build at the very end when we know it's been successful. - task: colinsalmcorner.colinsalmcorner-buildtasks.tag-build-task.tagBuildOrRelease@0 displayName: Tag build as ready for optimization training inputs: tags: 'ready-for-training' condition: succeeded() - task: ms-vseng.MicroBuildTasks.521a94ea-9e68-468a-8167-6dcf361ea776.MicroBuildCleanup@1 displayName: Execute cleanup tasks condition: succeededOrFailed() - template: /eng/common/templates-official/steps/component-governance.yml@self parameters: ${{ if or(startsWith(variables['Build.SourceBranch'], 'refs/heads/vs'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}: disableComponentGovernance: false ${{ else }}: disableComponentGovernance: true - template: /eng/common/templates-official/jobs/source-build.yml@self parameters: platforms: - name: Managed pool: name: AzurePipelines-EO image: 1ESPT-Ubuntu22.04 os: linux - template: /eng/common/templates-official/job/publish-build-assets.yml@self parameters: enablePublishBuildArtifacts: true publishUsingPipelines: true dependsOn: - Windows_NT - Source_Build_Managed pool: name: $(DncEngInternalBuildPool) image: $(WindowsImage) os: windows - template: eng\common\templates-official\post-build\post-build.yml@self parameters: publishingInfraVersion: 3 enableSymbolValidation: true enableSourceLinkValidation: false enableNugetValidation: false SDLValidationParameters: enable: true continueOnError: false params: ' -SourceToolsList @("policheck","credscan") -TsaInstanceURL "$(_TsaInstanceURL)" -TsaProjectName "$(_TsaProjectName)" -TsaNotificationEmail "$(_TsaNotificationEmail)" -TsaCodebaseAdmin "$(_TsaCodebaseAdmin)" -TsaBugAreaPath "$(_TsaBugAreaPath)" -TsaIterationPath "$(_TsaIterationPath)" -TsaRepositoryName "dotnet-msbuild" -TsaCodebaseName "dotnet-msbuild" -TsaPublish $True -CrScanAdditionalRunConfigParams @("SuppressionsPath < $(Build.SourcesDirectory)\eng\CredScanSuppressions.json") -PoliCheckAdditionalRunConfigParams @("UserExclusionPath < $(Build.SourcesDirectory)\eng\policheck_exclusions.xml")'