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
