summaryrefslogtreecommitdiff
path: root/.github/workflows/macos.yml
blob: e50011e542d08958fab92302971f3b3475c28393 (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
134
135
136
137
138
139
140
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
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# SPDX-License-Identifier: curl

name: macOS

on:
  push:
    branches:
    - master
    - '*/ci'
    paths-ignore:
    - '**/*.md'
  pull_request:
    branches:
    - master
    paths-ignore:
    - '**/*.md'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: true

permissions: {}

env:
  DEVELOPER_DIR: /Applications/Xcode_14.0.1.app/Contents/Developer

jobs:
  autotools:
    name: ${{ matrix.build.name }}
    runs-on: 'macos-latest'
    timeout-minutes: 90
    strategy:
      fail-fast: false
      matrix:
        build:
        - name: normal
          install: nghttp2
          configure: --without-ssl
          macosx-version-min: 10.9
        - name: debug
          install: nghttp2
          configure: --enable-debug --without-ssl
          macosx-version-min: 10.9
        - name: libssh2
          install: nghttp2 libssh2
          configure: --enable-debug --with-libssh2 --without-ssl
          macosx-version-min: 10.9
        - name: libssh-c-ares
          install: openssl nghttp2 libssh
          configure: --enable-debug --with-libssh --with-openssl=/usr/local/opt/openssl --enable-ares
          macosx-version-min: 10.9
        - name: libssh
          install: openssl nghttp2 libssh
          configure: --enable-debug --with-libssh --with-openssl=/usr/local/opt/openssl
          macosx-version-min: 10.9
        - name: c-ares
          install: nghttp2
          configure: --enable-debug --enable-ares --without-ssl
          macosx-version-min: 10.9
        - name: HTTP only
          install: nghttp2
          configure: --enable-debug --enable-maintainer-mode --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 --disable-unix-sockets --disable-shared --without-brotli --without-gssapi --without-libidn2 --without-libpsl --without-librtmp --without-libssh2 --without-nghttp2 --without-ntlm-auth --without-ssl --without-zlib
          macosx-version-min: 10.15
        - name: SecureTransport http2
          install: nghttp2
          configure: --enable-debug --with-secure-transport
          macosx-version-min: 10.8
        - name: OpenSSL http2
          install: nghttp2 openssl
          configure: --enable-debug --with-openssl=/usr/local/opt/openssl
          macosx-version-min: 10.9
        - name: LibreSSL http2
          install: nghttp2 libressl
          configure: --enable-debug --with-openssl=/usr/local/opt/libressl
          macosx-version-min: 10.9
        - name: torture
          install: nghttp2 openssl
          configure: --enable-debug --disable-shared --disable-threaded-resolver --with-openssl=/usr/local/opt/openssl
          tflags: -n -t --shallow=25 !FTP
          macosx-version-min: 10.9
        - name: torture-ftp
          install: nghttp2 openssl
          configure: --enable-debug --disable-shared --disable-threaded-resolver --with-openssl=/usr/local/opt/openssl
          tflags: -n -t --shallow=20 FTP
          macosx-version-min: 10.9
        - name: macOS 10.15
          install: nghttp2 libssh2 openssl
          configure: --enable-debug --disable-ldap --with-openssl=/usr/local/opt/openssl
          macosx-version-min: 10.15
    steps:
    - run: echo libtool autoconf automake pkg-config ${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
      name: 'brew bundle'

    # Run this command with retries because of spurious failures seen
    # while running the tests, for example
    # https://github.com/curl/curl/runs/4095721123?check_suite_focus=true
    - run: "while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; false; } done; false Too many retries; done"
      name: 'brew install'

    - run: python3 -m pip install impacket
      name: 'pip3 install'

    - uses: actions/checkout@v3

    - run: autoreconf -fi
      name: 'autoreconf'

    - run: ./configure --enable-warnings --enable-werror ${{ matrix.build.configure }}  --enable-websockets
      name: 'configure'
      env:
        # -Wvla is caused by brotli
        CFLAGS: "-Wno-vla -mmacosx-version-min=${{ matrix.build.macosx-version-min }}"

    - run: make V=1
      name: 'make'

    - run: make V=1 examples
      name: 'make examples'

    - run: make V=1 -C tests
      name: 'make tests'

    - run: make V=1 test-ci
      name: 'run tests'
      env:
        TFLAGS: "${{ matrix.build.tflags }} ~1452"

  cmake:
    name: cmake ${{ matrix.compiler.CC }} ${{ matrix.build.name }}
    runs-on: 'macos-latest'
    env: ${{ matrix.compiler }}
    strategy:
      fail-fast: false
      matrix:
        compiler:
        - CC: clang
          CXX: clang++
          CFLAGS: "-mmacosx-version-min=10.15 -Wno-deprecated-declarations"
        - CC: gcc-12
          CXX: g++-12
          CFLAGS: "-mmacosx-version-min=10.15 -Wno-error=undef -Wno-error=conversion"
        build:
        - name: OpenSSL
          install: nghttp2 openssl
          generate: -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON
        - name: LibreSSL
          install: nghttp2 libressl
          generate: -DOPENSSL_ROOT_DIR=/usr/local/opt/libressl -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON
        - name: libssh2
          install: nghttp2 openssl libssh2
          generate: -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DCURL_USE_LIBSSH2=ON
    steps:
    - run: echo libtool autoconf automake pkg-config ${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
      name: 'brew bundle'

    - run: "while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; false; } done; false Too many retries; done"
      name: 'brew install'

    - run: python3 -m pip install impacket
      name: 'pip3 install'

    - uses: actions/checkout@v3

    - run: cmake -S. -Bbuild -DCURL_WERROR=ON -DPICKY_COMPILER=ON ${{ matrix.build.generate }}
      name: 'cmake generate'

    - run: cmake --build build
      name: 'cmake build'