name: build
on: [push, pull_request]
jobs:
  linux:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        cc: [gcc, clang]
        target: [test, test++, valgrind]
        ssl: [MBEDTLS, OPENSSL]
    name: linux ${{ matrix.target }} CC=${{ matrix.cc }} SSL=${{ matrix.ssl }}
    env:
      IPV6: 0
      CC: ${{ matrix.cc }}
      SSL: ${{ matrix.ssl }}
    steps:
    - uses: actions/checkout@v3
    - name: Install packages
      run: sudo apt-get update ; sudo apt-get install libmbedtls-dev valgrind
    - name: test
      run: make ${{ matrix.target }}
    - name: unamalgamated
      run: make unamalgamated
  examples:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - run: sudo apt-get install libmbedtls-dev libpcap-dev
    - run: make clean examples
    - run: make clean test IPV6=0 MG_ENABLE_POLL=1
  macos:
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@v3
    - run: HOMEBREW_NO_AUTO_UPDATE=1 brew install jq mbedtls openssl
    - run: make test++ upload-coverage IPV6=0 ASAN_OPTIONS=
    - run: make test SSL=OPENSSL IPV6=0 ASAN_OPTIONS= OPENSSL=`echo /usr/local/Cellar/openssl*/*`
    - run: make mg_prefix
  windows:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - run: make vc98
    - run: make vc17
    - run: make vc22
    - run: make mingw
    - run: make mingw++
  arm:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - run: make arm
  matrix_examples:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        example:
          - name: esp32/device-dashboard
            path: esp32/device-dashboard
          - name: esp8266
            path: esp8266
          - name: stm32-freertos-tcp
            path: stm32/stm32-freertos-tcp
          - name: stm32-nucleo-f746z
            path: stm32/stm32-nucleo-f746z
          - name: stm32-nucleo-f429z
            path: stm32/stm32-nucleo-f429z
          - name: stm32-nucleo-h743z
            path: stm32/stm32-nucleo-h743z
          - name: stm32-nucleo-f746zg-baremetal
            path: stm32/nucleo-f746zg-baremetal
          - name: nxp-mimxrt1020-azurertos
            path: nxp/nxp-mimxrt1020-azurertos
          - name: nxp-frdmk66f-freertos
            path: nxp/nxp-frdmk66f-freertos
          - name: nxp-lpcxpresso54s018m-freertos
            path: nxp/nxp-lpcxpresso54s018m-freertos
          - name: nxp-mimxrt1020-freertos
            path: nxp/nxp-mimxrt1020-freertos
          - name: nxp-evkbimxrt1050-lwip-freertos
            path: nxp/nxp-evkbimxrt1050-lwip-freertos
          - name: nxp-evkmimxrt1020-lwip-freertos
            path: nxp/nxp-evkmimxrt1020-lwip-freertos
          - name: nxp-evkmimxrt1024-lwip-freertos
            path: nxp/nxp-evkmimxrt1024-lwip-freertos
          - name: nxp-evkmimxrt1060-lwip-freertos
            path: nxp/nxp-evkmimxrt1060-lwip-freertos
          - name: nxp-evkmimxrt1064-lwip-freertos
            path: nxp/nxp-evkmimxrt1064-lwip-freertos
          - name: nxp-evkmimxrt1160-cm7-lwip-freertos
            path: nxp/nxp-evkmimxrt1160-cm7-lwip-freertos
          - name: nxp-evkmimxrt1170-cm7-lwip-freertos
            path: nxp/nxp-evkmimxrt1170-cm7-lwip-freertos
          - name: nxp-frdmk64f-lwip-freertos
            path: nxp/nxp-frdmk64f-lwip-freertos
          - name: nxp-frdmk66f-lwip-freertos
            path: nxp/nxp-frdmk66f-lwip-freertos
          - name: nxp-lpcxpresso54018-lwip-freertos
            path: nxp/nxp-lpcxpresso54018-lwip-freertos
          - name: nxp-lpcxpresso54608-lwip-freertos
            path: nxp/nxp-lpcxpresso54608-lwip-freertos
          - name: nxp-lpcxpresso54618-lwip-freertos
            path: nxp/nxp-lpcxpresso54618-lwip-freertos
          - name: nxp-lpcxpresso54628-lwip-freertos
            path: nxp/nxp-lpcxpresso54628-lwip-freertos
          - name: nxp-twrk65f180m-lwip-freertos
            path: nxp/nxp-twrk65f180m-lwip-freertos
          - name: nxp-twrkv58f220m-lwip-freertos
            path: nxp/nxp-twrkv58f220m-lwip-freertos
          - name: infineon-xmc4700_4800-lwip-rtx-rtos
            path: infineon/infineon-xmc4700_4800-lwip-rtx-rtos
          - name: ti
            path: ti/ti-ek-tm4c1294xl-http-server
          - name: nucleo_f746zg-zephyr-http-client
            path: zephyr/http-client
          - name: nucleo_f746zg-zephyr-http-server
            path: zephyr/http-server
          - name: nucleo_f746zg-zephyr-mqtt-aws-client
            path: zephyr/mqtt-aws-client
          - name: nucleo_f746zg-zephyr-websocket-server
            path: zephyr/websocket-server             
    name: ${{ matrix.example.name }}
    steps:
      - uses: actions/checkout@v3
      - name: ${{ matrix.example.name }}
        run: make -C examples/${{ matrix.example.path }} build
