# # Copyright (c) 2020, The OpenThread Authors. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. Neither the name of the copyright holder nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # name: POSIX on: [push, pull_request] jobs: cancel-previous-runs: runs-on: ubuntu-20.04 steps: - uses: rokroskar/workflow-run-cleanup-action@master env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" if: "github.ref != 'refs/heads/main'" expects-linux: runs-on: ubuntu-18.04 env: CFLAGS: -DCLI_COAP_SECURE_USE_COAP_DEFAULT_HANDLER=1 -DOPENTHREAD_CONFIG_MLE_MAX_CHILDREN=15 CXXFLAGS: -DCLI_COAP_SECURE_USE_COAP_DEFAULT_HANDLER=1 -DOPENTHREAD_CONFIG_MLE_MAX_CHILDREN=15 steps: - uses: actions/checkout@v2 - name: Bootstrap run: | sudo apt-get --no-install-recommends install -y expect ninja-build lcov socat - name: Run RCP Mode run: | ulimit -c unlimited ./script/test prepare_coredump_upload OT_OPTIONS='-DOT_READLINE=OFF -DOT_FULL_LOGS=ON -DOT_LOG_OUTPUT=PLATFORM_DEFINED' VIRTUAL_TIME=0 OT_NODE_TYPE=rcp ./script/test build expect - name: Check Crash if: ${{ failure() }} run: | CRASHED=$(./script/test check_crash | tail -1) [[ $CRASHED -eq "1" ]] && echo "Crashed!" || echo "Not crashed." echo "CRASHED_RCP=$CRASHED" >> $GITHUB_ENV - uses: actions/upload-artifact@v2 if: ${{ failure() && env.CRASHED_RCP == '1' }} with: name: core-expect-rcp path: | ./ot-core-dump/* - name: Generate Coverage run: | ./script/test generate_coverage gcc - uses: actions/upload-artifact@v2 with: name: cov-expects-linux-1 path: tmp/coverage.info - name: Run TUN Mode run: | sudo rm /etc/apt/sources.list.d/* && sudo apt-get update sudo apt-get install --no-install-recommends -y dnsmasq bind9-host ntp sudo systemctl start dnsmasq ntp host ipv6.google.com 127.0.0.1 echo 'listen-address=::1' | sudo tee /etc/dnsmasq.conf echo 0 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6 sudo systemctl restart dnsmasq host ipv6.google.com ::1 ulimit -c unlimited ./script/test prepare_coredump_upload OT_OPTIONS='-DOT_READLINE=OFF -DOT_FULL_LOGS=ON -DOT_LOG_OUTPUT=PLATFORM_DEFINED' OT_NATIVE_IP=1 VIRTUAL_TIME=0 OT_NODE_TYPE=rcp ./script/test clean build expect - name: Check Crash if: ${{ failure() }} run: | CRASHED=$(./script/test check_crash | tail -1) [[ $CRASHED -eq "1" ]] && echo "Crashed!" || echo "Not crashed." echo "CRASHED_TUN=$CRASHED" >> $GITHUB_ENV - uses: actions/upload-artifact@v2 if: ${{ failure() && env.CRASHED_TUN == '1' }} with: name: core-expect-linux path: | ./ot-core-dump/* - uses: actions/upload-artifact@v2 if: ${{ failure() }} with: name: syslog-expect-linux path: /var/log/syslog - name: Generate Coverage run: | ./script/test generate_coverage gcc - uses: actions/upload-artifact@v2 with: name: cov-expects-linux-2 path: tmp/coverage.info thread-cert: runs-on: ubuntu-20.04 env: COVERAGE: 1 PYTHONUNBUFFERED: 1 READLINE: readline REFERENCE_DEVICE: 1 THREAD_VERSION: 1.1 VIRTUAL_TIME: 1 VIRTUAL_TIME_UART: 1 steps: - uses: actions/checkout@v2 with: submodules: true - name: Bootstrap run: | sudo rm /etc/apt/sources.list.d/* && sudo apt-get update sudo apt-get --no-install-recommends install -y libreadline6-dev python3-setuptools python3-wheel lcov python3 -m pip install -r tests/scripts/thread-cert/requirements.txt - name: Build run: | ./bootstrap make -f examples/Makefile-simulation make -f src/posix/Makefile-posix - name: Run run: | VERBOSE=1 OT_CLI_PATH="$PWD/output/posix/bin/ot-cli -v" RADIO_DEVICE="$PWD/output/simulation/bin/ot-rcp" make -f src/posix/Makefile-posix check - uses: actions/upload-artifact@v2 if: ${{ failure() }} with: name: thread-cert path: build/posix/tests/scripts/thread-cert - name: Generate Coverage run: | ./script/test generate_coverage gcc - uses: actions/upload-artifact@v2 with: name: cov-thread-cert path: tmp/coverage.info ncp-rcp-migrate: runs-on: ubuntu-20.04 env: COVERAGE: 1 steps: - uses: actions/checkout@v2 with: submodules: true - name: Bootstrap run: | sudo rm /etc/apt/sources.list.d/* && sudo apt-get update sudo apt-get --no-install-recommends install -y expect lcov - name: Build run: | ./bootstrap script/check-ncp-rcp-migrate build - name: Run run: | script/check-ncp-rcp-migrate check - name: Generate Coverage run: | ./script/test generate_coverage gcc - uses: actions/upload-artifact@v2 with: name: cov-ncp-rcp-migrate path: tmp/coverage.info pty-linux: name: pty-linux OT_DAEMON=${{ matrix.OT_DAEMON }} runs-on: ubuntu-20.04 strategy: matrix: OT_DAEMON: ['off', 'on'] env: COVERAGE: 1 OT_DAEMON: ${{ matrix.OT_DAEMON }} OT_READLINE: 'readline' steps: - uses: actions/checkout@v2 - name: Bootstrap run: | sudo rm /etc/apt/sources.list.d/* && sudo apt-get update sudo apt-get --no-install-recommends install -y socat expect lcov net-tools ninja-build cd /tmp wget https://github.com/obgm/libcoap/archive/bsd-licensed.tar.gz tar xvf bsd-licensed.tar.gz cd libcoap-bsd-licensed ./autogen.sh ./configure --prefix= --exec-prefix=/usr --with-boost=internal --disable-tests --disable-documentation make -j2 sudo make install - name: Build run: | script/check-posix-pty build - name: Run run: | script/check-posix-pty check - name: Generate Coverage run: | ./script/test generate_coverage gcc - uses: actions/upload-artifact@v2 with: name: cov-pty-linux-${{ matrix.DAEMON }} path: tmp/coverage.info pty-macos: name: pty-macos OT_DAEMON=${{ matrix.OT_DAEMON }} runs-on: macos-10.15 strategy: matrix: OT_DAEMON: ['off', 'on'] env: OT_DAEMON: ${{ matrix.OT_DAEMON }} OT_READLINE: 'off' steps: - uses: actions/checkout@v2 - name: Bootstrap run: | brew update brew install ninja socat - name: Build run: | script/check-posix-pty build - name: Run run: | script/check-posix-pty check upload-coverage: needs: - expects-linux - ncp-rcp-migrate - pty-linux - thread-cert runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 with: submodules: true - name: Bootstrap run: | sudo apt-get --no-install-recommends install -y lcov - uses: actions/download-artifact@v2 with: path: coverage/ - name: Combine Coverage run: | script/test combine_coverage - name: Upload Coverage uses: codecov/codecov-action@v1 with: files: final.info fail_ci_if_error: true delete-coverage-artifacts: needs: upload-coverage if: always() runs-on: ubuntu-20.04 steps: - uses: geekyeggo/delete-artifact@1-glob-support with: name: cov-* useGlob: true