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

Numan Siddique numans at ovn.org
Wed Dec 2 07:16:26 UTC 2020


On Wed, Dec 2, 2020 at 12:44 PM Numan Siddique <numans at ovn.org> wrote:
>
> On Wed, Dec 2, 2020 at 6:26 AM Mark Michelson <mmichels at redhat.com> wrote:
> >
> > 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.
> >
>
> Thanks for the review. I applied this patch to master and to all the
> branches - 20.09, 20.06 and 20.03.

Forgot to mention that while backporting I modified the linux-build.sh to
checkout OVS v2.14.0 tag as OVN branches don't compile successfully with
the present master due to some changes in the ofpact structs.

Thanks
Numan

>
> Agree. If you're aware of about the artifacts, please consider
> submitting the patch to address it.
>
> I will work on having this PR - https://github.com/ovn-org/ovn/pull/61
> to work successfully.
>
> Thanks
> Numan
>
>
> > 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) \
> > >
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >


More information about the dev mailing list