aboutsummaryrefslogtreecommitdiff
path: root/scripts/azure-pipelines/windows/azure-pipelines.yml
blob: 60ba6fa1b80a14442dbb81cf1bccfd3ce1d20d29 (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
#

jobs:
- job: ${{ parameters.jobName }}
  pool:
    name: ${{ parameters.poolName }}
  workspace:
    clean: resources
  timeoutInMinutes: 1440 # 1 day
  variables:
  - name: WORKING_ROOT
    value: D:\
  - name: VCPKG_DOWNLOADS
    value: D:\downloads
  - name: DiffFile
    value: $(Build.ArtifactStagingDirectory)\format.diff
  - name: ExtraChecksTriplet
    value: x86-windows
  - group: vcpkg-asset-caching-credentials
  - name: X_VCPKG_ASSET_SOURCES
    value: "x-azurl,$(root-url),$(sas),readwrite"
  - group: vcpkg-binary-caching-credentials
  - name: X_VCPKG_BINARY_SOURCE_STUB
    value: "x-azblob,$(root-bin-url),$(sas-bin)"

  steps:
  - task: PowerShell@2
    displayName: 'Report on Disk Space'
    condition: always()
    inputs:
      filePath: 'scripts/azure-pipelines/windows/disk-space.ps1'
      pwsh: true
  - script: .\bootstrap-vcpkg.bat
    displayName: 'Bootstrap vcpkg'
  - script: |
      if exist ${{ variables.VCPKG_DOWNLOADS }} rmdir /S /Q ${{ variables.VCPKG_DOWNLOADS }} 2>&1
    displayName: 'Clean downloads'
  # Note that we run docs checks before PR checks because they are likely to invalidate a whole run anyway
  - task: Powershell@2
    displayName: 'Generate Documentation'
    condition: eq('${{ parameters.triplet }}', '${{ variables.ExtraChecksTriplet }}')
    inputs:
      filePath: 'docs/regenerate.ps1'
      arguments: '-VcpkgRoot . -WarningAction Stop'
      pwsh: true
  - script: '.\vcpkg.exe format-manifest --all'
    displayName: 'Format Manifests'
    condition: eq('${{ parameters.triplet }}', '${{ variables.ExtraChecksTriplet }}')
  - task: Powershell@2
    displayName: 'Create Diff'
    condition: eq('${{ parameters.triplet }}', '${{ variables.ExtraChecksTriplet }}')
    inputs:
      filePath: scripts/azure-pipelines/Create-PRDiff.ps1
      arguments: "-DiffFile '$(DiffFile)'"
      pwsh: true
  - task: PublishBuildArtifacts@1
    displayName: 'Publish Format and Documentation Diff'
    condition: and(eq('${{ parameters.triplet }}', '${{ variables.ExtraChecksTriplet }}'), failed())
    inputs:
      PathtoPublish: '$(DiffFile)'
      ArtifactName: 'format.diff'
  - task: PowerShell@2
    displayName: '*** Test Modified Ports and Prepare Test Logs ***'
    inputs:
      failOnStderr: true
      filePath: 'scripts/azure-pipelines/test-modified-ports.ps1'
      arguments: '-Triplet ${{ parameters.triplet }} -BuildReason $(Build.Reason) -BinarySourceStub "$(X_VCPKG_BINARY_SOURCE_STUB)" -WorkingRoot ${{ variables.WORKING_ROOT }} -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory)'
      pwsh: true
  - task: PowerShell@2
    displayName: 'Validate version files'
    condition: eq('${{ parameters.triplet }}', '${{ variables.ExtraChecksTriplet }}')
    inputs:
      targetType: inline
      script: |
        ./vcpkg.exe --feature-flags=versions x-ci-verify-versions --verbose |
        ForEach-Object -Begin {
          $long_error = ''
        } -Process {
          if ($long_error -ne '' -and $_ -match '^$|^       ') {
             # Extend multi-line message
             $long_error = -join($long_error, "%0D%0A", $_ -replace '^       ','' `
               -replace '(git add) [^ ]*\\ports\\([^ ]*)', '$1 ports/$2' )
          } else {
            if ($long_error -ne '') {
              # Flush multi-line message
              $long_error
              $long_error = ''
            }
            if ($_ -match '^Error: ') {
              # Start multi-line message
              $long_error = $_ -replace '^Error: ', '##vso[task.logissue type=error]' `
                -replace '(^##vso[^\]]*)](.*) [^ ]*\\versions\\(.-)\\(.*.json)(.*)', '$1;sourcepath=versions/$3/$4;linenumber=2]$2 version/$3/$4$5'
            } else {
              # Normal line
              $_
            }
          }
        } -End {
          if ($long_error -ne '') {
            # Flush multi-line message
            $long_error
          }
        }
      pwsh: true
  - task: PowerShell@2
    displayName: 'Report on Disk Space After Build'
    condition: always()
    inputs:
      filePath: 'scripts/azure-pipelines/windows/disk-space.ps1'
      pwsh: true
  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: failure logs for ${{ parameters.triplet }}'
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\failure-logs'
      ArtifactName: 'failure logs for ${{ parameters.triplet }}'
    condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True')
  - task: PowerShell@2
    displayName: 'Build a file list for all packages'
    condition: always()
    inputs:
      targetType: inline
      script: |
        ./vcpkg.exe fetch python3
        & $(.\vcpkg fetch python3) .\scripts\file_script.py D:\installed\vcpkg\info\
      pwsh: true
  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: file lists for ${{ parameters.triplet }}'
    condition: always()
    inputs:
      PathtoPublish: scripts/list_files
      ArtifactName: 'file lists for ${{ parameters.triplet }}'