On Tue, Nov 24, 2020 at 9:25 PM Ilya Maximets <[email protected]> wrote:
>
> 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
>
> Signed-off-by: Ilya Maximets <[email protected]>

Acked-by: Numan Siddique <[email protected]>

Numan

> ---
>
> Here is how it looks like:
>   https://github.com/igsilya/ovs/actions/runs/381334381
>
> I'll continue to work on preparing similar patches for released branches.
>
>  {.travis => .ci}/linux-build.sh               |   0
>  {.travis => .ci}/linux-prepare.sh             |  13 +-
>  {.travis => .ci}/osx-build.sh                 |   0
>  {.travis => .ci}/osx-prepare.sh               |   0
>  .github/workflows/build-and-test.yml          | 197 ++++++++++++++++++
>  .travis.yml                                   |   4 +-
>  .../contributing/submitting-patches.rst       |   9 +-
>  Makefile.am                                   |   9 +-
>  NEWS                                          |   2 +
>  README.rst                                    |   2 +
>  10 files changed, 221 insertions(+), 15 deletions(-)
>  rename {.travis => .ci}/linux-build.sh (100%)
>  rename {.travis => .ci}/linux-prepare.sh (72%)
>  rename {.travis => .ci}/osx-build.sh (100%)
>  rename {.travis => .ci}/osx-prepare.sh (100%)
>  create mode 100644 .github/workflows/build-and-test.yml
>
> diff --git a/.travis/linux-build.sh b/.ci/linux-build.sh
> similarity index 100%
> rename from .travis/linux-build.sh
> rename to .ci/linux-build.sh
> diff --git a/.travis/linux-prepare.sh b/.ci/linux-prepare.sh
> similarity index 72%
> rename from .travis/linux-prepare.sh
> rename to .ci/linux-prepare.sh
> index 71eb347e8..fea905a83 100755
> --- a/.travis/linux-prepare.sh
> +++ b/.ci/linux-prepare.sh
> @@ -25,10 +25,15 @@ 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
> +    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:
> 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/build-and-test.yml 
> b/.github/workflows/build-and-test.yml
> new file mode 100644
> index 000000000..af296c1a1
> --- /dev/null
> +++ b/.github/workflows/build-and-test.yml
> @@ -0,0 +1,197 @@
> +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
> +      DPDK_VER:    19.11.2
> +      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-latest
> +    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 cache key ref
> +      id:   key_ref
> +      if:   github.base_ref == ''
> +      run:  echo "::set-output name=ref_key::${{ github.ref }}"
> +
> +    - name: create cache key ref for pull request
> +      id:   key_ref_pull
> +      if:   github.base_ref != ''
> +      run:  echo "::set-output name=ref_key::${{ github.base_ref }}"
> +
> +    - name: cache
> +      if:   matrix.dpdk != '' || matrix.dpdk_shared != ''
> +      uses: actions/cache@v2
> +      env:
> +        matrix_key: ${{ matrix.dpdk }}${{ matrix.dpdk_shared }}
> +        ref_key:    ${{ join(steps.*.outputs.ref_key) }}
> +      with:
> +        path: dpdk-dir
> +        key:  dpdk-${{ env.DPDK_VER }}-${{ env.matrix_key }}-${{ env.ref_key 
> }}
> +        restore-keys: |
> +          dpdk-${{ env.DPDK_VER }}-${{ env.matrix_key }}-refs/heads/master
> +
> +    - 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: upload logs on failure
> +      if: failure()
> +      uses: actions/upload-artifact@v2
> +      with:
> +        name: logs-linux-${{ join(matrix.*, '-') }}
> +        path: |
> +          config.log
> +          '*/_build/sub/tests/testsuite.log'
> +          '*/_build/sub/tests/testsuite.dir'
> +
> +  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
> diff --git a/.travis.yml b/.travis.yml
> index 9fd8bbe01..34ef16aa7 100644
> --- a/.travis.yml
> +++ b/.travis.yml
> @@ -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/Documentation/internals/contributing/submitting-patches.rst 
> b/Documentation/internals/contributing/submitting-patches.rst
> index 5a314cc60..4a6780371 100644
> --- a/Documentation/internals/contributing/submitting-patches.rst
> +++ b/Documentation/internals/contributing/submitting-patches.rst
> @@ -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
>  -------------
> diff --git a/Makefile.am b/Makefile.am
> index a3fbb15e2..691a005ad 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -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 185555848..7e291a180 100644
> --- 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
> diff --git a/README.rst b/README.rst
> index e06ddf267..319f70515 100644
> --- a/README.rst
> +++ b/README.rst
> @@ -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
> --
> 2.25.4
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to