2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 09:58:01 +00:00

github: Add GitHub Actions workflow.

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 <simon.horman@netronome.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
Ilya Maximets 2020-11-23 23:34:28 +01:00
parent 629283a8eb
commit 6cb2f5a630
10 changed files with 227 additions and 15 deletions

View File

@ -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:

203
.github/workflows/build-and-test.yml vendored Normal file
View File

@ -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

View File

@ -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:

View File

@ -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
-------------

View File

@ -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 \

2
NEWS
View File

@ -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

View File

@ -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