build.yml•4.08 kB
parameters:
# required matrix parameters
- name: UsePlatformContainer
type: boolean
- name: OSName
type: string
- name: Matrix
type: object
- name: DependsOn
type: string
- name: CloudConfig
type: object
- name: TestTimeoutInMinutes
type: number
jobs:
- job: Build_${{ parameters.OSName }}
displayName: "Build"
dependsOn:
- ${{ parameters.DependsOn }}
strategy:
matrix: $[ ${{ parameters.Matrix }} ]
pool:
name: $(Pool)
${{ if eq(parameters.OSName, 'macOS') }}:
vmImage: $(OSVmImage)
${{ else }}:
image: $(OSVmImage)
os: ${{ parameters.OSName }}
steps:
- checkout: self
- task: UseDotNet@2
displayName: "Use .NET SDK from global.json"
retryCountOnTaskFailure: 3
inputs:
useGlobalJson: true
- task: UseDotNet@2
displayName: "Use .NET SDK 9.0.x"
retryCountOnTaskFailure: 3
inputs:
packageType: sdk
version: 9.0.x
- task: Powershell@2
displayName: "Build module"
condition: and(succeeded(), ne(variables['NoPackagesChanged'],'true'))
inputs:
pwsh: true
filePath: $(Build.SourcesDirectory)/eng/scripts/Build-Module.ps1
arguments: >
-OutputPath '$(Build.ArtifactStagingDirectory)'
-Version '$(Version)'
-OperatingSystem '${{ parameters.OSName }}'
-Architecture '$(Architecture)'
-SelfContained
- task: Powershell@2
displayName: "Run tests"
condition: and(succeeded(), eq(variables['RunTests'], 'true'))
timeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
inputs:
pwsh: true
filePath: $(Build.SourcesDirectory)/eng/scripts/Test-Code.ps1
arguments: >
-CollectCoverage:$${{ eq(parameters.OSName, 'linux') }}
-TestResultsPath '$(Build.ArtifactStagingDirectory)/testResults'
workingDirectory: $(Build.SourcesDirectory)
- task: PublishTestResults@2
displayName: "Publish Results"
condition: and(succeededOrFailed(), eq(variables['RunTests'], 'true'))
inputs:
testResultsFiles: "$(Build.ArtifactStagingDirectory)/testResults/*.trx"
testRunTitle: "unit-${{ parameters.OSName }}-$(Architecture)"
testResultsFormat: "VSTest"
mergeTestResults: true
- task: PublishCodeCoverageResults@2
displayName: "Publish Code Coverage Reports"
condition: and(succeededOrFailed(), eq(variables['RunTests'], 'true'), eq('${{ parameters.OSName }}', 'linux'))
inputs:
summaryFileLocation: $(CoverageFile)
- task: Powershell@2
displayName: "(Native AOT) Install Linux arm64 cross compile toolchain"
condition: and(succeeded(), eq('${{ parameters.OSName }}', 'linux'), eq(variables['Architecture'], 'arm64'))
inputs:
pwsh: true
filePath: $(Build.SourcesDirectory)/eng/scripts/Install-LinuxArm64CrossCompileToolchain.ps1
- task: Powershell@2
displayName: "(Native AOT) Build module"
condition: and(succeeded(), ne(variables['NoPackagesChanged'],'true'))
inputs:
pwsh: true
filePath: $(Build.SourcesDirectory)/eng/scripts/Build-Module.ps1
arguments: >
-OutputPath '$(Agent.TempDirectory)/native-build'
-Version '$(Version)'
-OperatingSystem '${{ parameters.OSName }}'
-Architecture '$(Architecture)'
-CleanBuild
-BuildNative
# --- VS Code Extension Packaging Steps ---
- task: NodeTool@0
displayName: "Use Node.js 20.x"
inputs:
versionSpec: 20.x
- bash: |
npm install -g npm vsce
npm ci --no-optional
displayName: "Install npm dependencies and vsce"
workingDirectory: eng/vscode
- pwsh: ./ci-build.ps1
workingDirectory: eng/vscode
displayName: "Build VS Code Extension"
- task: ComponentGovernanceComponentDetection@0
displayName: "Component Governance Detection"
- template: /eng/common/pipelines/templates/steps/publish-1es-artifact.yml
parameters:
ArtifactPath: $(Build.ArtifactStagingDirectory)
ArtifactName: $(PipelineArtifactName)_$(System.JobName)
SbomEnabled: ${{ ne(variables['Build.Reason'], 'PullRequest') }}