Skip to content

Commit

Permalink
github: Add GitHub Actions workflow.
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Ilya Maximets <[email protected]>
  • Loading branch information
igsilya committed Nov 26, 2020
1 parent 629283a commit 6cb2f5a
Show file tree
Hide file tree
Showing 10 changed files with 227 additions and 15 deletions.
File renamed without changes.
13 changes: 9 additions & 4 deletions .travis/linux-prepare.sh → .ci/linux-prepare.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
File renamed without changes.
File renamed without changes.
203 changes: 203 additions & 0 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
@@ -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
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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:
Expand Down
9 changes: 4 additions & 5 deletions Documentation/internals/contributing/submitting-patches.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
-------------
Expand Down
9 changes: 5 additions & 4 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 6cb2f5a

Please sign in to comment.