name: Full build and test on: schedule: - cron: '0 1 * * *' # run at 1 AM UTC # Allow manual runs workflow_dispatch: env: IPV6: 0 jobs: linux: runs-on: ubuntu-latest strategy: fail-fast: false matrix: cc: [gcc, clang, g++, clang++] target: [test, mip_test] ssl: ["", BUILTIN, MBEDTLS, OPENSSL] select: ["-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0", "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0", "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=1"] exclude: - ssl: MBEDTLS select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0" - ssl: MBEDTLS select: "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0" - ssl: OPENSSL select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0" - ssl: OPENSSL select: "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0" name: linux ${{ matrix.target }} CC=${{ matrix.cc }} SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }} env: CC: ${{ matrix.cc }} SSL: ${{ matrix.ssl }} TFLAGS: ${{ matrix.select }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: ./test/setup_ga_network.sh && sudo apt -y update ; sudo apt -y install libmbedtls-dev && make ${{ matrix.target }} s390: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", BUILTIN] name: S390 SSL=${{ matrix.ssl }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update ; sudo apt -y install qemu binfmt-support qemu-user-static && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make s390 SSL=${{ matrix.ssl }} armhf: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", BUILTIN] name: ArmHF SSL=${{ matrix.ssl }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update ; sudo apt -y install qemu binfmt-support qemu-user-static && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make armhf SSL=${{ matrix.ssl }} unamalgamated-mg_prefix: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", BUILTIN, MBEDTLS, OPENSSL] name: unamalgamated-mg_prefix SSL=${{ matrix.ssl }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update ; sudo apt -y install libmbedtls-dev - run: make unamalgamated && make mg_prefix valgrind: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", BUILTIN, MBEDTLS, OPENSSL] name: Valgrind SSL=${{ matrix.ssl }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update ; sudo apt -y install libmbedtls-dev valgrind - run: make valgrind SSL=${{ matrix.ssl }} macos: runs-on: macos-latest strategy: fail-fast: false matrix: ssl: ["", BUILTIN, MBEDTLS, OPENSSL] select: [-DMG_ENABLE_POLL=0, -DMG_ENABLE_POLL=1] exclude: - ssl: MBEDTLS select: -DMG_ENABLE_POLL=0 - ssl: OPENSSL select: -DMG_ENABLE_POLL=0 name: macos SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }} env: SSL: ${{ matrix.ssl }} TFLAGS: ${{ matrix.select }} -DNO_SNTP_CHECK -Wno-sign-conversion # Workaround for MbedTLS 3.5.0 HOMEBREW_NO_AUTO_UPDATE: 1 steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: brew install jq mbedtls openssl - run: make test ASAN_OPTIONS= MBEDTLS=`echo /usr/local/Cellar/mbedtls*/*` OPENSSL=`echo /usr/local/Cellar/openssl*/*` windows: runs-on: ubuntu-latest strategy: fail-fast: false max-parallel: 1 # no parallel runs, to minimize MQTT errors matrix: target: [vc98, vc17, vc22, mingw, mingw++] ssl: ["", BUILTIN] select: [-DMG_ENABLE_POLL=0, -DMG_ENABLE_POLL=1] exclude: - target: vc98 select: -DMG_ENABLE_POLL=1 name: windows ${{ matrix.target }} SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }} env: SSL: SSL=${{ matrix.ssl }} TFLAGS: ${{ matrix.select }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: make ${{ matrix.target }} arm: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", BUILTIN] name: Arm SSL=${{ matrix.ssl }} steps: - uses: actions/checkout@v4 - run: make arm SSL=${{ matrix.ssl }} riscv: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", BUILTIN] name: RISC-V SSL=${{ matrix.ssl }} steps: - uses: actions/checkout@v4 - run: make riscv SSL=${{ matrix.ssl }} examples: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", -DMG_TLS=MG_TLS_BUILTIN] name: examples ${{ matrix.ssl }} steps: - uses: actions/checkout@v4 - run: sudo apt -y install libmbedtls-dev libpcap-dev - run: make examples CFLAGS_EXTRA="${{ matrix.ssl }}" - run: make clean_examples examples_win: runs-on: windows-latest strategy: fail-fast: false matrix: ssl: ["", -DMG_TLS=MG_TLS_BUILTIN] name: examples_win ${{ matrix.ssl }} steps: - uses: actions/checkout@v4 # - uses: egor-tensin/setup-mingw@v2 # with: # platform: x64 - name: test they build run: make examples_win CFLAGS_EXTRA="${{ matrix.ssl }}" shell: cmd - name: test they clean run: make clean_examples_win shell: cmd examples_mac: runs-on: macos-latest env: { HOMEBREW_NO_AUTO_UPDATE: 1 } strategy: fail-fast: false matrix: ssl: ["", -DMG_TLS=MG_TLS_BUILTIN] name: examples_mac ${{ matrix.ssl }} steps: - uses: actions/checkout@v4 - run: make examples_mac CFLAGS_EXTRA="${{ matrix.ssl }}" - run: make clean_examples_mac arduino: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: echo # nothing specific to install or do - run: make -C examples/arduino arduino-xiao # - run: make -C examples/arduino arduino-nano - run: make -C examples/arduino clean generic_examples: runs-on: ubuntu-latest strategy: fail-fast: false matrix: example: - path: esp32/uart-bridge - path: esp32/micropython - path: esp8266/http-client-server name: ${{ matrix.example.path }} env: GO: 0 steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: if ./test/match_changed_files.sh '^src|^examples/${{ matrix.example.path }}'; then echo GO=1 >> $GITHUB_ENV ; fi - run: echo # nothing specific to install or do - run: make -C examples/${{ matrix.example.path }} build generic_examples_arm: runs-on: ubuntu-latest strategy: fail-fast: false matrix: example: - path: microchip/same54-xpro/mqtt-client - path: infineon/infineon-xmc4700_4800-lwip-rtx-rtos - path: nxp/nxp-mimxrt1020-azurertos - path: nxp/nxp-frdmk66f-freertos - path: nxp/nxp-lpcxpresso54s018m-freertos - path: nxp/nxp-mimxrt1020-freertos - path: nxp/nxp-evkbimxrt1050-lwip-freertos - path: nxp/nxp-evkmimxrt1020-lwip-freertos - path: nxp/nxp-evkmimxrt1024-lwip-freertos - path: nxp/nxp-evkmimxrt1060-lwip-freertos - path: nxp/nxp-evkmimxrt1064-lwip-freertos - path: nxp/nxp-evkmimxrt1160-cm7-lwip-freertos - path: nxp/nxp-evkmimxrt1170-cm7-lwip-freertos - path: nxp/nxp-frdmk64f-lwip-freertos - path: nxp/nxp-frdmk66f-lwip-freertos - path: nxp/nxp-lpcxpresso54018-lwip-freertos - path: nxp/nxp-lpcxpresso54608-lwip-freertos - path: nxp/nxp-lpcxpresso54618-lwip-freertos - path: nxp/nxp-lpcxpresso54628-lwip-freertos - path: nxp/nxp-twrk65f180m-lwip-freertos - path: nxp/nxp-twrkv58f220m-lwip-freertos - path: rp2040/pico-rmii - path: stm32/nucleo-f429zi-make-baremetal-builtin-rndis - path: stm32/nucleo-f746zg-make-baremetal-builtin-rndis - path: stm32/nucleo-g031-make-baremetal-builtin - path: ti/ti-ek-tm4c1294xl-http-server - path: ti/ek-tm4c1294xl-make-baremetal-builtin-rndis name: ${{ matrix.example.path }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/${{ matrix.example.path }} build device_dashboard_examples: runs-on: ubuntu-latest strategy: fail-fast: false matrix: example: - path: esp32/device-dashboard name: ${{ matrix.example.path }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: echo # nothing specific to install or do - run: make -C examples/${{ matrix.example.path }} build device_dashboard_examples_arm: runs-on: ubuntu-latest strategy: fail-fast: false matrix: ssl: ["", -DMG_TLS=MG_TLS_BUILTIN] example: - path: microchip/same54-xpro/device-dashboard - path: nxp/rt1020-evk-make-baremetal-builtin - path: nxp/rt1020-evk-make-freertos-builtin - path: nxp/rt1060-evk-make-baremetal-builtin - path: nxp/rt1060-evk-make-freertos-builtin - path: nxp/rt1170-evk-make-baremetal-builtin - path: renesas/ek-ra6m4-make-baremetal-builtin - path: rp2040/pico-rndis-dashboard - path: rp2040/pico-w - path: rp2040/pico-w5500 - path: stm32/nucleo-f429zi-make-baremetal-builtin - path: stm32/nucleo-f429zi-make-freertos-builtin - path: stm32/nucleo-f746zg-make-baremetal-builtin - path: stm32/nucleo-f746zg-make-freertos-builtin - path: stm32/nucleo-f746zg-make-freertos-tcp - path: stm32/nucleo-f746zg-make-baremetal-builtin-cmsis_driver - path: stm32/nucleo-h563zi-make-baremetal-builtin - path: stm32/nucleo-h563zi-make-freertos-builtin - path: stm32/nucleo-h723zg-make-freertos-builtin - path: stm32/nucleo-h743zi-make-baremetal-builtin - path: stm32/nucleo-h743zi-make-freertos-builtin - path: stm32/stm32h573i-dk-make-baremetal-builtin - path: stm32/stm32h573i-dk-make-freertos-builtin - path: ti/ek-tm4c1294xl-make-baremetal-builtin - path: ti/ek-tm4c1294xl-make-freertos-builtin name: ${{ matrix.example.path }} ${{ matrix.ssl }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/${{ matrix.example.path }} build CFLAGS_EXTRA="${{ matrix.ssl }}" # mqtt_dashboard_examples: # runs-on: ubuntu-latest # strategy: # fail-fast: false # matrix: # example: # - path: # name: ${{ matrix.example.path }} # steps: # - uses: actions/checkout@v4 # with: { fetch-depth: 2 } # - run: echo # nothing specific to install or do # - run: make -C examples/${{ matrix.example.path }} build mqtt_dashboard_examples_arm: runs-on: ubuntu-latest strategy: fail-fast: false matrix: example: - path: rp2040/pico-rndis-device name: ${{ matrix.example.path }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/${{ matrix.example.path }} build # dual_examples: # runs-on: ubuntu-latest # strategy: # fail-fast: false # matrix: # example: # - path: # name: ${{ matrix.example.path }} # steps: # - uses: actions/checkout@v4 # with: { fetch-depth: 2 } # - run: echo # nothing specific to install or do # - run: make -C examples/${{ matrix.example.path }} device_dashboard # - run: make -C examples/${{ matrix.example.path }} mqtt_dashboard dual_examples_arm: runs-on: ubuntu-latest strategy: fail-fast: false matrix: example: - path: stm32/nucleo-h723zg-make-baremetal-builtin name: ${{ matrix.example.path }} steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/${{ matrix.example.path }} device_dashboard - run: make -C examples/${{ matrix.example.path }} mqtt_dashboard cube_examples: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: echo # nothing specific to install or do - run: cd test/cube && make zephyr_examples: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/zephyr init - name: minify manifest uses: mikefarah/yq@master with: cmd: yq -i eval '(.manifest.defaults, .manifest.remotes, .manifest.projects[] | select(.name == "cmsis" or .name == "hal_stm32" or .name == "mbedtls" or .name == "mcuboot" or .name == "picolibc" | del(.null) ), .manifest.self) as $i ireduce({};setpath($i | path; $i)) | del(.manifest.projects.[].null) | del(..|select(length==0))' examples/zephyr/zephyrproject/zephyr/west.yml - run: make -C examples/zephyr update - run: make -C examples/zephyr/device-dashboard build - run: make -C examples/zephyr/http-client build - run: make -C examples/zephyr/http-server build - run: make -C examples/zephyr/mqtt-aws-client build - run: make -C examples/zephyr/websocket-server build test_f7: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/stm32/nucleo-f746zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/stm32/nucleo-f746zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/stm32/nucleo-f746zg-make-freertos-tcp test VCON_API_KEY=${{secrets.VCON_API_KEY}} - name: Cube run: echo # nothing specific to install or do - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f746zg-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5 - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f746zg-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5 - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f746zg-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5 test_f4: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/stm32/nucleo-f429zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/stm32/nucleo-f429zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - name: Cube run: echo # nothing specific to install or do - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f429zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2 - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f429zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2 - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f429zi-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2 test_h743: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 3 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/stm32/nucleo-h743zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/stm32/nucleo-h743zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - name: Cube run: echo # nothing specific to install or do - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-h743zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6 - run: make -C test/cube test PROJECTS=../../examples/stm32/nucleo-h743zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6 test_h723: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 3 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/stm32/nucleo-h723zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/stm32/nucleo-h723zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_h5: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 3 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/stm32/nucleo-h563zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/stm32/nucleo-h563zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_rt1020: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 3 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/nxp/rt1020-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/nxp/rt1020-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_rt1060: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 3 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/nxp/rt1060-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/nxp/rt1060-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_rt1170: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 3 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/nxp/rt1170-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} # - run: make -C examples/nxp/rt1170-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_ra6m4: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 3 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/renesas/ek-ra6m4-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} # - run: make -C examples/renesas/ek-ra6m4-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_tm4c: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/ti/ek-tm4c1294xl-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/ti/ek-tm4c1294xl-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_same54: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - name: baremetal run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/microchip/same54-xpro/device-dashboard test VCON_API_KEY=${{secrets.VCON_API_KEY}} - run: make -C examples/microchip/same54-xpro/mqtt-client test VCON_API_KEY=${{secrets.VCON_API_KEY}} test_pico_w5500: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 2 } - name: SDK run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi - run: make -C examples/rp2040/pico-w5500 test VCON_API_KEY=${{secrets.VCON_API_KEY}}