xref: /curl/.azure-pipelines.yml (revision d18811b5)
1#***************************************************************************
2#                                  _   _ ____  _
3#  Project                     ___| | | |  _ \| |
4#                             / __| | | | |_) | |
5#                            | (__| |_| |  _ <| |___
6#                             \___|\___/|_| \_\_____|
7#
8# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
9#
10# This software is licensed as described in the file COPYING, which
11# you should have received as part of this distribution. The terms
12# are also available at https://curl.se/docs/copyright.html.
13#
14# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15# copies of the Software, and permit persons to whom the Software is
16# furnished to do so, under the terms of the COPYING file.
17#
18# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19# KIND, either express or implied.
20#
21# SPDX-License-Identifier: curl
22#
23###########################################################################
24# https://dev.azure.com/daniel0244/curl/_build?view=runs
25#
26# Azure Pipelines configuration:
27# https://aka.ms/yaml
28
29trigger:
30  branches:
31    include:
32      - 'master'
33      - '*/ci'
34  paths:
35    exclude:
36      - '.circleci/*'
37      - '.cirrus.yml'
38      - '.github/*'
39      - '.github/workflows/*'
40      - 'appveyor.*'
41      - 'packages/*'
42      - 'plan9/*'
43
44pr:
45  branches:
46    include:
47      - 'master'
48  paths:
49    exclude:
50      - '.circleci/*'
51      - '.cirrus.yml'
52      - '.github/*'
53      - '.github/workflows/*'
54      - 'appveyor.*'
55      - 'packages/*'
56      - 'plan9/*'
57
58variables:
59  MAKEFLAGS: '-j 2'
60
61stages:
62
63  ##########################################
64  ### Linux jobs first
65  ##########################################
66
67  - stage: linux
68    dependsOn: []
69    jobs:
70      - job: ubuntu
71        # define defaults to make sure variables are always expanded/replaced
72        variables:
73          install: ''
74          configure: ''
75          tests: '!433'
76        timeoutInMinutes: 60
77        pool:
78          vmImage: 'ubuntu-latest'
79        strategy:
80          matrix:
81            default:
82              name: default
83              install:
84              configure: --enable-debug --with-openssl
85            disable_ipv6:
86              name: w/o IPv6
87              configure: --disable-ipv6 --with-openssl
88            disable_http_smtp_imap:
89              name: w/o HTTP/SMTP/IMAP
90              configure: --disable-http --disable-smtp --disable-imap --without-ssl
91            disable_thredres:
92              name: sync resolver
93              configure: --disable-threaded-resolver --with-openssl
94            https_only:
95              name: HTTPS only
96              configure: --disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap --disable-ldap --disable-pop3 --disable-rtmp --disable-rtsp --disable-scp --disable-sftp --disable-smb --disable-smtp --disable-telnet --disable-tftp --with-openssl
97            torture:
98              name: torture
99              install: libnghttp2-dev
100              configure: --enable-debug --disable-shared --disable-threaded-resolver --with-openssl
101              tests: -n -t --shallow=25 !FTP
102        steps:
103          - script: sudo apt-get update && sudo apt-get install -y stunnel4 python3-impacket libzstd-dev libbrotli-dev libpsl-dev $(install)
104            displayName: 'apt install'
105            retryCountOnTaskFailure: 3
106
107          - script: autoreconf -fi && ./configure --enable-warnings --enable-werror $(configure)
108            displayName: 'configure $(name)'
109
110          - script: make V=1 && make V=1 examples && cd tests && make V=1
111            displayName: 'compile'
112
113          - script: make V=1 test-ci
114            displayName: 'test'
115            env:
116              AZURE_ACCESS_TOKEN: "$(System.AccessToken)"
117              TFLAGS: "-ac /usr/bin/curl -r $(tests)"
118
119  - stage: scanbuild
120    dependsOn: []
121    jobs:
122      - job: ubuntu
123        timeoutInMinutes: 30
124        pool:
125          vmImage: 'ubuntu-latest'
126        steps:
127          - script: sudo apt-get update && sudo apt-get install -y clang-tools clang libssl-dev libssh2-1-dev libpsl-dev libbrotli-dev libzstd-dev
128            displayName: 'apt install'
129            retryCountOnTaskFailure: 3
130
131          - script: autoreconf -fi
132            displayName: 'autoreconf'
133
134          - script: scan-build ./configure --enable-debug --enable-werror --with-openssl --with-libssh2
135            displayName: 'configure'
136            env:
137              CC: "clang"
138              CCX: "clang++"
139
140          - script: scan-build --status-bugs make
141            displayName: 'make'
142
143          - script: scan-build --status-bugs make examples
144            displayName: 'make examples'
145
146  ##########################################
147  ### Windows jobs below
148  ##########################################
149
150  - stage: windows
151    dependsOn: []
152    variables:
153      agent.preferPowerShellOnContainers: true
154    jobs:
155      - job: msys2
156        # define defaults to make sure variables are always expanded/replaced
157        variables:
158          container_img: ''
159          container_cmd: ''
160          configure: ''
161          tests: ''
162        timeoutInMinutes: 120
163        pool:
164          vmImage: 'windows-2019'
165        strategy:
166          matrix:
167            mingw32_openssl:
168              name: 32-bit OpenSSL/libssh2
169              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019
170              container_cmd: C:\msys64\usr\bin\sh
171              prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-i686-libssh2
172              configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32     --prefix=/mingw32 --enable-debug --enable-werror --with-libssh2 --with-openssl --without-libpsl
173              tests: "~571"
174            mingw64_openssl:
175              name: 64-bit OpenSSL/libssh2
176              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019
177              container_cmd: C:\msys64\usr\bin\sh
178              prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-x86_64-libssh2
179              configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --with-libssh2 --with-openssl --without-libpsl
180              tests: "~571"
181            mingw64_libssh:
182              name: 64-bit OpenSSL/libssh
183              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019
184              container_cmd: C:\msys64\usr\bin\sh
185              prepare: pacman -S --needed --noconfirm --noprogressbar libssh-devel mingw-w64-x86_64-libssh
186              configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --with-libssh --with-openssl --without-libpsl
187              tests: "~571 ~614"
188            mingw32:
189              name: 32-bit w/o zlib
190              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019
191              container_cmd: C:\msys64\usr\bin\sh
192              configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32     --prefix=/mingw32 --enable-debug --enable-werror --without-zlib --without-ssl --without-libpsl
193              tests: "!203 !1143"
194            mingw64:
195              name: 64-bit w/o zlib
196              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019
197              container_cmd: C:\msys64\usr\bin\sh
198              configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --without-zlib --without-ssl --without-libpsl
199              tests: "!203 !1143"
200            mingw32_schannel:
201              name: 32-bit Schannel/SSPI/WinIDN/libssh2
202              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019
203              container_cmd: C:\msys64\usr\bin\sh
204              prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-i686-libssh2
205              configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32     --prefix=/mingw32 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --with-libssh2 --without-libpsl
206              tests: "~571"
207            mingw64_schannel:
208              name: 64-bit Schannel/SSPI/WinIDN/libssh2
209              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019
210              container_cmd: C:\msys64\usr\bin\sh
211              prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-x86_64-libssh2
212              configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --with-libssh2 --without-libpsl
213              tests: "~571"
214            mingw32_schannel_nozlib:
215              name: 32-bit Schannel/SSPI/WinIDN w/o zlib
216              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019
217              container_cmd: C:\msys64\usr\bin\sh
218              configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32     --prefix=/mingw32 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --without-zlib --without-libpsl
219              tests: "!203 !1143"
220            mingw64_schannel_nozlib:
221              name: 64-bit Schannel/SSPI/WinIDN w/o zlib
222              container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019
223              container_cmd: C:\msys64\usr\bin\sh
224              configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --without-zlib --without-libpsl
225              tests: "!203 !1143"
226        container:
227          image: $(container_img)
228          env:
229            MSYS2_PATH_TYPE: inherit
230        steps:
231          - script: $(container_cmd) -l -c "cd $(echo '%cd%') && $(prepare)"
232            displayName: 'prepare'
233            condition: variables.prepare
234            retryCountOnTaskFailure: 3
235
236          - script: $(container_cmd) -l -c "cd $(echo '%cd%') && autoreconf -fi && ./configure $(configure)"
237            displayName: 'configure $(name)'
238
239          - script: $(container_cmd) -l -c "cd $(echo '%cd%') && make V=1 && make V=1 examples && cd tests && make V=1"
240            displayName: 'compile'
241
242          - script: $(container_cmd) -l -c "cd $(echo '%cd%') && make V=1 install && PATH=/usr/bin:/bin find . -type f -path '*/.libs/*.exe' -print -execdir mv -t .. {} \;"
243            displayName: 'install'
244
245          - script: $(container_cmd) -l -c "cd $(echo '%cd%') && make V=1 test-ci"
246            displayName: 'test'
247            env:
248              AZURE_ACCESS_TOKEN: "$(System.AccessToken)"
249              TFLAGS: "-ac /usr/bin/curl.exe !IDN !SCP ~612 $(tests)"
250