]> git.proxmox.com Git - mirror_ovs.git/commitdiff
github: Add GitHub Actions workflow.
authorIlya Maximets <i.maximets@ovn.org>
Mon, 23 Nov 2020 22:34:28 +0000 (23:34 +0100)
committerIlya Maximets <i.maximets@ovn.org>
Thu, 26 Nov 2020 17:57:46 +0000 (18:57 +0100)
This is an initial version of GitHub Actions support.  It mostly
mimics our current Travis CI build matrix with slight differences.

The main issue is that we don't have ARM support here.

Minor difference that we can not install 32-bit versions of libunwind
and libunbound since those are not avaialble in repository.

Higher concurrency level allows to finish all tests less than in 20
minutes.  Which is 3 times faster than in Travis.

.travis folder renamed to .ci to highlight that it used not only for
Travis CI.  Travis CI support will be reduced to only test ARM builds
soon and will be completely removed when travis-ci.org will be turned
into read-only mode.

What happened to Travis CI:
https://mail.openvswitch.org/pipermail/ovs-dev/2020-November/377773.html

Acked-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
14 files changed:
.ci/linux-build.sh [new file with mode: 0755]
.ci/linux-prepare.sh [new file with mode: 0755]
.ci/osx-build.sh [new file with mode: 0755]
.ci/osx-prepare.sh [new file with mode: 0755]
.github/workflows/build-and-test.yml [new file with mode: 0644]
.travis.yml
.travis/linux-build.sh [deleted file]
.travis/linux-prepare.sh [deleted file]
.travis/osx-build.sh [deleted file]
.travis/osx-prepare.sh [deleted file]
Documentation/internals/contributing/submitting-patches.rst
Makefile.am
NEWS
README.rst

diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
new file mode 100755 (executable)
index 0000000..16102ac
--- /dev/null
@@ -0,0 +1,247 @@
+#!/bin/bash
+
+set -o errexit
+set -x
+
+CFLAGS_FOR_OVS="-g -O2"
+SPARSE_FLAGS=""
+EXTRA_OPTS="--enable-Werror"
+
+function install_kernel()
+{
+    if [[ "$1" =~ ^5.* ]]; then
+        PREFIX="v5.x"
+    elif [[ "$1" =~ ^4.* ]]; then
+        PREFIX="v4.x"
+    elif [[ "$1" =~ ^3.* ]]; then
+        PREFIX="v3.x"
+    else
+        PREFIX="v2.6/longterm/v2.6.32"
+    fi
+
+    base_url="https://cdn.kernel.org/pub/linux/kernel/${PREFIX}"
+    # Download page with list of all available kernel versions.
+    wget ${base_url}/
+    # Uncompress in case server returned gzipped page.
+    (file index* | grep ASCII) || (mv index* index.new.gz && gunzip index*)
+    # Get version of the latest stable release.
+    hi_ver=$(echo ${1} | sed 's/\./\\\./')
+    lo_ver=$(cat ./index* | grep -P -o "${hi_ver}\.[0-9]+" | \
+             sed 's/.*\..*\.\(.*\)/\1/' | sort -h | tail -1)
+    version="${1}.${lo_ver}"
+
+    rm -rf index* linux-*
+
+    url="${base_url}/linux-${version}.tar.xz"
+    # Download kernel sources. Try direct link on CDN failure.
+    wget ${url} ||
+    (rm -f linux-${version}.tar.xz && wget ${url}) ||
+    (rm -f linux-${version}.tar.xz && wget ${url/cdn/www})
+
+    tar xvf linux-${version}.tar.xz > /dev/null
+    pushd linux-${version}
+    make allmodconfig
+
+    # Cannot use CONFIG_KCOV: -fsanitize-coverage=trace-pc is not supported by compiler
+    sed -i 's/CONFIG_KCOV=y/CONFIG_KCOV=n/' .config
+
+    # stack validation depends on tools/objtool, but objtool does not compile on travis.
+    # It is giving following error.
+    #  >>> GEN      arch/x86/insn/inat-tables.c
+    #  >>> Semantic error at 40: Unknown imm opnd: AL
+    # So for now disable stack-validation for the build.
+
+    sed -i 's/CONFIG_STACK_VALIDATION=y/CONFIG_STACK_VALIDATION=n/' .config
+    make oldconfig
+
+    # Older kernels do not include openvswitch
+    if [ -d "net/openvswitch" ]; then
+        make net/openvswitch/
+    else
+        make net/bridge/
+    fi
+
+    if [ "$AFXDP" ]; then
+        sudo make headers_install INSTALL_HDR_PATH=/usr
+        pushd tools/lib/bpf/
+        # Bulding with gcc because there are some issues in make files
+        # that breaks building libbpf with clang on Travis.
+        CC=gcc sudo make install
+        CC=gcc sudo make install_headers
+        sudo ldconfig
+        popd
+        # The Linux kernel defines __always_inline in stddef.h (283d7573), and
+        # sys/cdefs.h tries to re-define it.  Older libc-dev package in xenial
+        # doesn't have a fix for this issue.  Applying it manually.
+        sudo sed -i '/^# define __always_inline .*/i # undef __always_inline' \
+                    /usr/include/x86_64-linux-gnu/sys/cdefs.h || true
+        EXTRA_OPTS="${EXTRA_OPTS} --enable-afxdp"
+    else
+        EXTRA_OPTS="${EXTRA_OPTS} --with-linux=$(pwd)"
+        echo "Installed kernel source in $(pwd)"
+    fi
+    popd
+}
+
+function install_dpdk()
+{
+    local DPDK_VER=$1
+    local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
+
+    if [ -z "$TRAVIS_ARCH" ] ||
+       [ "$TRAVIS_ARCH" == "amd64" ]; then
+        TARGET="x86_64-native-linuxapp-gcc"
+    elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
+        TARGET="arm64-armv8a-linuxapp-gcc"
+    else
+        echo "Target is unknown"
+        exit 1
+    fi
+
+    if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
+        # Avoid using cache for git tree build.
+        rm -rf dpdk-dir
+
+        DPDK_GIT=${DPDK_GIT:-https://dpdk.org/git/dpdk}
+        git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
+        pushd dpdk-dir
+        git log -1 --oneline
+    else
+        if [ -f "${VERSION_FILE}" ]; then
+            VER=$(cat ${VERSION_FILE})
+            if [ "${VER}" = "${DPDK_VER}" ]; then
+                EXTRA_OPTS="${EXTRA_OPTS} --with-dpdk=$(pwd)/dpdk-dir/build"
+                echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-dir"
+                return
+            fi
+        fi
+        # No cache or version mismatch.
+        rm -rf dpdk-dir
+        wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
+        tar xvf dpdk-$1.tar.xz > /dev/null
+        DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
+        mv ${DIR_NAME} dpdk-dir
+        pushd dpdk-dir
+    fi
+
+    make config CC=gcc T=$TARGET
+
+    if [ "$DPDK_SHARED" ]; then
+        sed -i '/CONFIG_RTE_BUILD_SHARED_LIB=n/s/=n/=y/' build/.config
+        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$TARGET/lib
+    fi
+
+    # Disable building DPDK kernel modules. Not needed for OVS build or tests.
+    sed -i '/CONFIG_RTE_EAL_IGB_UIO=y/s/=y/=n/' build/.config
+    sed -i '/CONFIG_RTE_KNI_KMOD=y/s/=y/=n/' build/.config
+
+    # Switching to 'default' machine to make dpdk-dir cache usable on different
+    # CPUs.  We can't be sure that all CI machines are exactly same.
+    sed -i '/CONFIG_RTE_MACHINE="native"/s/="native"/="default"/' build/.config
+
+    make -j4 CC=gcc EXTRA_CFLAGS='-fPIC'
+    EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/build"
+    echo "Installed DPDK source in $(pwd)"
+    popd
+    echo "${DPDK_VER}" > ${VERSION_FILE}
+}
+
+function configure_ovs()
+{
+    ./boot.sh
+    ./configure CFLAGS="${CFLAGS_FOR_OVS}" $* || { cat config.log; exit 1; }
+}
+
+function build_ovs()
+{
+    local KERNEL=$1
+
+    configure_ovs $OPTS
+    make selinux-policy
+
+    # Only build datapath if we are testing kernel w/o running testsuite and
+    # AF_XDP support.
+    if [ "${KERNEL}" ] && ! [ "$AFXDP" ]; then
+        pushd datapath
+        make -j4
+        popd
+    else
+        make -j4 || { cat config.log; exit 1; }
+    fi
+}
+
+if [ "$DEB_PACKAGE" ]; then
+    mk-build-deps --install --root-cmd sudo --remove debian/control
+    dpkg-checkbuilddeps
+    DEB_BUILD_OPTIONS='parallel=4 nocheck' fakeroot debian/rules binary
+    # Not trying to install ipsec package as there are issues with system-wide
+    # installed python3-openvswitch package and the pyenv used by Travis.
+    packages=$(ls $(pwd)/../*.deb | grep -v ipsec)
+    sudo apt install ${packages}
+    exit 0
+fi
+
+if [ "$KERNEL" ]; then
+    install_kernel $KERNEL
+fi
+
+if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
+    if [ -z "$DPDK_VER" ]; then
+        DPDK_VER="19.11.2"
+    fi
+    install_dpdk $DPDK_VER
+    if [ "$CC" = "clang" ]; then
+        # Disregard cast alignment errors until DPDK is fixed
+        CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-cast-align"
+    fi
+fi
+
+if [ "$CC" = "clang" ]; then
+    CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-error=unused-command-line-argument"
+elif [ "$M32" ]; then
+    # Not using sparse for 32bit builds on 64bit machine.
+    # Adding m32 flag directly to CC to avoid any posiible issues with API/ABI
+    # difference on 'configure' and 'make' stages.
+    export CC="$CC -m32"
+elif [ "$TRAVIS_ARCH" != "aarch64" ]; then
+    OPTS="--enable-sparse"
+    if [ "$AFXDP" ]; then
+        # netdev-afxdp uses memset for 64M for umem initialization.
+        SPARSE_FLAGS="${SPARSE_FLAGS} -Wno-memcpy-max-count"
+    fi
+    CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} ${SPARSE_FLAGS}"
+fi
+
+save_OPTS="${OPTS} $*"
+OPTS="${EXTRA_OPTS} ${save_OPTS}"
+
+if [ "$TESTSUITE" ]; then
+    # 'distcheck' will reconfigure with required options.
+    # Now we only need to prepare the Makefile without sparse-wrapped CC.
+    configure_ovs
+
+    export DISTCHECK_CONFIGURE_FLAGS="$OPTS"
+    if ! make distcheck CFLAGS="${CFLAGS_FOR_OVS}" \
+         TESTSUITEFLAGS=-j4 RECHECK=yes; then
+        # testsuite.log is necessary for debugging.
+        cat */_build/sub/tests/testsuite.log
+        exit 1
+    fi
+else
+    if [ -z "${KERNEL_LIST}" ]; then build_ovs ${KERNEL};
+    else
+        save_EXTRA_OPTS="${EXTRA_OPTS}"
+        for KERNEL in ${KERNEL_LIST}; do
+            echo "=============================="
+            echo "Building with kernel ${KERNEL}"
+            echo "=============================="
+            EXTRA_OPTS="${save_EXTRA_OPTS}"
+            install_kernel ${KERNEL}
+            OPTS="${EXTRA_OPTS} ${save_OPTS}"
+            build_ovs ${KERNEL}
+            make distclean
+        done
+    fi
+fi
+
+exit 0
diff --git a/.ci/linux-prepare.sh b/.ci/linux-prepare.sh
new file mode 100755 (executable)
index 0000000..fea905a
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+set -ev
+
+if [ "$DEB_PACKAGE" ]; then
+    # We're not using sparse for debian packages, tests are skipped and
+    # all extra dependencies tracked by mk-build-deps.
+    exit 0
+fi
+
+# Build and install sparse.
+#
+# Explicitly disable sparse support for llvm because some travis
+# environments claim to have LLVM (llvm-config exists and works) but
+# linking against it fails.
+# Disabling sqlite support because sindex build fails and we don't
+# really need this utility being installed.
+git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git
+cd sparse
+make -j4 HAVE_LLVM= HAVE_SQLITE= install
+cd ..
+
+pip3 install --disable-pip-version-check --user flake8 hacking
+pip3 install --user --upgrade docutils
+
+if [ "$M32" ]; then
+    # Installing 32-bit libraries.
+    pkgs="gcc-multilib"
+    if [ -z "$GITHUB_WORKFLOW" ]; then
+        # 32-bit and 64-bit libunwind can not be installed at the same time.
+        # This will remove the 64-bit libunwind and install 32-bit version.
+        # GitHub Actions doesn't have 32-bit versions of these libs.
+        pkgs=$pkgs" libunwind-dev:i386 libunbound-dev:i386"
+    fi
+
+    sudo apt-get install -y $pkgs
+fi
+
+# IPv6 is supported by kernel but disabled in TravisCI images:
+#   https://github.com/travis-ci/travis-ci/issues/8891
+# Enable it to avoid skipping of IPv6 related tests.
+sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
diff --git a/.ci/osx-build.sh b/.ci/osx-build.sh
new file mode 100755 (executable)
index 0000000..bf2c13f
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+set -o errexit
+
+CFLAGS="-Werror $CFLAGS"
+EXTRA_OPTS=""
+
+function configure_ovs()
+{
+    ./boot.sh && ./configure $*
+}
+
+configure_ovs $EXTRA_OPTS $*
+
+if [ "$CC" = "clang" ]; then
+    set make CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument"
+else
+    set make CFLAGS="$CFLAGS $BUILD_ENV"
+fi
+if ! "$@"; then
+    cat config.log
+    exit 1
+fi
+if [ "$TESTSUITE" ] && [ "$CC" != "clang" ]; then
+    if ! make distcheck RECHECK=yes; then
+        # testsuite.log is necessary for debugging.
+        cat */_build/sub/tests/testsuite.log
+        exit 1
+    fi
+fi
+
+exit 0
diff --git a/.ci/osx-prepare.sh b/.ci/osx-prepare.sh
new file mode 100755 (executable)
index 0000000..b6447ab
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -ev
+pip3 install --user --upgrade docutils
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
new file mode 100644 (file)
index 0000000..847fd31
--- /dev/null
@@ -0,0 +1,203 @@
+name: Build and Test
+
+on: [push, pull_request]
+
+jobs:
+  build-linux:
+    env:
+      dependencies: |
+        automake libtool gcc bc libjemalloc1 libjemalloc-dev    \
+        libssl-dev llvm-dev libelf-dev libnuma-dev libpcap-dev  \
+        python3-openssl python3-pip python3-sphinx              \
+        selinux-policy-dev
+      deb_dependencies: |
+        linux-headers-$(uname -r) build-essential fakeroot devscripts equivs
+      AFXDP:       ${{ matrix.afxdp }}
+      CC:          ${{ matrix.compiler }}
+      DEB_PACKAGE: ${{ matrix.deb_package }}
+      DPDK:        ${{ matrix.dpdk }}
+      DPDK_SHARED: ${{ matrix.dpdk_shared }}
+      KERNEL:      ${{ matrix.kernel }}
+      KERNEL_LIST: ${{ matrix.kernel_list }}
+      LIBS:        ${{ matrix.libs }}
+      M32:         ${{ matrix.m32 }}
+      OPTS:        ${{ matrix.opts }}
+      TESTSUITE:   ${{ matrix.testsuite }}
+
+    name: linux ${{ join(matrix.*, ' ') }}
+    runs-on: ubuntu-18.04
+    timeout-minutes: 30
+
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - compiler:     gcc
+            opts:         --disable-ssl
+          - compiler:     clang
+            opts:         --disable-ssl
+
+          - compiler:     gcc
+            testsuite:    test
+            kernel:       3.16
+          - compiler:     clang
+            testsuite:    test
+            kernel:       3.16
+
+          - compiler:     gcc
+            testsuite:    test
+            opts:         --enable-shared
+          - compiler:     clang
+            testsuite:    test
+            opts:         --enable-shared
+
+          - compiler:     gcc
+            testsuite:    test
+            dpdk:         dpdk
+          - compiler:     clang
+            testsuite:    test
+            dpdk:         dpdk
+
+          - compiler:     gcc
+            testsuite:    test
+            libs:         -ljemalloc
+          - compiler:     clang
+            testsuite:    test
+            libs:         -ljemalloc
+
+          - compiler:     gcc
+            kernel_list:  5.8 5.5 5.4 4.19
+          - compiler:     clang
+            kernel_list:  5.8 5.5 5.4 4.19
+
+          - compiler:     gcc
+            kernel_list:  4.14 4.9 4.4 3.16
+          - compiler:     clang
+            kernel_list:  4.14 4.9 4.4 3.16
+
+          - compiler:     gcc
+            afxdp:        afxdp
+            kernel:       5.3
+          - compiler:     clang
+            afxdp:        afxdp
+            kernel:       5.3
+
+          - compiler:     gcc
+            dpdk:         dpdk
+            opts:         --enable-shared
+          - compiler:     clang
+            dpdk:         dpdk
+            opts:         --enable-shared
+
+          - compiler:     gcc
+            dpdk_shared:  dpdk-shared
+          - compiler:     clang
+            dpdk_shared:  dpdk-shared
+
+          - compiler:     gcc
+            dpdk_shared:  dpdk-shared
+            opts:         --enable-shared
+          - compiler:     clang
+            dpdk_shared:  dpdk-shared
+            opts:         --enable-shared
+
+          - compiler:     gcc
+            m32:          m32
+            opts:         --disable-ssl
+
+          - compiler:     gcc
+            deb_package:  deb
+
+    steps:
+    - name: checkout
+      uses: actions/checkout@v2
+
+    - name: create ci signature file for the dpdk cache key
+      if:   matrix.dpdk != '' || matrix.dpdk_shared != ''
+      # This will collect most of DPDK related lines, so hash will be different
+      # if something changed in a way we're building DPDK including DPDK_VER.
+      # This also allows us to use cache from any branch as long as version
+      # and a way we're building DPDK stays the same.
+      run:  |
+        grep -irE 'RTE_|DPDK|meson|ninja' -r .ci/ > dpdk-ci-signature
+        cat dpdk-ci-signature
+
+    - name: cache
+      if:   matrix.dpdk != '' || matrix.dpdk_shared != ''
+      uses: actions/cache@v2
+      env:
+        matrix_key: ${{ matrix.dpdk }}${{ matrix.dpdk_shared }}
+        ci_key:     ${{ hashFiles('dpdk-ci-signature') }}
+      with:
+        path: dpdk-dir
+        key:  ${{ env.matrix_key }}-${{ env.ci_key }}
+
+    - name: install common dependencies
+      if:   matrix.deb_package == ''
+      run:  sudo apt install -y ${{ env.dependencies }}
+    - name: install dependencies for debian packages
+      if:   matrix.deb_package != ''
+      run:  sudo apt install -y ${{ env.deb_dependencies }}
+    - name: install libunbound libunwind
+      if:   matrix.m32 == ''
+      run:  sudo apt install -y libunbound-dev libunwind-dev
+
+    - name: prepare
+      run:  ./.ci/linux-prepare.sh
+
+    - name: build
+      run:  PATH="$PATH:$HOME/bin" ./.ci/linux-build.sh
+
+    - name: upload deb packages
+      if:   matrix.deb_package != ''
+      uses: actions/upload-artifact@v2
+      with:
+        name: deb-packages
+        path: '/home/runner/work/ovs/*.deb'
+
+    - name: copy logs on failure
+      if: failure() || cancelled()
+      run: |
+        # upload-artifact@v2 throws exceptions if it tries to upload socket
+        # files and we could have some socket files in testsuite.dir.
+        # Also, upload-artifact@v2 doesn't work well enough with wildcards.
+        # So, we're just archiving everything here to avoid any issues.
+        mkdir logs
+        cp config.log ./logs/
+        cp -r ./*/_build/sub/tests/testsuite.* ./logs/ || true
+        tar -czvf logs.tgz logs/
+
+    - name: upload logs on failure
+      if: failure() || cancelled()
+      uses: actions/upload-artifact@v2
+      with:
+        name: logs-linux-${{ join(matrix.*, '-') }}
+        path: logs.tgz
+
+  build-osx:
+    env:
+      CC:    clang
+      OPTS:  --disable-ssl
+
+    name:    osx clang --disable-ssl
+    runs-on: macos-latest
+    timeout-minutes: 30
+
+    strategy:
+      fail-fast: false
+
+    steps:
+    - name: checkout
+      uses: actions/checkout@v2
+    - name: install dependencies
+      run:  brew install automake libtool
+    - name: prepare
+      run:  ./.ci/osx-prepare.sh
+    - name: build
+      run:  PATH="$PATH:$HOME/bin" ./.ci/osx-build.sh
+    - name: upload logs on failure
+      if: failure()
+      uses: actions/upload-artifact@v2
+      with:
+        name: logs-osx-clang---disable-ssl
+        path: config.log
index 9fd8bbe01680e5a18b04f7903f52e9fb9c37bc2c..34ef16aa77b9c2c42e5d4ea25780aa864accdb9c 100644 (file)
@@ -28,7 +28,7 @@ addons:
       - libunbound-dev
       - libunwind-dev
 
-before_install: ./.travis/${TRAVIS_OS_NAME}-prepare.sh
+before_install: ./.ci/${TRAVIS_OS_NAME}-prepare.sh
 
 before_script: export PATH=$PATH:$HOME/bin
 
@@ -76,7 +76,7 @@ matrix:
             - devscripts
             - equivs
 
-script: ./.travis/${TRAVIS_OS_NAME}-build.sh $OPTS
+script: ./.ci/${TRAVIS_OS_NAME}-build.sh $OPTS
 
 notifications:
   email:
diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
deleted file mode 100755 (executable)
index 16102ac..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-#!/bin/bash
-
-set -o errexit
-set -x
-
-CFLAGS_FOR_OVS="-g -O2"
-SPARSE_FLAGS=""
-EXTRA_OPTS="--enable-Werror"
-
-function install_kernel()
-{
-    if [[ "$1" =~ ^5.* ]]; then
-        PREFIX="v5.x"
-    elif [[ "$1" =~ ^4.* ]]; then
-        PREFIX="v4.x"
-    elif [[ "$1" =~ ^3.* ]]; then
-        PREFIX="v3.x"
-    else
-        PREFIX="v2.6/longterm/v2.6.32"
-    fi
-
-    base_url="https://cdn.kernel.org/pub/linux/kernel/${PREFIX}"
-    # Download page with list of all available kernel versions.
-    wget ${base_url}/
-    # Uncompress in case server returned gzipped page.
-    (file index* | grep ASCII) || (mv index* index.new.gz && gunzip index*)
-    # Get version of the latest stable release.
-    hi_ver=$(echo ${1} | sed 's/\./\\\./')
-    lo_ver=$(cat ./index* | grep -P -o "${hi_ver}\.[0-9]+" | \
-             sed 's/.*\..*\.\(.*\)/\1/' | sort -h | tail -1)
-    version="${1}.${lo_ver}"
-
-    rm -rf index* linux-*
-
-    url="${base_url}/linux-${version}.tar.xz"
-    # Download kernel sources. Try direct link on CDN failure.
-    wget ${url} ||
-    (rm -f linux-${version}.tar.xz && wget ${url}) ||
-    (rm -f linux-${version}.tar.xz && wget ${url/cdn/www})
-
-    tar xvf linux-${version}.tar.xz > /dev/null
-    pushd linux-${version}
-    make allmodconfig
-
-    # Cannot use CONFIG_KCOV: -fsanitize-coverage=trace-pc is not supported by compiler
-    sed -i 's/CONFIG_KCOV=y/CONFIG_KCOV=n/' .config
-
-    # stack validation depends on tools/objtool, but objtool does not compile on travis.
-    # It is giving following error.
-    #  >>> GEN      arch/x86/insn/inat-tables.c
-    #  >>> Semantic error at 40: Unknown imm opnd: AL
-    # So for now disable stack-validation for the build.
-
-    sed -i 's/CONFIG_STACK_VALIDATION=y/CONFIG_STACK_VALIDATION=n/' .config
-    make oldconfig
-
-    # Older kernels do not include openvswitch
-    if [ -d "net/openvswitch" ]; then
-        make net/openvswitch/
-    else
-        make net/bridge/
-    fi
-
-    if [ "$AFXDP" ]; then
-        sudo make headers_install INSTALL_HDR_PATH=/usr
-        pushd tools/lib/bpf/
-        # Bulding with gcc because there are some issues in make files
-        # that breaks building libbpf with clang on Travis.
-        CC=gcc sudo make install
-        CC=gcc sudo make install_headers
-        sudo ldconfig
-        popd
-        # The Linux kernel defines __always_inline in stddef.h (283d7573), and
-        # sys/cdefs.h tries to re-define it.  Older libc-dev package in xenial
-        # doesn't have a fix for this issue.  Applying it manually.
-        sudo sed -i '/^# define __always_inline .*/i # undef __always_inline' \
-                    /usr/include/x86_64-linux-gnu/sys/cdefs.h || true
-        EXTRA_OPTS="${EXTRA_OPTS} --enable-afxdp"
-    else
-        EXTRA_OPTS="${EXTRA_OPTS} --with-linux=$(pwd)"
-        echo "Installed kernel source in $(pwd)"
-    fi
-    popd
-}
-
-function install_dpdk()
-{
-    local DPDK_VER=$1
-    local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
-
-    if [ -z "$TRAVIS_ARCH" ] ||
-       [ "$TRAVIS_ARCH" == "amd64" ]; then
-        TARGET="x86_64-native-linuxapp-gcc"
-    elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
-        TARGET="arm64-armv8a-linuxapp-gcc"
-    else
-        echo "Target is unknown"
-        exit 1
-    fi
-
-    if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
-        # Avoid using cache for git tree build.
-        rm -rf dpdk-dir
-
-        DPDK_GIT=${DPDK_GIT:-https://dpdk.org/git/dpdk}
-        git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
-        pushd dpdk-dir
-        git log -1 --oneline
-    else
-        if [ -f "${VERSION_FILE}" ]; then
-            VER=$(cat ${VERSION_FILE})
-            if [ "${VER}" = "${DPDK_VER}" ]; then
-                EXTRA_OPTS="${EXTRA_OPTS} --with-dpdk=$(pwd)/dpdk-dir/build"
-                echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-dir"
-                return
-            fi
-        fi
-        # No cache or version mismatch.
-        rm -rf dpdk-dir
-        wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
-        tar xvf dpdk-$1.tar.xz > /dev/null
-        DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
-        mv ${DIR_NAME} dpdk-dir
-        pushd dpdk-dir
-    fi
-
-    make config CC=gcc T=$TARGET
-
-    if [ "$DPDK_SHARED" ]; then
-        sed -i '/CONFIG_RTE_BUILD_SHARED_LIB=n/s/=n/=y/' build/.config
-        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$TARGET/lib
-    fi
-
-    # Disable building DPDK kernel modules. Not needed for OVS build or tests.
-    sed -i '/CONFIG_RTE_EAL_IGB_UIO=y/s/=y/=n/' build/.config
-    sed -i '/CONFIG_RTE_KNI_KMOD=y/s/=y/=n/' build/.config
-
-    # Switching to 'default' machine to make dpdk-dir cache usable on different
-    # CPUs.  We can't be sure that all CI machines are exactly same.
-    sed -i '/CONFIG_RTE_MACHINE="native"/s/="native"/="default"/' build/.config
-
-    make -j4 CC=gcc EXTRA_CFLAGS='-fPIC'
-    EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/build"
-    echo "Installed DPDK source in $(pwd)"
-    popd
-    echo "${DPDK_VER}" > ${VERSION_FILE}
-}
-
-function configure_ovs()
-{
-    ./boot.sh
-    ./configure CFLAGS="${CFLAGS_FOR_OVS}" $* || { cat config.log; exit 1; }
-}
-
-function build_ovs()
-{
-    local KERNEL=$1
-
-    configure_ovs $OPTS
-    make selinux-policy
-
-    # Only build datapath if we are testing kernel w/o running testsuite and
-    # AF_XDP support.
-    if [ "${KERNEL}" ] && ! [ "$AFXDP" ]; then
-        pushd datapath
-        make -j4
-        popd
-    else
-        make -j4 || { cat config.log; exit 1; }
-    fi
-}
-
-if [ "$DEB_PACKAGE" ]; then
-    mk-build-deps --install --root-cmd sudo --remove debian/control
-    dpkg-checkbuilddeps
-    DEB_BUILD_OPTIONS='parallel=4 nocheck' fakeroot debian/rules binary
-    # Not trying to install ipsec package as there are issues with system-wide
-    # installed python3-openvswitch package and the pyenv used by Travis.
-    packages=$(ls $(pwd)/../*.deb | grep -v ipsec)
-    sudo apt install ${packages}
-    exit 0
-fi
-
-if [ "$KERNEL" ]; then
-    install_kernel $KERNEL
-fi
-
-if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
-    if [ -z "$DPDK_VER" ]; then
-        DPDK_VER="19.11.2"
-    fi
-    install_dpdk $DPDK_VER
-    if [ "$CC" = "clang" ]; then
-        # Disregard cast alignment errors until DPDK is fixed
-        CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-cast-align"
-    fi
-fi
-
-if [ "$CC" = "clang" ]; then
-    CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} -Wno-error=unused-command-line-argument"
-elif [ "$M32" ]; then
-    # Not using sparse for 32bit builds on 64bit machine.
-    # Adding m32 flag directly to CC to avoid any posiible issues with API/ABI
-    # difference on 'configure' and 'make' stages.
-    export CC="$CC -m32"
-elif [ "$TRAVIS_ARCH" != "aarch64" ]; then
-    OPTS="--enable-sparse"
-    if [ "$AFXDP" ]; then
-        # netdev-afxdp uses memset for 64M for umem initialization.
-        SPARSE_FLAGS="${SPARSE_FLAGS} -Wno-memcpy-max-count"
-    fi
-    CFLAGS_FOR_OVS="${CFLAGS_FOR_OVS} ${SPARSE_FLAGS}"
-fi
-
-save_OPTS="${OPTS} $*"
-OPTS="${EXTRA_OPTS} ${save_OPTS}"
-
-if [ "$TESTSUITE" ]; then
-    # 'distcheck' will reconfigure with required options.
-    # Now we only need to prepare the Makefile without sparse-wrapped CC.
-    configure_ovs
-
-    export DISTCHECK_CONFIGURE_FLAGS="$OPTS"
-    if ! make distcheck CFLAGS="${CFLAGS_FOR_OVS}" \
-         TESTSUITEFLAGS=-j4 RECHECK=yes; then
-        # testsuite.log is necessary for debugging.
-        cat */_build/sub/tests/testsuite.log
-        exit 1
-    fi
-else
-    if [ -z "${KERNEL_LIST}" ]; then build_ovs ${KERNEL};
-    else
-        save_EXTRA_OPTS="${EXTRA_OPTS}"
-        for KERNEL in ${KERNEL_LIST}; do
-            echo "=============================="
-            echo "Building with kernel ${KERNEL}"
-            echo "=============================="
-            EXTRA_OPTS="${save_EXTRA_OPTS}"
-            install_kernel ${KERNEL}
-            OPTS="${EXTRA_OPTS} ${save_OPTS}"
-            build_ovs ${KERNEL}
-            make distclean
-        done
-    fi
-fi
-
-exit 0
diff --git a/.travis/linux-prepare.sh b/.travis/linux-prepare.sh
deleted file mode 100755 (executable)
index 71eb347..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-
-set -ev
-
-if [ "$DEB_PACKAGE" ]; then
-    # We're not using sparse for debian packages, tests are skipped and
-    # all extra dependencies tracked by mk-build-deps.
-    exit 0
-fi
-
-# Build and install sparse.
-#
-# Explicitly disable sparse support for llvm because some travis
-# environments claim to have LLVM (llvm-config exists and works) but
-# linking against it fails.
-# Disabling sqlite support because sindex build fails and we don't
-# really need this utility being installed.
-git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git
-cd sparse
-make -j4 HAVE_LLVM= HAVE_SQLITE= install
-cd ..
-
-pip3 install --disable-pip-version-check --user flake8 hacking
-pip3 install --user --upgrade docutils
-
-if [ "$M32" ]; then
-    # Installing 32-bit libraries.
-    # 32-bit and 64-bit libunwind can not be installed at the same time.
-    # This will remove the 64-bit libunwind and install 32-bit version.
-    sudo apt-get install -y \
-        libunwind-dev:i386 libunbound-dev:i386 gcc-multilib
-fi
-
-# IPv6 is supported by kernel but disabled in TravisCI images:
-#   https://github.com/travis-ci/travis-ci/issues/8891
-# Enable it to avoid skipping of IPv6 related tests.
-sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
diff --git a/.travis/osx-build.sh b/.travis/osx-build.sh
deleted file mode 100755 (executable)
index bf2c13f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-set -o errexit
-
-CFLAGS="-Werror $CFLAGS"
-EXTRA_OPTS=""
-
-function configure_ovs()
-{
-    ./boot.sh && ./configure $*
-}
-
-configure_ovs $EXTRA_OPTS $*
-
-if [ "$CC" = "clang" ]; then
-    set make CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument"
-else
-    set make CFLAGS="$CFLAGS $BUILD_ENV"
-fi
-if ! "$@"; then
-    cat config.log
-    exit 1
-fi
-if [ "$TESTSUITE" ] && [ "$CC" != "clang" ]; then
-    if ! make distcheck RECHECK=yes; then
-        # testsuite.log is necessary for debugging.
-        cat */_build/sub/tests/testsuite.log
-        exit 1
-    fi
-fi
-
-exit 0
diff --git a/.travis/osx-prepare.sh b/.travis/osx-prepare.sh
deleted file mode 100755 (executable)
index b6447ab..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-set -ev
-pip3 install --user --upgrade docutils
index 5a314cc60aa7ab4aacf6cf0f838ff7932c827226..4a6780371d4156c77c326f137d38792ffce138ca 100644 (file)
@@ -68,11 +68,10 @@ Testing is also important:
   feature.  A bug fix patch should preferably add a test that would
   fail if the bug recurs.
 
-If you are using GitHub, then you may utilize the travis-ci.org CI build system
-by linking your GitHub repository to it. This will run some of the above tests
-automatically when you push changes to your repository.  See the "Continuous
-Integration with Travis-CI" in :doc:`/topics/testing` for details on how to set
-it up.
+If you are using GitHub, then you may utilize the travis-ci.org and the GitHub
+Actions CI build systems.  They will run some of the above tests automatically
+when you push changes to your repository.  See the "Continuous Integration with
+Travis-CI" in :doc:`/topics/testing` for details on how to set it up.
 
 Email Subject
 -------------
index a3fbb15e2ec8cc93da5da6f0c8560010972e869f..691a005ad9776fbaf902fbebf45e8188cce0c302 100644 (file)
@@ -76,12 +76,13 @@ EXTRA_DIST = \
        MAINTAINERS.rst \
        README.rst \
        NOTICE \
+       .ci/linux-build.sh \
+       .ci/linux-prepare.sh \
+       .ci/osx-build.sh \
+       .ci/osx-prepare.sh \
        .cirrus.yml \
+       .github/workflows/build-and-test.yml \
        .travis.yml \
-       .travis/linux-build.sh \
-       .travis/linux-prepare.sh \
-       .travis/osx-build.sh \
-       .travis/osx-prepare.sh \
        appveyor.yml \
        boot.sh \
        poc/builders/Vagrantfile \
diff --git a/NEWS b/NEWS
index 1855558489c62c52d9220a57790980d7d7657e04..7e291a1805bcd3e3c4cfe35df5b68cd9096db82e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,8 @@ Post-v2.14.0
        "secondary", respectively, for OpenFlow connection roles.
      * The term "slave" has been replaced by "member", for bonds, LACP, and
        OpenFlow bundle actions.
+   - Support for GitHub Actions based continuous integration builds has been
+     added.
 
 
 v2.14.0 - 17 Aug 2020
index e06ddf2671d74a0f839ddf3282fa4e513b456ed9..319f705154985833086bc11427a57b43217d6272 100644 (file)
@@ -6,6 +6,8 @@
 Open vSwitch
 ============
 
+.. image:: https://github.com/openvswitch/ovs/workflows/Build%20and%20Test/badge.svg
+    :target: https://github.com/openvswitch/ovs/actions
 .. image:: https://travis-ci.org/openvswitch/ovs.png
     :target: https://travis-ci.org/openvswitch/ovs
 .. image:: https://ci.appveyor.com/api/projects/status/github/openvswitch/ovs?branch=master&svg=true&retina=true