matplotlib

Форк
0
/
azure-pipelines.yml 
279 строк · 10.3 Кб
1
# Python package
2
# Create and test a Python package on multiple Python versions.
3
# Add steps that analyze code, save the dist with the build record, publish to a PyPI-compatible index, and
4
# more:
5
# https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/python?view=azure-devops
6

7
---
8
trigger:
9
  branches:
10
    exclude:
11
      - v*-doc
12
pr:
13
  branches:
14
    exclude:
15
      - v*-doc
16
  paths:
17
    exclude:
18
      - doc/**/*
19
      - galleries/**/*
20

21
stages:
22

23
  - stage: Check
24
    jobs:
25
      - job: Skip
26
        pool:
27
          vmImage: 'ubuntu-latest'
28
        variables:
29
          DECODE_PERCENTS: 'false'
30
          RET: 'true'
31
        steps:
32
          - bash: |
33
              git_log=`git log --max-count=1 --skip=1 --pretty=format:"%B" | tr "\n" " "`
34
              echo "##vso[task.setvariable variable=log]$git_log"
35
          - bash: echo "##vso[task.setvariable variable=RET]false"
36
            condition: >-
37
              or(contains(variables.log, '[skip azp]'),
38
                 contains(variables.log, '[azp skip]'),
39
                 contains(variables.log, '[skip ci]'),
40
                 contains(variables.log, '[ci skip]'),
41
                 contains(variables.log, '[ci doc]'))
42
          - bash: echo "##vso[task.setvariable variable=start_main;isOutput=true]$RET"
43
            name: result
44

45
  - stage: Main
46
    condition: and(succeeded(), eq(dependencies.Check.outputs['Skip.result.start_main'], 'true'))
47
    dependsOn: Check
48
    jobs:
49
      - job: Pytest
50
        strategy:
51
          matrix:
52
            Linux_py310:
53
              vmImage: 'ubuntu-20.04'  # keep one job pinned to the oldest image
54
              python.version: '3.10'
55
            Linux_py311:
56
              vmImage: 'ubuntu-latest'
57
              python.version: '3.11'
58
            macOS_py310:
59
              vmImage: 'macOS-latest'
60
              python.version: '3.10'
61
            macOS_py311:
62
              vmImage: 'macOS-latest'
63
              python.version: '3.11'
64
            Windows_py310:
65
              vmImage: 'windows-2019'  # keep one job pinned to the oldest image
66
              python.version: '3.10'
67
            Windows_py311:
68
              vmImage: 'windows-latest'
69
              python.version: '3.11'
70
          maxParallel: 4
71
        pool:
72
          vmImage: '$(vmImage)'
73
        steps:
74
          - task: UsePythonVersion@0
75
            inputs:
76
              versionSpec: '$(python.version)'
77
              architecture: 'x64'
78
            displayName: 'Use Python $(python.version)'
79

80
          - bash: |
81
              set -e
82
              case "$AGENT_OS" in
83
              Linux)
84
                echo 'Acquire::Retries "3";' | sudo tee /etc/apt/apt.conf.d/80-retries
85
                sudo apt update
86
                sudo apt install --no-install-recommends \
87
                  cm-super \
88
                  dvipng \
89
                  ffmpeg \
90
                  fonts-freefont-otf \
91
                  fonts-noto-cjk \
92
                  fonts-wqy-zenhei \
93
                  gdb \
94
                  gir1.2-gtk-3.0 \
95
                  graphviz \
96
                  inkscape \
97
                  language-pack-de \
98
                  lcov \
99
                  libcairo2 \
100
                  libgirepository-1.0-1 \
101
                  lmodern \
102
                  ninja-build \
103
                  poppler-utils \
104
                  texlive-fonts-recommended \
105
                  texlive-latex-base \
106
                  texlive-latex-extra \
107
                  texlive-latex-recommended \
108
                  texlive-luatex \
109
                  texlive-pictures \
110
                  texlive-xetex
111
                ;;
112
              Darwin)
113
                brew update
114
                export HOMEBREW_NO_INSTALL_UPGRADE=1 HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
115
                brew install --cask xquartz
116
                brew install ccache ffmpeg imagemagick mplayer ninja pkg-config
117
                brew install --cask font-noto-sans-cjk-sc
118
                ;;
119
              Windows_NT)
120
                choco install ninja
121
                ;;
122
              *)
123
                exit 1
124
                ;;
125
              esac
126
            displayName: 'Install dependencies'
127

128
          - bash: |
129
              python -m pip install --upgrade pip
130
              python -m pip install --upgrade -r requirements/dev/build-requirements.txt
131
              python -m pip install -r requirements/testing/all.txt -r requirements/testing/extra.txt
132
            displayName: 'Install dependencies with pip'
133

134
          - bash: |
135
              case "$AGENT_OS" in
136
              Linux)
137
                export CPPFLAGS='--coverage -fprofile-abs-path'
138
                ;;
139
              Darwin)
140
                export CPPFLAGS='-fprofile-instr-generate=default.%m.profraw'
141
                export CPPFLAGS="$CPPFLAGS -fcoverage-mapping"
142
                ;;
143
              Windows_NT)
144
                CONFIG='--config-settings=setup-args=--vsenv'
145
                CONFIG="$CONFIG --config-settings=setup-args=-Dcpp_link_args=-PROFILE"
146
                CONFIG="$CONFIG --config-settings=setup-args=-Dbuildtype=debug"
147
                ;;
148
              *)
149
                exit 1
150
                ;;
151
              esac
152

153
              python -m pip install \
154
                --no-build-isolation $CONFIG \
