.vsts-ci.yml 11.2 KB
Newer Older
1
2
3
trigger:
  branches:
    include:
4
    - master
5
6
7
  tags:
    include:
    - v*
8
9
pr:
- master
10
variables:
11
  AZURE: 'true'
12
  PYTHON_VERSION: 3.9
13
  CONDA_ENV: test-env
14
15
16
17
resources:
  containers:
  - container: ubuntu1404
    image: lightgbm/vsts-agent:ubuntu-14.04
18
19
20
  - container: ubuntu-latest
    image: 'ubuntu:latest'
    options: "--name ci-container -v /usr/bin/docker:/tmp/docker:ro"
21
jobs:
Guolin Ke's avatar
Guolin Ke committed
22
###########################################
23
- job: Linux
Guolin Ke's avatar
Guolin Ke committed
24
###########################################
25
  variables:
26
    COMPILER: gcc
27
    SETUP_CONDA: 'false'
28
29
    OS_NAME: 'linux'
    PRODUCES_ARTIFACTS: 'true'
30
  pool: sh-ubuntu
31
  container: ubuntu1404
32
  strategy:
Guolin Ke's avatar
Guolin Ke committed
33
34
35
36
37
    matrix:
      regular:
        TASK: regular
      sdist:
        TASK: sdist
38
        PYTHON_VERSION: 3.7
Guolin Ke's avatar
Guolin Ke committed
39
40
      bdist:
        TASK: bdist
41
42
43
44
45
      inference:
        TASK: if-else
      mpi_source:
        TASK: mpi
        METHOD: source
46
        PYTHON_VERSION: 3.8
47
48
      gpu_source:
        TASK: gpu
Guolin Ke's avatar
Guolin Ke committed
49
        METHOD: source
50
51
      swig:
        TASK: swig
Guolin Ke's avatar
Guolin Ke committed
52
  steps:
53
  - script: |
54
      echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY"
55
      echo "##vso[task.setvariable variable=LGB_VER]$(head -n 1 VERSION.txt)"
Nikita Titov's avatar
Nikita Titov committed
56
57
      echo "##vso[task.prependpath]$CONDA/bin"
      AMDAPPSDK_PATH=$BUILD_SOURCESDIRECTORY/AMDAPPSDK
58
59
60
61
62
      echo "##vso[task.setvariable variable=AMDAPPSDK_PATH]$AMDAPPSDK_PATH"
      LD_LIBRARY_PATH=$AMDAPPSDK_PATH/lib/x86_64:$LD_LIBRARY_PATH
      echo "##vso[task.setvariable variable=LD_LIBRARY_PATH]$LD_LIBRARY_PATH"
      echo "##vso[task.setvariable variable=OPENCL_VENDOR_PATH]$AMDAPPSDK_PATH/etc/OpenCL/vendors"
    displayName: 'Set variables'
63
  - bash: $(Build.SourcesDirectory)/.ci/setup.sh
64
    displayName: Setup
65
  - bash: $(Build.SourcesDirectory)/.ci/test.sh
66
    displayName: Test
Nikita Titov's avatar
Nikita Titov committed
67
  - task: PublishBuildArtifacts@1
