From 1089aa9ff4121a2eee2eddf18902c5d3f05182eb Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Sat, 18 Apr 2020 07:46:44 +0800 Subject: [PATCH] [continuous-integration] move android check to GitHub Actions (#4829) --- .github/workflows/build.yml | 8 + .travis.yml | 54 -- .travis/before_install.sh | 189 ----- .travis/check-android-build | 115 --- .travis/script.sh | 704 ------------------ CONTRIBUTING.md | 1 - README.md | 3 - .../check-android-build | 34 +- script/check-posix-pty | 2 +- .../scripts/misc}/test_multicast_join.py | 22 +- tests/toranj/README.md | 4 +- 11 files changed, 40 insertions(+), 1096 deletions(-) delete mode 100644 .travis.yml delete mode 100755 .travis/before_install.sh delete mode 100755 .travis/check-android-build delete mode 100755 .travis/script.sh rename .travis/after_success.sh => script/check-android-build (76%) rename {.travis => tests/scripts/misc}/test_multicast_join.py (78%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 74e49b83d..652539bfa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -160,3 +160,11 @@ jobs: - name: Build run: | script/check-simulation-build + + android: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: Build + run: | + docker run --rm -v $PWD:/build/openthread openthread/android-trusty /build/openthread/script/check-android-build diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 86ecd572d..000000000 --- a/.travis.yml +++ /dev/null @@ -1,54 +0,0 @@ -# -# Copyright (c) 2016, 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. -# - -language: python -python: "3.6" - -sudo: required -dist: bionic - -before_install: - - travis_retry .travis/before_install.sh - -before_script: - - if [ "${TRAVIS_OS_NAME}" == "linux" ]; then - sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6'; - fi - -jobs: - include: - - env: BUILD_TARGET="android-build" VERBOSE=1 - os: linux - dist: trusty - python: "2.7" # The old Android build system only supports python2 - script: .travis/script.sh - - env: BUILD_TARGET="android-build" VERBOSE=1 USE_OTBR_DAEMON=1 - os: linux - dist: trusty - python: "2.7" # The old Android build system only supports python2 - script: .travis/script.sh diff --git a/.travis/before_install.sh b/.travis/before_install.sh deleted file mode 100755 index 67cadcfcc..000000000 --- a/.travis/before_install.sh +++ /dev/null @@ -1,189 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2016, 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. -# - -[ -n "$BUILD_TARGET" ] || exit 0 - -die() { - echo " *** ERROR: " $* - exit 1 -} - -set -x - -cd /tmp || die - -[ $TRAVIS_OS_NAME != linux ] || { - (cd /etc/apt/sources.list.d && sudo rm -rf cassandra.list* couchdb.list* mongodb-3.4.list* rabbitmq_rabbitmq-server.list* chris-lea-redis-server.list* github_git-lfs.list* pgdg.list) - sudo apt-get update || die - - sudo apt-get --no-install-recommends install -y ninja-build - - pip3 install --upgrade pip - pip3 install cmake - - case "${BUILD_TARGET}" in - simulation-distcheck|simulation-32-bit|posix-cli|simulation-mtd|simulation-ncp|posix-ncp|v1.2) - pip install --upgrade pip || die - pip install -r $TRAVIS_BUILD_DIR/tests/scripts/thread-cert/requirements.txt || die - [ $BUILD_TARGET != simulation-ncp -a $BUILD_TARGET != posix-ncp ] || { - # Packages used by ncp tools. - pip install git+https://github.com/openthread/pyspinel || die - } - ;; - *) - ;; - esac - - [ $BUILD_TARGET != android-build ] || { - sudo apt-get --no-install-recommends install -y bison gcc-multilib g++-multilib - ( - cd $HOME - wget https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip - unzip android-ndk-r17c-linux-x86_64.zip > /dev/null - mv android-ndk-r17c ndk-bundle - ) || die - } - - [ $BUILD_TARGET != gn-build ] || { - # Install ninja - ( - cd $HOME - wget -O ninja.zip https://chrome-infra-packages.appspot.com/dl/infra/ninja/linux-amd64/+/latest - unzip -o ninja.zip - chmod a+x ninja && mkdir -p bin && mv -f ninja bin/ && export PATH=${HOME}/bin:$PATH - ninja --version - ) || die - - - # Get latest gn - ( - cd $HOME - wget -O gn.zip https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+/latest - unzip -o gn.zip - chmod a+x gn && mv -f gn bin/ - gn --version - ) || die - } - - [ $BUILD_TARGET != posix-pty ] || { - sudo apt-get --no-install-recommends install -y socat expect || die - JOBS=$(getconf _NPROCESSORS_ONLN) - ( - LIBCOAP_TMPDIR=/tmp/libcoap - mkdir $LIBCOAP_TMPDIR - cd $LIBCOAP_TMPDIR - 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 -j $JOBS - sudo make install - ) || die - } - - [ $BUILD_TARGET != posix-migrate ] || { - sudo apt-get install expect || die - sudo apt-get --no-install-recommends install -y expect || die - } - - [ $BUILD_TARGET != arm-gcc-4 ] || { - sudo apt-get --no-install-recommends install -y lib32z1 || die - wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update/+download/gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2 || die - tar xjf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2 || die - export PATH=/tmp/gcc-arm-none-eabi-4_9-2015q3/bin:$PATH || die - arm-none-eabi-gcc --version || die - } - - [ $BUILD_TARGET != arm-gcc-5 ] || { - sudo apt-get --no-install-recommends install -y lib32z1 || die - wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/5_4-2016q3/gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2 || die - tar xjf gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2 || die - export PATH=/tmp/gcc-arm-none-eabi-5_4-2016q3/bin:$PATH || die - arm-none-eabi-gcc --version || die - } - - [ $BUILD_TARGET != arm-gcc-6 ] || { - wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 || die - tar xjf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 || die - export PATH=/tmp/gcc-arm-none-eabi-6-2017-q2-update/bin:$PATH || die - arm-none-eabi-gcc --version || die - } - - [ $BUILD_TARGET != arm-gcc-7 ] || { - wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2 || die - tar xjf gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2 || die - export PATH=/tmp/gcc-arm-none-eabi-7-2018-q2-update/bin:$PATH || die - arm-none-eabi-gcc --version || die - } - - [ $BUILD_TARGET != arm-gcc-8 ] || { - wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 || die - tar xjf gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 || die - export PATH=/tmp/gcc-arm-none-eabi-8-2018-q4-major/bin:$PATH || die - arm-none-eabi-gcc --version || die - } - - [ $BUILD_TARGET != arm-gcc-9 ] || { - wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 || die - tar xjf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 || die - export PATH=/tmp/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH || die - arm-none-eabi-gcc --version || die - } - - [ $BUILD_TARGET != simulation-32-bit -a $BUILD_TARGET != simulation-mtd ] || { - sudo apt-get --no-install-recommends install -y g++-multilib || die - } - - [ $BUILD_TARGET != simulation-distcheck ] || { - sudo apt-get --no-install-recommends install -y llvm-runtime || die - } - - [ $BUILD_TARGET != toranj-test-framework ] || { - # packages for wpantund - sudo apt-get --no-install-recommends install -y dbus || die - sudo apt-get --no-install-recommends install -y gcc g++ libdbus-1-dev || die - sudo apt-get --no-install-recommends install -y autoconf-archive || die - sudo apt-get --no-install-recommends install -y bsdtar || die - sudo apt-get --no-install-recommends install -y libtool || die - sudo apt-get --no-install-recommends install -y libglib2.0-dev || die - sudo apt-get --no-install-recommends install -y libboost-dev || die - sudo apt-get --no-install-recommends install -y libboost-signals-dev || die - - # clone and build wpantund - git clone --depth=1 --branch=master https://github.com/openthread/wpantund.git - cd wpantund || die - ./bootstrap.sh || die - ./configure || die - sudo make -j 8 || die - sudo make install || die - cd .. || die - } - -} diff --git a/.travis/check-android-build b/.travis/check-android-build deleted file mode 100755 index a31c68dcb..000000000 --- a/.travis/check-android-build +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2018, 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. -# - -# -# Run this command on parent directory of openthread -# - -set -e -set -x - -####################################### -# Prepare android build system -# Globals: -# None -# Arguments: -# None -# Returns: -# None -####################################### -android_prepare_build_system() -{ - # Android build system - (mkdir build && cd build && git init && git pull --depth 1 https://android.googlesource.com/platform/build 2db32730e79cafcf13e1f898a7bee7f82b0449d6) - ln -s build/core/main.mk Makefile - - # Workarounds for java checking - export ANDROID_JAVA_HOME=/usr/lib/jvm/java-8-oracle - mkdir bin - cat > bin/java < bin/javac < buildspec.mk < codecov - chmod a+x codecov +check_targets() +{ + for target in "$@"; do + make showcommands "${target}" + test -x "out/target/product/generic/system/bin/${target}" + done - # Assume gcov by default, and llvm-cov if CC is clang - if [[ -z $CC ]]; then - ./codecov - elif "$CC" --version | grep -q gcc; then - ./codecov - elif "$CC" --version | grep -q clang; then - ./codecov -x "llvm-cov gcov" - fi + for target in "$@"; do + make "clean-${target}" || true + done } -main() { - codecov_upload +main() +{ + USE_OTBR_DAEMON=1 check_targets ot-cli ot-ctl ot-ncp + check_targets ot-cli ot-ncp spi-hdlc-adapter } main "$@" diff --git a/script/check-posix-pty b/script/check-posix-pty index 0fc8ccffa..d35fb7314 100755 --- a/script/check-posix-pty +++ b/script/check-posix-pty @@ -135,7 +135,7 @@ EOF sudo killall -9 ot-ctl || true NETIF_INDEX=$(ip link show "${VALID_NETIF_NAME}" | cut -f 1 -d ":" | head -n 1) sudo PATH="$(dirname ${OT_CLI_CMD}):${PATH}" \ - python3 "$(pwd)/.travis/test_multicast_join.py" "${NETIF_INDEX}" \ + python3 "$PWD/tests/scripts/misc/test_multicast_join.py" "${NETIF_INDEX}" \ || die 'multicast group join failed' fi diff --git a/.travis/test_multicast_join.py b/tests/scripts/misc/test_multicast_join.py similarity index 78% rename from .travis/test_multicast_join.py rename to tests/scripts/misc/test_multicast_join.py index cb9d6cf71..9c1ae9245 100755 --- a/.travis/test_multicast_join.py +++ b/tests/scripts/misc/test_multicast_join.py @@ -37,8 +37,8 @@ from ipaddress import ip_address def get_maddrs(): - lines = subprocess.run( - ['ot-ctl', 'ipmaddr'], stdout=subprocess.PIPE).stdout.decode().split() + lines = subprocess.run(['ot-ctl', 'ipmaddr'], + stdout=subprocess.PIPE).stdout.decode().split() return [ip_address(l) for l in lines if l.startswith('ff')] @@ -47,21 +47,21 @@ def main(): if_index = int(sys.argv[1]) with socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) as s: - s.setsockopt(socket.IPPROTO_IPV6, - socket.IPV6_MULTICAST_IF, - if_index) - s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, - struct.pack('16si', socket.inet_pton(socket.AF_INET6, group), - if_index)) + s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, if_index) + s.setsockopt( + socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, + struct.pack('16si', socket.inet_pton(socket.AF_INET6, group), + if_index)) time.sleep(2) maddrs = get_maddrs() print(maddrs) if not any(addr == ip_address(group) for addr in maddrs): return -1 - s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_LEAVE_GROUP, - struct.pack('16si', socket.inet_pton(socket.AF_INET6, group), - if_index)) + s.setsockopt( + socket.IPPROTO_IPV6, socket.IPV6_LEAVE_GROUP, + struct.pack('16si', socket.inet_pton(socket.AF_INET6, group), + if_index)) time.sleep(2) maddrs = get_maddrs() diff --git a/tests/toranj/README.md b/tests/toranj/README.md index 6bf819aa3..7d9c86a65 100644 --- a/tests/toranj/README.md +++ b/tests/toranj/README.md @@ -7,14 +7,14 @@ - It allows testing of network interactions between many nodes (IPv6 traffic exchanges). `toranj` is developed in Python. `toranj` runs wpantund natively with OpenThread in NCP mode on POSIX simulation platform. -`toranj` tests will run as part of travis pull request validation in OpenThread and/or `wpantund` GitHub projects. +`toranj` tests will run as part of GitHub Actions pull request validation in OpenThread and/or `wpantund` GitHub projects. ## Setup `toranj` requires `wpantund` to be installed. - Please follow [`wpantund` installation guide](https://github.com/openthread/wpantund/blob/master/INSTALL.md#wpantund-installation-guide). Note that `toranj` expects `wpantund` installed from latest master branch. -- Alternative way to install `wpantund` is to use the same commands from travis `before_install` [script](https://github.com/openthread/openthread/blob/ef940b06594b370176b724733dbd7ad09617a693/.travis/before_install.sh#L110-L127) for build target `toranj-test-framework`. +- Alternative way to install `wpantund` is to use the same commands from git workflow [Simulation](https://github.com/openthread/openthread/blob/4b55284bd20f99a88e8e2c617ba358a0a5547f5d/.github/workflows/simulation.yml#L336-L341) for build target `toranj-test-framework`. To run all tests, `start` script can be used. This script will build OpenThread with proper configuration options and starts running all test.