# # See https://docs.microsoft.com/azure/devops/pipelines/yaml-schema for reference. # variables: - name: Build.Repository.Clean value: true - name: _TeamName value: AspNetCore - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE value: true - name: _PublishUsingPipelines value: true - name: _DotNetArtifactsCategory value: .NETCORE - name: _DotNetValidationArtifactsCategory value: .NETCOREVALIDATION - ${{ if ne(variables['System.TeamProject'], 'public') }}: - group: DotNet-MSRC-Storage - name: _InternalRuntimeDownloadArgs value: /p:DotNetRuntimeSourceFeed=https://dotnetclimsrc.blob.core.windows.net/dotnet /p:DotNetRuntimeSourceFeedKey=$(dotnetclimsrc-read-sas-token-base64) - ${{ if eq(variables['System.TeamProject'], 'public') }}: - name: _InternalRuntimeDownloadArgs value: '' trigger: batch: true branches: include: - main - main-vs-deps - release/* - internal/release/3.* pr: autoCancel: true branches: include: - '*' stages: - stage: build displayName: Build jobs: - ${{ if and(and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}: - template: /eng/common/templates/job/onelocbuild.yml parameters: LclSource: lclFilesfromPackage LclPackageId: 'LCL-JUNO-PROD-RAZORTOOL' MirrorRepo: razor-tooling - template: /eng/common/templates/jobs/jobs.yml parameters: enablePublishBuildArtifacts: false enablePublishTestResults: false enablePublishUsingPipelines: false jobs: # Code check - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: - job: Code_check displayName: Code check pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: NetCore1ESPool-Public demands: ImageOverride -equals Build.Windows.Amd64.VS2022.Pre.Open ${{ if ne(variables['System.TeamProject'], 'public') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals Build.Windows.Amd64.VS2022.Pre steps: - task: NodeTool@0 displayName: Install Node 10.x inputs: versionSpec: 10.x - task: NuGetCommand@2 displayName: 'Clear NuGet caches' condition: succeeded() inputs: command: custom arguments: 'locals all -clear' - ${{ if ne(variables['System.TeamProject'], 'public') }}: - task: PowerShell@2 displayName: Setup Private Feeds Credentials inputs: filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token env: Token: $(dn-bot-dnceng-artifact-feeds-rw) - powershell: ./restore.cmd -msbuildEngine dotnet -ci $(_InternalRuntimeDownloadArgs); ./eng/scripts/CodeCheck.ps1 -ci displayName: Run eng/scripts/CodeCheck.ps1 # Three jobs for each of the three OSes we want to run on - template: /eng/common/templates/jobs/jobs.yml parameters: enablePublishBuildArtifacts: true enablePublishTestResults: true enableTelemetry: true helixRepo: dotnet/razor-tooling helixType: build.product/ # enableMicrobuild can't be read from a user-defined variable (Azure DevOps limitation) ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: enableMicrobuild: true enablePublishBuildAssets: true enablePublishUsingPipelines: ${{ variables._PublishUsingPipelines }} jobs: - job: Windows pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: NetCore1ESPool-Public demands: ImageOverride -equals build.windows.10.amd64.vs2019.pre.open ${{ if ne(variables['System.TeamProject'], 'public') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals build.windows.10.amd64.vs2019.pre strategy: matrix: ${{ if eq(variables['System.TeamProject'], 'public') }}: debug: _BuildConfig: Debug _PublishArgs: '' release: _BuildConfig: Release _PublishArgs: '' ${{ if ne(variables['System.TeamProject'], 'public') }}: release: _BuildConfig: Release ${{ if in(variables['Build.Reason'], 'PullRequest') }}: _PublishArgs: '' ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: _DotNetPublishToBlobFeed: true _PublishArgs: /p:PublishToSymbolServer=true /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PublishToAzure=true /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory) /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) /p:DotNetPublishBlobFeedUrl=$(_PublishBlobFeedUrl) /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) variables: - _DotNetPublishToBlobFeed : false - _PublishBlobFeedUrl: https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore-tooling/index.json - _BuildArgs: '' # Variables for internal Official builds - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - _SignType: real - _BuildArgs: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) /p:OfficialBuildId=$(Build.BuildNumber) /p:ManifestBuildBranch=$(Build.SourceBranchName) /p:ManifestBuildNumber=$(Build.BuildNumber) /p:VisualStudioDropName=Products/dotnet/razor-tooling/$(Build.SourceBranchName)/$(Build.BuildNumber) - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - group: DotNet-Blob-Feed - group: DotNet-Symbol-Server-Pats steps: - task: NodeTool@0 displayName: Install Node 10.x inputs: versionSpec: 10.x - powershell: npm install -g yarn displayName: Install yarn condition: succeeded() - task: NuGetCommand@2 displayName: 'Clear NuGet caches' condition: succeeded() inputs: command: custom arguments: 'locals all -clear' - powershell: ./eng/scripts/InstallProcDump.ps1 displayName: Install ProcDump - powershell: ./eng/scripts/StartDumpCollectionForHangingBuilds.ps1 $(ProcDumpPath)procdump.exe artifacts/log/$(_BuildConfig) (Get-Date).AddMinutes(25) dotnet, msbuild displayName: Start background dump collection - ${{ if ne(variables['System.TeamProject'], 'public') }}: - task: PowerShell@2 displayName: Setup Private Feeds Credentials inputs: filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token env: Token: $(dn-bot-dnceng-artifact-feeds-rw) - script: eng\common\cibuild.cmd -configuration $(_BuildConfig) -msbuildEngine dotnet -prepareMachine $(_BuildArgs) $(_PublishArgs) $(_InternalRuntimeDownloadArgs) name: Build displayName: Build condition: succeeded() - script: eng\common\cibuild.cmd -configuration $(_BuildConfig) -prepareMachine /p:BuildVsix=true /p:BuildProjectReferences=false $(_BuildArgs) $(_PublishArgs) $(_InternalRuntimeDownloadArgs) name: Build_Vsix displayName: Build Vsix condition: succeeded() # Run VSCode functional tests # - powershell: | # . ../../../../activate.ps1 # yarn test -- --ci --configuration $(_BuildConfig) --no-restore # deactivate # workingDirectory: $(Build.SourcesDirectory)/src/Razor/test/VSCode.FunctionalTest # displayName: Run VSCode Tests # condition: and(succeeded(), ne(variables['_BuildConfig'], 'Release')) # Temporary: Don't run on Release - powershell: ./eng/scripts/FinishDumpCollectionForHangingBuilds.ps1 artifacts/log/$(_BuildConfig) displayName: Finish background dump collection continueOnError: true condition: always() - powershell: | $version = $(node -p "require('./package.json').version" | Out-String).Trim() yarn node ./scripts/retrieveDebugProxy.js md $(Build.SourcesDirectory)/artifacts/packages/VSCode/$(_BuildConfig)/ -ea 0 npx vsce@1.100.2 package -o $(Build.SourcesDirectory)/artifacts/packages/VSCode/$(_BuildConfig)/blazorwasm-companion-$version.vsix displayName: Produce Blazor WASM Debugging Extension VSIX workingDirectory: $(Build.SourcesDirectory)/src/Razor/src/Microsoft.AspNetCore.Razor.VSCode.BlazorWasmDebuggingExtension condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release')) - task: PublishBuildArtifacts@1 displayName: Upload Test Results condition: always() continueOnError: true inputs: pathtoPublish: artifacts/TestResults/$(_BuildConfig)/ artifactName: $(Agent.Os)_$(Agent.JobName) TestResults artifactType: Container parallel: true # - task: PublishTestResults@2 # displayName: Publish VSCode Test Results # inputs: # testResultsFormat: 'JUnit' # testResultsFiles: '*.xml' # searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' # continueOnError: true # condition: always() - task: PublishBuildArtifacts@1 displayName: Publish VSIX Artifacts inputs: PathtoPublish: '$(Build.SourcesDirectory)/artifacts/VSSetup/$(_BuildConfig)' PublishLocation: Container ArtifactName: VSIX_$(Agent.Os)_$(_BuildConfig) continueOnError: true condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release')) - task: PublishBuildArtifacts@1 displayName: Publish VS for Mac Artifacts inputs: PathtoPublish: '$(Build.SourcesDirectory)/artifacts/MPack/$(_BuildConfig)' PublishLocation: Container ArtifactName: MPack_$(Agent.Os)_$(_BuildConfig) continueOnError: true condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release')) - task: PublishBuildArtifacts@1 displayName: Publish package artifacts inputs: PathtoPublish: $(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig) PublishLocation: Container ArtifactName: Packages_$(Agent.Os)_$(_BuildConfig) continueOnError: true condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release')) - task: PublishBuildArtifacts@1 displayName: Publish VS Code extension artifacts inputs: PathtoPublish: $(Build.SourcesDirectory)/artifacts/packages/VSCode/$(_BuildConfig) PublishLocation: Container ArtifactName: BlazorWasmDebuggingExtension continueOnError: true condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release')) - job: macOS pool: vmImage: macOS-11 strategy: matrix: debug: _BuildConfig: Debug release: _BuildConfig: Release steps: - task: NodeTool@0 displayName: Install Node 10.x inputs: versionSpec: 10.x - ${{ if ne(variables['System.TeamProject'], 'public') }}: - task: Bash@3 displayName: Setup Private Feeds Credentials inputs: filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh arguments: $(Build.SourcesDirectory)/NuGet.config $Token env: Token: $(dn-bot-dnceng-artifact-feeds-rw) - script: eng/common/cibuild.sh --configuration $(_BuildConfig) --prepareMachine $(_InternalRuntimeDownloadArgs) name: Build displayName: Build condition: succeeded() - task: PublishBuildArtifacts@1 displayName: Upload TestResults condition: always() continueOnError: true inputs: pathtoPublish: artifacts/TestResults/$(_BuildConfig)/ artifactName: $(Agent.Os)_$(Agent.JobName) TestResults artifactType: Container parallel: true - job: Linux container: image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-14.04-cross-0cd4667-20170319080304 options: --init # This ensures all the stray defunct processes are reaped. pool: vmImage: ubuntu-18.04 variables: - LC_ALL: 'en_US.UTF-8' - LANG: 'en_US.UTF-8' - LANGUAGE: 'en_US.UTF-8' strategy: matrix: debug: _BuildConfig: Debug release: _BuildConfig: Release steps: - task: NodeTool@0 displayName: Install Node 10.x inputs: versionSpec: 10.x - ${{ if ne(variables['System.TeamProject'], 'public') }}: - task: Bash@3 displayName: Setup Private Feeds Credentials inputs: filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh arguments: $(Build.SourcesDirectory)/NuGet.config $Token env: Token: $(dn-bot-dnceng-artifact-feeds-rw) - script: eng/common/cibuild.sh --configuration $(_BuildConfig) --prepareMachine $(_InternalRuntimeDownloadArgs) name: Build displayName: Build condition: succeeded() - task: PublishBuildArtifacts@1 displayName: Upload Test Results condition: always() continueOnError: true inputs: pathtoPublish: artifacts/TestResults/$(_BuildConfig)/ artifactName: $(Agent.Os)_$(Agent.JobName) TestResults artifactType: Container parallel: true - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: eng\common\templates\post-build\post-build.yml parameters: publishingInfraVersion: 3 enableSigningValidation: false enableNugetValidation: false