68
    condition: and(succeeded(), in(variables['TASK'], 'regular', 'sdist', 'bdist', 'swig'), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
Nikita Titov's avatar
Nikita Titov committed
69
70
71
72
    inputs:
      pathtoPublish: '$(Build.ArtifactStagingDirectory)'
      artifactName: PackageAssets
      artifactType: container
Guolin Ke's avatar
Guolin Ke committed
73
###########################################
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
- job: Linux_latest
###########################################
  variables:
    COMPILER: clang
    DEBIAN_FRONTEND: 'noninteractive'
    IN_UBUNTU_LATEST_CONTAINER: 'true'
    OS_NAME: 'linux'
    SETUP_CONDA: 'true'
  pool: sh-ubuntu
  container: ubuntu-latest
  strategy:
    matrix:
      regular:
        TASK: regular
        PYTHON_VERSION: 3.6
      sdist:
        TASK: sdist
      bdist:
        TASK: bdist
93
        PYTHON_VERSION: 3.8
94
95
96
97
98
99
100
101
      inference:
        TASK: if-else
      mpi_source:
        TASK: mpi
        METHOD: source
      mpi_pip:
        TASK: mpi
        METHOD: pip
102
        PYTHON_VERSION: 3.8
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
134
135
136
137
138
139
140
      mpi_wheel:
        TASK: mpi
        METHOD: wheel
        PYTHON_VERSION: 3.7
      gpu_source:
        TASK: gpu
        METHOD: source
      gpu_pip:
        TASK: gpu
        METHOD: pip
        PYTHON_VERSION: 3.6
      gpu_wheel:
        TASK: gpu
        METHOD: wheel
        PYTHON_VERSION: 3.7
  steps:
  - script: |
      echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY"
      echo "##vso[task.setvariable variable=LGB_VER]$(head -n 1 VERSION.txt)"
      CONDA=$HOME/miniconda
      echo "##vso[task.setvariable variable=CONDA]$CONDA"
      echo "##vso[task.prependpath]$CONDA/bin"
      AMDAPPSDK_PATH=$BUILD_SOURCESDIRECTORY/AMDAPPSDK
      echo "##vso[task.setvariable variable=AMDAPPSDK_PATH]$AMDAPPSDK_PATH"
      LD_LIBRARY_PATH=$AMDAPPSDK_PATH/lib/x86_64:$LD_LIBRARY_PATH
      echo "##vso[task.setvariable variable=LD_LIBRARY_PATH]$LD_LIBRARY_PATH"
      echo "##vso[task.setvariable variable=OPENCL_VENDOR_PATH]$AMDAPPSDK_PATH/etc/OpenCL/vendors"
    displayName: 'Set variables'
  # https://github.com/microsoft/azure-pipelines-agent/issues/2043#issuecomment-687983301
  - script: |
      /tmp/docker exec -t -u 0 ci-container \
      sh -c "apt-get update && apt-get -o Dpkg::Options::="--force-confold" -y install sudo"
    displayName: 'Install sudo'
  - bash: $(Build.SourcesDirectory)/.ci/setup.sh
    displayName: Setup
  - bash: $(Build.SourcesDirectory)/.ci/test.sh
    displayName: Test
###########################################
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
- job: QEMU_multiarch
###########################################
  variables:
    COMPILER: gcc
    OS_NAME: 'linux'
    PRODUCES_ARTIFACTS: 'true'
  pool:
    vmImage: ubuntu-latest
  timeoutInMinutes: 120
  strategy:
    matrix:
      bdist:
        TASK: bdist
        ARCH: aarch64
  steps:
  - script: |
      sudo apt-get update
      sudo apt-get install --no-install-recommends -y \
        binfmt-support \
        qemu \
        qemu-user \
        qemu-user-static
    displayName: 'Install QEMU'
  - script: |
      docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    displayName: 'Enable Docker multi-architecture support'
  - script: |
      export ROOT_DOCKER_FOLDER=/LightGBM
      cat > docker.env <<EOF
      AZURE=$AZURE
      OS_NAME=$OS_NAME
      COMPILER=$COMPILER
      TASK=$TASK
      METHOD=$METHOD
      CONDA_ENV=$CONDA_ENV
      PYTHON_VERSION=$PYTHON_VERSION
      BUILD_DIRECTORY=$ROOT_DOCKER_FOLDER
      LGB_VER=$(head -n 1 VERSION.txt)
      PRODUCES_ARTIFACTS=$PRODUCES_ARTIFACTS
      BUILD_ARTIFACTSTAGINGDIRECTORY=$BUILD_ARTIFACTSTAGINGDIRECTORY
      EOF
      cat > docker-script.sh <<EOF
      export CONDA=\$HOME/miniconda
      export PATH=\$CONDA/bin:\$PATH
      $ROOT_DOCKER_FOLDER/.ci/setup.sh || exit -1
      $ROOT_DOCKER_FOLDER/.ci/test.sh || exit -1
      EOF
      docker run \
        --rm \
        --env-file docker.env \
        -v "$(Build.SourcesDirectory)":"$ROOT_DOCKER_FOLDER" \
        -v "$(Build.ArtifactStagingDirectory)":"$(Build.ArtifactStagingDirectory)" \
        "quay.io/pypa/manylinux2014_$ARCH" \
        /bin/bash $ROOT_DOCKER_FOLDER/docker-script.sh
    displayName: 'Setup and run tests'
  - task: PublishBuildArtifacts@1
    condition: and(succeeded(), in(variables['TASK'], 'bdist'), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
    inputs:
      pathtoPublish: '$(Build.ArtifactStagingDirectory)'
      artifactName: PackageAssets
      artifactType: container
###########################################
203
- job: MacOS
Guolin Ke's avatar
Guolin Ke committed
204
###########################################
205
  variables:
206
    COMPILER: clang
207
208
    OS_NAME: 'macos'
    PRODUCES_ARTIFACTS: 'true'
209
  pool:
210
    vmImage: 'macOS-10.14'
211
  strategy:
Guolin Ke's avatar
Guolin Ke committed
212
213
214
    matrix:
      regular:
        TASK: regular
215
        PYTHON_VERSION: 3.7
Guolin Ke's avatar
Guolin Ke committed
216
217
      sdist:
        TASK: sdist
218
        PYTHON_VERSION: 3.8
Guolin Ke's avatar
Guolin Ke committed
219
220
      bdist:
        TASK: bdist
221
222
      swig:
        TASK: swig
Guolin Ke's avatar
Guolin Ke committed
223
  steps:
224
  - script: |
225
      echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY"
226
      echo "##vso[task.setvariable variable=LGB_VER]$(head -n 1 VERSION.txt)"
Nikita Titov's avatar
Nikita Titov committed
227
228
229
      CONDA=$AGENT_HOMEDIRECTORY/miniconda
      echo "##vso[task.setvariable variable=CONDA]$CONDA"
      echo "##vso[task.prependpath]$CONDA/bin"
230
      echo "##vso[task.setvariable variable=JAVA_HOME]$JAVA_HOME_8_X64"
231
    displayName: 'Set variables'
232
  - bash: $(Build.SourcesDirectory)/.ci/setup.sh
233
    displayName: Setup
234
  - bash: $(Build.SourcesDirectory)/.ci/test.sh
235
    displayName: Test
Guolin Ke's avatar
Guolin Ke committed
236
  - task: PublishBuildArtifacts@1
237
    condition: and(succeeded(), in(variables['TASK'], 'regular', 'bdist', 'swig'), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
Guolin Ke's avatar
Guolin Ke committed
238
    inputs:
239
      pathtoPublish: '$(Build.ArtifactStagingDirectory)'
Guolin Ke's avatar
Guolin Ke committed
240
241
242
      artifactName: PackageAssets
      artifactType: container
###########################################
243
- job: Windows
Guolin Ke's avatar
Guolin Ke committed
244
###########################################
245
246
247
  pool:
    vmImage: 'vs2017-win2016'
  strategy:
Guolin Ke's avatar
Guolin Ke committed
248
249
250
    matrix:
      regular:
        TASK: regular
251
        PYTHON_VERSION: 3.6
Guolin Ke's avatar
Guolin Ke committed
252
253
      sdist:
        TASK: sdist
254
        PYTHON_VERSION: 3.8
Guolin Ke's avatar
Guolin Ke committed
255
256
      bdist:
        TASK: bdist
257
258
      swig:
        TASK: swig
Guolin Ke's avatar
Guolin Ke committed
259
  steps:
260
261
262
  - powershell: |
      Write-Host "##vso[task.prependpath]$env:CONDA\Scripts"
    displayName: 'Set Variables'
263
264
  - script: |
      cmd /c "powershell -ExecutionPolicy Bypass -File %BUILD_SOURCESDIRECTORY%/.ci/install_opencl.ps1"
265
    condition: eq(variables['TASK'], 'bdist')
266
    displayName: 'Install OpenCL'
Nikita Titov's avatar
Nikita Titov committed
267
  - script: |
268
269
      cmd /c "conda init powershell"
      cmd /c "powershell -ExecutionPolicy Bypass -File %BUILD_SOURCESDIRECTORY%/.ci/test_windows.ps1"
270
    displayName: Test
Guolin Ke's avatar
Guolin Ke committed
271
  - task: PublishBuildArtifacts@1
272
    condition: and(succeeded(), in(variables['TASK'], 'regular', 'bdist', 'swig'), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
Guolin Ke's avatar
Guolin Ke committed
273
    inputs:
274
      pathtoPublish: '$(Build.ArtifactStagingDirectory)'
Guolin Ke's avatar
Guolin Ke committed
275
276
      artifactName: PackageAssets
      artifactType: container
Guolin Ke's avatar
Guolin Ke committed
277

278
###########################################
279
- job: Package
280
###########################################
Guolin Ke's avatar
Guolin Ke committed
281
282
  dependsOn:
  - Linux
283
  - Linux_latest
284
  - QEMU_multiarch
Guolin Ke's avatar
Guolin Ke committed
285
286
  - MacOS
  - Windows
287
  condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
288
  pool:
289
    vmImage: 'ubuntu-latest'
Guolin Ke's avatar
Guolin Ke committed
290
  steps:
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
  # Create archives with complete source code included (with git submodules)
  - task: ArchiveFiles@2
    displayName: Create zip archive
    condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
    inputs:
      rootFolderOrFile: $(Build.SourcesDirectory)
      includeRootFolder: false
      archiveType: zip
      archiveFile: '$(Build.ArtifactStagingDirectory)/archives/LightGBM-complete_source_code_zip.zip'
      replaceExistingArchive: true
  - task: ArchiveFiles@2
    displayName: Create tar.gz archive
    condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
    inputs:
      rootFolderOrFile: $(Build.SourcesDirectory)
      includeRootFolder: false
      archiveType: tar
      tarCompression: gz
      archiveFile: '$(Build.ArtifactStagingDirectory)/archives/LightGBM-complete_source_code_tar_gz.tar.gz'
      replaceExistingArchive: true
Guolin Ke's avatar
Guolin Ke committed
311
312
313
314
315
316
317
  # Download all agent packages from all previous phases
  - task: DownloadBuildArtifacts@0
    displayName: Download package assets
    inputs:
      artifactName: PackageAssets
      downloadPath: $(Build.SourcesDirectory)/binaries
  - script: |
318
      python "$(Build.SourcesDirectory)/.nuget/create_nuget.py" "$(Build.SourcesDirectory)/binaries/PackageAssets"
319
320
321
322
323
    displayName: 'Create NuGet configuration files'
  - task: NuGetCommand@2
    inputs:
      command: pack
      packagesToPack: '$(Build.SourcesDirectory)/.nuget/*.nuspec'
324
      packDestination: '$(Build.ArtifactStagingDirectory)/nuget'
Guolin Ke's avatar
Guolin Ke committed
325
326
  - task: PublishBuildArtifacts@1
    inputs:
327
      pathtoPublish: '$(Build.ArtifactStagingDirectory)/nuget'
328
      artifactName: NuGet
Guolin Ke's avatar
Guolin Ke committed
329
      artifactType: container
330
331
332
333
334
335
336
337
338
339
340
341
  - task: GitHubRelease@0
    displayName: 'Create GitHub Release'
    condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
    inputs:
      gitHubConnection: guolinke
      repositoryName: '$(Build.Repository.Name)'
      action: 'create'
      target: '$(Build.SourceVersion)'
      tagSource: 'auto'
      title: '$(Build.SourceBranchName)'
      assets: |
        $(Build.SourcesDirectory)/binaries/PackageAssets/*
342
343
        $(Build.ArtifactStagingDirectory)/nuget/*.nupkg
        $(Build.ArtifactStagingDirectory)/archives/*
344
345
346
      assetUploadMode: 'delete'
      isDraft: true
      isPreRelease: false
Guolin Ke's avatar
Guolin Ke committed
347
      addChangeLog: false