aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/scripts/azure-pipelines/windows/azure-pipelines.yml
blob: 0efe34df8484f756ca06ffb24b60b1e0e300d782 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
#

parameters:
  - name: vcpkgToolSha
    displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap'
    type: string
    default: 'use default'
  - name: jobName
    type: string
    default: 'x86_windows'
  - name: tripletPattern
    displayName: 'Enable the triplets which contain this substring'
    type: string
    default: ''

jobs:
- job: ${{ parameters.jobName }}
  condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}'))
  pool:
    name: PrWin-WUS
    demands: ImageVersionOverride -equals 2025.10.17
  timeoutInMinutes: 2880 # 2 days
  variables:
  - name: WORKING_ROOT
    value: D:\
  - name: VCPKG_DOWNLOADS
    value: D:\downloads
  - name: DiffFile
    value: $(Build.ArtifactStagingDirectory)\format.diff
  - name: ExtraChecksTriplet
    value: x86-windows
  steps:
  - script: .\bootstrap-vcpkg.bat
    displayName: 'Bootstrap vcpkg'
    condition: eq('use default', '${{ parameters.vcpkgToolSha }}')
  - script: .\scripts\azure-pipelines\windows\bootstrap-from-source.cmd ${{ parameters.vcpkgToolSha }}
    displayName: "Build vcpkg with CMake"
    condition: ne('use default', '${{ parameters.vcpkgToolSha }}')
  - script: |
      .\vcpkg.exe format-manifest --all
      .\vcpkg.exe format-feature-baseline scripts\ci.baseline.txt
      .\vcpkg.exe format-feature-baseline scripts\ci.feature.baseline.txt
    displayName: 'Format Manifests and Baselines'
    condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}')
  - task: PowerShell@2
    displayName: 'Create Diff'
    condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}')
    inputs:
      filePath: scripts/azure-pipelines/Create-PRDiff.ps1
      arguments: "-DiffFile '$(DiffFile)'"
      pwsh: true
  - task: PublishPipelineArtifact@1
    displayName: 'Publish Format and Documentation Diff'
    condition: and(eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}'), failed())
    inputs:
      targetPath: '$(DiffFile)'
      artifact: 'format.diff'
  - task: AzureCLI@2
    displayName: '*** Test Modified Ports'
    inputs:
      azureSubscription: 'vcpkg-pr-fleet-wus'
      scriptType: 'pscore'
      scriptLocation: 'inlineScript'
      inlineScript: |
          $current = Get-Date -AsUtc
          $endDate = $current.AddDays(2)
          $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ'
          $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String
          $assetSas = $assetSas.Trim()
          $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String
          $binarySas = $binarySas.Trim()
          # Persist the binary SAS as a secret pipeline variable for the owners-db step
          Write-Host "##vso[task.setvariable variable=BCACHE_SAS_TOKEN;issecret=true]$binarySas"
          $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite"
          & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azcopy-sas,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory)
  - task: PowerShell@2
    displayName: 'Validate version files'
    condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}')
    inputs:
      filePath: 'scripts/azure-pipelines/windows/validate-version-files.ps1'
      pwsh: true
  - task: PublishPipelineArtifact@1
    displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}"
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\failure-logs'
      artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}"
    condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True')
  - task: PublishPipelineArtifact@1
    displayName: "Publish Artifact: azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}"
    inputs:
      targetPath: '$(WORKING_ROOT)/azcopy-logs'
      artifactName: "z azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}"
    condition: ne(variables['AZCOPY_LOGS_EMPTY'], 'True')
  - task: UseNode@1
    displayName: 'Ensure Node.js is available'
    condition: always()
    inputs:
      version: '22.x'
  - task: PowerShell@2
    displayName: 'Build a file list for all packages'
    condition: always()
    inputs:
      targetType: inline
      script: |
        cd scripts/azure-pipelines/owners-db
        npm ci -s
        if ($env:BUILD_REASON -eq 'PullRequest') {
          Write-Host 'Running file_script_from_cache for PR'
          $blob = "https://vcpkgbinarycachewus.blob.core.windows.net/cache?$env:BCACHE_SAS_TOKEN"
          npx --yes ts-node ./file_script_from_cache.ts --pr-hashes "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/pr-hashes.json" --blob-base-url "$blob" --target-branch "origin/master" --out-dir ../../list_files
        } else {
          Write-Host 'Running file_script for CI'
          npx --yes ts-node ./file_script.ts --info-dir D:\installed\vcpkg\info\ --out-dir ../../list_files
        }
      pwsh: true
    env:
      BCACHE_SAS_TOKEN: $(BCACHE_SAS_TOKEN)
  - task: PublishPipelineArtifact@1
    displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}"
    condition: always()
    inputs:
      targetPath: scripts/list_files
      artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}"
  - task: PublishTestResults@2
    displayName: 'Publish Test Results'
    condition: ne(variables['XML_RESULTS_FILE'], '')
    inputs:
      testRunTitle: ${{ replace(parameters.jobName, '_', '-') }}
      testResultsFormat: xUnit
      testResultsFiles: $(XML_RESULTS_FILE)
      platform: ${{ replace(parameters.jobName, '_', '-') }}