155
                --verbose --editable .[dev]
156
            displayName: "Install self"
157

158
          - script: env
159
            displayName: 'print env'
160

161
          - script: pip list
162
            displayName: 'print pip'
163

164
          - bash: |
165
              set -e
166
              if [[ "$AGENT_OS" == 'Windows_NT' ]]; then
167
                SESSION_ID=$(python -c "import uuid; print(uuid.uuid4(), end='')")
168
                echo "Coverage session ID: ${SESSION_ID}"
169
                VS=$(ls -d /c/Program\ Files*/Microsoft\ Visual\ Studio/*/Enterprise)
170
                echo "Visual Studio: ${VS}"
171
                DIR="$VS/Common7/IDE/Extensions/Microsoft/CodeCoverage.Console"
172
                if [[ -d $DIR ]]; then
173
                  # This is for MSVC 2022 (on windows-latest).
174
                  TOOL="$DIR/Microsoft.CodeCoverage.Console.exe"
175
                  for f in build/cp*/src/*.pyd; do
176
                    echo $f
177
                    echo "=============================="
178
                    "$TOOL" instrument $f --session-id $SESSION_ID \
179
                      --log-level Verbose --log-file instrument.log
180
                    cat instrument.log
181
                    rm instrument.log
182
                  done
183
                  echo "Starting $TOOL in server mode"
184
                  "$TOOL" collect \
185
                      --session-id $SESSION_ID --server-mode \
186
                      --output-format cobertura --output extensions.xml \
187
                      --log-level Verbose --log-file extensions.log &
188
                  VS_VER=2022
189
                else
190
                DIR="$VS"/Team\ Tools/Dynamic\ Code\ Coverage\ Tools/amd64
191
                if [[ -d $DIR ]]; then
192
                  # This is for MSVC 2019 (on windows-2019).
193
                  VSINSTR="$VS"/Team\ Tools/Performance\ Tools/vsinstr.exe
194
                  for f in build/cp*/src/*.pyd; do
195
                    "$VSINSTR" $f -Verbose -Coverage
196
                  done
197
                  TOOL="$DIR/CodeCoverage.exe"
198
                  cat > extensions.config << EOF
199
              <CodeCoverage>
200
                <CollectFromChildProcesses>true</CollectFromChildProcesses>
201
                <ModulePaths>
202
                  <Include>
203
                    <ModulePath>.*\\.*\.pyd</ModulePath>
204
                  </Include>
205
                </ModulePaths>
206
              </CodeCoverage>
207
              EOF
208
                  echo "Starting $TOOL in server mode"
209
                  "$TOOL" collect \
210
                    -config:extensions.config -session:$SESSION_ID \
211
                    -output:extensions.coverage -verbose &
212
                  echo "Started $TOOL"
213
                  VS_VER=2019
214
                fi
215
                fi
216
                echo "##vso[task.setvariable variable=VS_COVERAGE_TOOL]$TOOL"
217
              fi
218
              PYTHONFAULTHANDLER=1 pytest -rfEsXR -n 2 \
219
                  --maxfail=50 --timeout=300 --durations=25 \
220
                  --junitxml=junit/test-results.xml --cov-report=xml --cov=lib
221
              if [[ -n $SESSION_ID ]]; then
222
                if [[ $VS_VER == 2022 ]]; then
223
                  "$TOOL" shutdown $SESSION_ID
224
                  echo "Coverage collection log"
225
                  echo "======================="
226
                  cat extensions.log
227
                else
228
                  "$TOOL" shutdown -session:$SESSION_ID
229
                fi
230
              fi
231
            displayName: 'pytest'
232

233
          - bash: |
234
              case "$AGENT_OS" in
235
              Linux)
236
                lcov --rc lcov_branch_coverage=1 --capture --directory . \
237
                  --output-file coverage.info
238
                lcov --rc lcov_branch_coverage=1 --output-file coverage.info \
239
                  --extract coverage.info $PWD/src/'*' $PWD/lib/'*'
240
                lcov --rc lcov_branch_coverage=1 --list coverage.info
241
                find . -name '*.gc*' -delete
242
                ;;
243
              Darwin)
244
                xcrun llvm-profdata merge -sparse default.*.profraw \
245
                  -o default.profdata
246
                xcrun llvm-cov export -format="lcov" build/*/src/*.so \
247
                  -instr-profile default.profdata > info.lcov
248
                ;;
249
              Windows_NT)
250
                if [[ -f extensions.coverage ]]; then
251
                  # For MSVC 2019.
252
                  "$VS_COVERAGE_TOOL" analyze -output:extensions.xml \
253
                    -include_skipped_functions -include_skipped_modules \
254
                    extensions.coverage
255
                  rm extensions.coverage
256
                fi
257
                ;;
258
              *)
259
                exit 1
260
                ;;
261
              esac
262
            displayName: 'Filter C coverage'
263
            condition: succeededOrFailed()
264
          - bash: |
265
              bash <(curl -s https://codecov.io/bash) \
266
                -n "$PYTHON_VERSION $AGENT_OS" \
267
                -f 'coverage.xml' -f 'extensions.xml'
268
            displayName: 'Upload to codecov.io'
269
            condition: succeededOrFailed()
270

271
          - task: PublishTestResults@2
272
            inputs:
273
              testResultsFiles: '**/test-results.xml'
274
              testRunTitle: 'Python $(python.version)'
275
            condition: succeededOrFailed()
276

277
          - publish: $(System.DefaultWorkingDirectory)/result_images
278
            artifact: $(Agent.JobName)-result_images
279
            condition: failed()
280

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.