[ovs-dev] [PATCH ovn v3] CI: Add github actions workflow.

Mark Michelson mmichels at redhat.com
Wed Dec 2 00:56:21 UTC 2020


Acked-by: Mark Michelson <mmichels at redhat.com>

There are definitely some enhancements/changes this could use, but I 
think this makes for a perfectly fine first effort. With this, github 
will build and run tests, failures are detected properly, and you can 
find the details of the failures by navigating to the github actions.

I think the biggest immediate change that should be made as a second 
step is to upload the `make distcheck` output as an artifact. But 
there's no reason that it needs to be made immediately as part of this 
change.

On 11/27/20 2:29 AM, numans at ovn.org wrote:
> From: Numan Siddique <numans at ovn.org>
> 
> This patch adds basic github actions to build and run OVN tests.
> The test matrix is a slightly reduced version of current travis matrix.
> We don't need to run OVN with multiple kernel versions.
> 
> This patch also removes the .travis.yml file as there is little value
> in running the same tests in travis CI, given that travis-ci.org will
> be turned into read-only mode. More information on this can be found
> here [1].
> 
> We can further enhance the github actions to run ovn-kubernetes
> end-to-end tests.
> 
> Thanks to Ilya, much of the github actions code is taken from Ilya's OVS
> github action patch [2].
> 
> [1] - https://github.com/numansiddique/ovn/runs/1457594086
> [2] - https://patchwork.ozlabs.org/project/openvswitch/patch/20201125145753.534447-3-i.maximets@ovn.org/
> Co-authored-by: Ilya Maximets <i.maximets at ovn.org>
> Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
> Signed-off-by: Numan Siddique <numans at ovn.org>
> ---
> 
> Here is how it looks like:
>    https://github.com/numansiddique/ovn/runs/1462480259
> 
> Antonio Ojea <aojea at redhat.com> has submitted a PR - https://github.com/ovn-org/ovn/pull/61
> to run ovn-k8s end-to-end tests using github actions a while back. That PR
> needs some polishing. I will be submitting that for review once it is
> ready.
> 
> 
> v2 -> v3
> ---
>   * Addressed review comments from Ilya
>       - for the m32 build
>       - added the tasks to collect logs.
> 
> v1 -> v2
> ----
>    * Addressed review comments from Ilya.
> 
>   {.travis => .ci}/linux-build.sh   |  18 ++---
>   {.travis => .ci}/linux-prepare.sh |   0
>   {.travis => .ci}/osx-build.sh     |   0
>   {.travis => .ci}/osx-prepare.sh   |   0
>   .github/workflows/test.yml        | 113 ++++++++++++++++++++++++++++++
>   .travis.yml                       |  47 -------------
>   Makefile.am                       |  10 +--
>   7 files changed, 128 insertions(+), 60 deletions(-)
>   rename {.travis => .ci}/linux-build.sh (74%)
>   rename {.travis => .ci}/linux-prepare.sh (100%)
>   rename {.travis => .ci}/osx-build.sh (100%)
>   rename {.travis => .ci}/osx-prepare.sh (100%)
>   create mode 100644 .github/workflows/test.yml
>   delete mode 100644 .travis.yml
> 
> diff --git a/.travis/linux-build.sh b/.ci/linux-build.sh
> similarity index 74%
> rename from .travis/linux-build.sh
> rename to .ci/linux-build.sh
> index a8a561dc4e..0e9f87fa8b 100755
> --- a/.travis/linux-build.sh
> +++ b/.ci/linux-build.sh
> @@ -3,10 +3,9 @@
>   set -o errexit
>   set -x
>   
> -CFLAGS="-Werror"
> +CFLAGS=""
>   SPARSE_FLAGS=""
> -EXTRA_OPTS=""
> -TARGET="x86_64-native-linuxapp-gcc"
> +EXTRA_OPTS="--enable-Werror"
>   
>   function configure_ovs()
>   {
> @@ -24,16 +23,19 @@ function configure_ovn()
>       { cat config.log; exit 1; }
>   }
>   
> -OPTS="$EXTRA_OPTS $*"
> +save_OPTS="${OPTS} $*"
> +OPTS="${EXTRA_OPTS} ${save_OPTS}"
>   
>   if [ "$CC" = "clang" ]; then
>       export OVS_CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument"
> -elif [[ $BUILD_ENV =~ "-m32" ]]; then
> -    # Disable sparse for 32bit builds on 64bit machine
> -    export OVS_CFLAGS="$CFLAGS $BUILD_ENV"
> +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"
>   else
>       OPTS="$OPTS --enable-sparse"
> -    export OVS_CFLAGS="$CFLAGS $BUILD_ENV $SPARSE_FLAGS"
> +    export OVS_CFLAGS="$CFLAGS $SPARSE_FLAGS"
>   fi
>   
>   if [ "$TESTSUITE" ]; then
> diff --git a/.travis/linux-prepare.sh b/.ci/linux-prepare.sh
> similarity index 100%
> rename from .travis/linux-prepare.sh
> rename to .ci/linux-prepare.sh
> diff --git a/.travis/osx-build.sh b/.ci/osx-build.sh
> similarity index 100%
> rename from .travis/osx-build.sh
> rename to .ci/osx-build.sh
> diff --git a/.travis/osx-prepare.sh b/.ci/osx-prepare.sh
> similarity index 100%
> rename from .travis/osx-prepare.sh
> rename to .ci/osx-prepare.sh
> diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> new file mode 100644
> index 0000000000..7be75ca36c
> --- /dev/null
> +++ b/.github/workflows/test.yml
> @@ -0,0 +1,113 @@
> +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
> +      m32_dependecies: gcc-multilib
> +      CC:          ${{ matrix.compiler }}
> +      LIBS:        ${{ matrix.libs }}
> +      M32:         ${{ matrix.m32 }}
> +      OPTS:        ${{ matrix.opts }}
> +      TESTSUITE:   ${{ matrix.testsuite }}
> +
> +    name: linux ${{ join(matrix.*, ' ') }}
> +    runs-on: ubuntu-18.04
> +
> +    strategy:
> +      fail-fast: false
> +      matrix:
> +        include:
> +          - compiler:     gcc
> +            opts:         --disable-ssl
> +          - compiler:     clang
> +            opts:         --disable-ssl
> +
> +          - compiler:     gcc
> +            testsuite:    test
> +          - compiler:     clang
> +            testsuite:    test
> +
> +          - compiler:     gcc
> +            testsuite:    test
> +            libs:         -ljemalloc
> +          - compiler:     clang
> +            testsuite:    test
> +            libs:         -ljemalloc
> +
> +          - compiler:     gcc
> +            m32:          m32
> +            opts:         --disable-ssl
> +
> +    steps:
> +    - name: checkout
> +      uses: actions/checkout at v2
> +
> +    - name: install required dependencies
> +      run:  sudo apt install -y ${{ env.dependencies }}
> +
> +    - name: install libunbound libunwind
> +      if:   matrix.m32 == ''
> +      run:  sudo apt install -y libunbound-dev libunwind-dev
> +
> +    - name: install 32-bit dependencies
> +      if:   matrix.m32 != ''
> +      run:  sudo apt install -y ${{ env.m32_dependecies }}
> +
> +    - name: prepare
> +      run:  ./.ci/linux-prepare.sh
> +
> +    - name: build
> +      run:  PATH="$PATH:$HOME/bin" ./.ci/linux-build.sh
> +
> +    - name: copy logs on failure
> +      if: failure() || cancelled()
> +      run: |
> +        # upload-artifact at v2 throws exceptions if it tries to upload socket
> +        # files and we could have some socket files in testsuite.dir.
> +        # Also, upload-artifact at 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 at 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
> +
> +    strategy:
> +      fail-fast: false
> +
> +    steps:
> +    - name: checkout
> +      uses: actions/checkout at 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 at v2
> +      with:
> +        name: logs-osx-clang---disable-ssl
> +        path: config.log
> diff --git a/.travis.yml b/.travis.yml
> deleted file mode 100644
> index cd853fddd9..0000000000
> --- a/.travis.yml
> +++ /dev/null
> @@ -1,47 +0,0 @@
> -language: c
> -compiler:
> -  - gcc
> -  - clang
> -
> -os:
> -  - linux
> -
> -addons:
> -  apt:
> -    packages:
> -      - bc
> -      - gcc-multilib
> -      - libssl-dev
> -      - llvm-dev
> -      - libjemalloc1
> -      - libjemalloc-dev
> -      - libnuma-dev
> -      - python-sphinx
> -      - libelf-dev
> -      - selinux-policy-dev
> -      - libunbound-dev
> -      - libunbound-dev:i386
> -
> -before_install: ./.travis/${TRAVIS_OS_NAME}-prepare.sh
> -
> -before_script: export PATH=$PATH:$HOME/bin
> -
> -env:
> -  - OPTS="--disable-ssl"
> -  - TESTSUITE=1 KERNEL=4.18.20
> -  - TESTSUITE=1 OPTS="--enable-shared"
> -  - BUILD_ENV="-m32" OPTS="--disable-ssl"
> -  - TESTSUITE=1 LIBS=-ljemalloc
> -
> -matrix:
> -  include:
> -    - os: osx
> -      compiler: clang
> -      env: OPTS="--disable-ssl"
> -
> -script: ./.travis/${TRAVIS_OS_NAME}-build.sh $OPTS
> -
> -notifications:
> -  email:
> -    recipients:
> -      - ovs-build at openvswitch.org
> diff --git a/Makefile.am b/Makefile.am
> index 221ca61be7..7ce3d27e46 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -84,11 +84,11 @@ EXTRA_DIST = \
>   	README.rst \
>   	NOTICE \
>   	.cirrus.yml \
> -	.travis.yml \
> -	.travis/linux-build.sh \
> -	.travis/linux-prepare.sh \
> -	.travis/osx-build.sh \
> -	.travis/osx-prepare.sh \
> +	.ci/linux-build.sh \
> +	.ci/linux-prepare.sh \
> +	.ci/osx-build.sh \
> +	.ci/osx-prepare.sh \
> +	.github/workflows/test.yml \
>   	boot.sh \
>   	$(MAN_FRAGMENTS) \
>   	$(MAN_ROOTS) \
> 



More information about the dev mailing list