ci: hook to GitHub Actions
With the recent changes in terms of free access to the Travis CI, let's offer an alternative with GitHub Actions. Running jobs on ARM is not supported unless using external runners, so this commit only adds builds for x86_64 and cross compiling for i386 and aarch64. Differences with the Travis CI integration: - Error logs are not dumped to the console when something goes wrong. Instead, they are gathered in a "catch-all" step and attached as artifacts. - A cache entry is stored once and for all, but if no cache is found you can inherit from the default branch cache. The cache is 5GB large, for the whole git repository. - The maximum retention of logs and artifacts is 3 months. - /home/runner is world writable, so a workaround has been added for starting dpdk processes. - Ilya, working on OVS GHA support, noticed that jobs can run with processors that don't have the same capabilities. For DPDK, this impacts the ccache content since everything was built with -march=native so far, and we will end up with binaries that can't run in a later build. The problem has not been seen in Travis CI (?) but it is safer to use a fixed "-Dmachine=default" in any case. - Scheduling jobs is part of the configuration and takes the form of a crontab. A build is scheduled every Monday at 0:00 (UTC) to provide a default ccache for the week (useful for the ovsrobot). Signed-off-by: David Marchand <david.marchand@redhat.com> Tested-by: Ferruh Yigit <ferruh.yigit@intel.com> Acked-by: Thomas Monjalon <thomas@monjalon.net> Acked-by: Aaron Conole <aconole@redhat.com>
This commit is contained in:
parent
3745f64b4a
commit
87009585e2
@ -12,7 +12,9 @@ on_error() {
|
||||
fi
|
||||
done
|
||||
}
|
||||
trap on_error EXIT
|
||||
# We capture the error logs as artifacts in Github Actions, no need to dump
|
||||
# them via a EXIT handler.
|
||||
[ -n "$GITHUB_WORKFLOW" ] || trap on_error EXIT
|
||||
|
||||
install_libabigail() {
|
||||
version=$1
|
||||
@ -28,16 +30,16 @@ install_libabigail() {
|
||||
rm ${version}.tar.gz
|
||||
}
|
||||
|
||||
if [ "$AARCH64" = "1" ]; then
|
||||
if [ "$AARCH64" = "true" ]; then
|
||||
# convert the arch specifier
|
||||
OPTS="$OPTS --cross-file config/arm/arm64_armv8_linux_gcc"
|
||||
fi
|
||||
|
||||
if [ "$BUILD_DOCS" = "1" ]; then
|
||||
if [ "$BUILD_DOCS" = "true" ]; then
|
||||
OPTS="$OPTS -Denable_docs=true"
|
||||
fi
|
||||
|
||||
if [ "$BUILD_32BIT" = "1" ]; then
|
||||
if [ "$BUILD_32BIT" = "true" ]; then
|
||||
OPTS="$OPTS -Dc_args=-m32 -Dc_link_args=-m32"
|
||||
export PKG_CONFIG_LIBDIR="/usr/lib32/pkgconfig"
|
||||
fi
|
||||
@ -48,16 +50,17 @@ else
|
||||
OPTS="$OPTS -Dexamples=all"
|
||||
fi
|
||||
|
||||
OPTS="$OPTS -Dmachine=default"
|
||||
OPTS="$OPTS --default-library=$DEF_LIB"
|
||||
OPTS="$OPTS --buildtype=debugoptimized"
|
||||
meson build --werror $OPTS
|
||||
ninja -C build
|
||||
|
||||
if [ "$AARCH64" != "1" ]; then
|
||||
if [ "$AARCH64" != "true" ]; then
|
||||
devtools/test-null.sh
|
||||
fi
|
||||
|
||||
if [ "$ABI_CHECKS" = "1" ]; then
|
||||
if [ "$ABI_CHECKS" = "true" ]; then
|
||||
LIBABIGAIL_VERSION=${LIBABIGAIL_VERSION:-libabigail-1.6}
|
||||
|
||||
if [ "$(cat libabigail/VERSION 2>/dev/null)" != "$LIBABIGAIL_VERSION" ]; then
|
||||
@ -95,6 +98,6 @@ if [ "$ABI_CHECKS" = "1" ]; then
|
||||
devtools/check-abi.sh reference install ${ABI_CHECKS_WARN_ONLY:-}
|
||||
fi
|
||||
|
||||
if [ "$RUN_TESTS" = "1" ]; then
|
||||
if [ "$RUN_TESTS" = "true" ]; then
|
||||
sudo meson test -C build --suite fast-tests -t 3
|
||||
fi
|
||||
|
100
.github/workflows/build.yml
vendored
Normal file
100
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,100 @@
|
||||
name: build
|
||||
|
||||
on:
|
||||
push:
|
||||
schedule:
|
||||
- cron: '0 0 * * 1'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash --noprofile --norc -exo pipefail {0}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: ${{ join(matrix.config.*, '-') }}
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
env:
|
||||
AARCH64: ${{ matrix.config.cross == 'aarch64' }}
|
||||
BUILD_32BIT: ${{ matrix.config.cross == 'i386' }}
|
||||
BUILD_DOCS: ${{ contains(matrix.config.checks, 'doc') }}
|
||||
CC: ccache ${{ matrix.config.compiler }}
|
||||
DEF_LIB: ${{ matrix.config.library }}
|
||||
RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config:
|
||||
- os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
library: static
|
||||
- os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
library: shared
|
||||
checks: doc+tests
|
||||
- os: ubuntu-18.04
|
||||
compiler: clang
|
||||
library: static
|
||||
- os: ubuntu-18.04
|
||||
compiler: clang
|
||||
library: shared
|
||||
checks: doc+tests
|
||||
- os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
library: static
|
||||
cross: i386
|
||||
- os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
library: static
|
||||
cross: aarch64
|
||||
- os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
library: shared
|
||||
cross: aarch64
|
||||
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v2
|
||||
- name: Generate cache keys
|
||||
id: get_ref_keys
|
||||
run: |
|
||||
echo -n '::set-output name=ccache::'
|
||||
echo 'ccache-${{ matrix.config.os }}-${{ matrix.config.compiler }}-${{ matrix.config.cross }}-'$(date -u +%Y-w%W)
|
||||
- name: Retrieve ccache cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ steps.get_ref_keys.outputs.ccache }}-${{ github.ref }}
|
||||
restore-keys: |
|
||||
${{ steps.get_ref_keys.outputs.ccache }}-refs/heads/main
|
||||
- name: Install packages
|
||||
run: sudo apt install -y ccache libnuma-dev python3-setuptools
|
||||
python3-wheel python3-pip ninja-build libbsd-dev libpcap-dev
|
||||
libibverbs-dev libcrypto++-dev libfdt-dev libjansson-dev
|
||||
- name: Install i386 cross compiling packages
|
||||
if: env.BUILD_32BIT == 'true'
|
||||
run: sudo apt install -y gcc-multilib
|
||||
- name: Install aarch64 cross compiling packages
|
||||
if: env.AARCH64 == 'true'
|
||||
run: sudo apt install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
||||
pkg-config-aarch64-linux-gnu
|
||||
- name: Install doc generation packages
|
||||
if: env.BUILD_DOCS == 'true'
|
||||
run: sudo apt install -y doxygen graphviz python3-sphinx
|
||||
python3-sphinx-rtd-theme
|
||||
- name: Run setup
|
||||
run: |
|
||||
.ci/linux-setup.sh
|
||||
# Workaround on $HOME permissions as EAL checks them for plugin loading
|
||||
chmod o-w $HOME
|
||||
- name: Build and test
|
||||
run: .ci/linux-build.sh
|
||||
- name: Upload logs on failure
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: meson-logs-${{ join(matrix.config.*, '-') }}
|
||||
path: |
|
||||
build/meson-logs/testlog.txt
|
||||
build/.ninja_log
|
||||
build/meson-logs/meson-log.txt
|
24
.travis.yml
24
.travis.yml
@ -34,10 +34,10 @@ jobs:
|
||||
- env: DEF_LIB="static"
|
||||
arch: amd64
|
||||
compiler: gcc
|
||||
- env: DEF_LIB="shared" RUN_TESTS=1
|
||||
- env: DEF_LIB="shared" RUN_TESTS=true
|
||||
arch: amd64
|
||||
compiler: gcc
|
||||
- env: DEF_LIB="shared" BUILD_DOCS=1
|
||||
- env: DEF_LIB="shared" BUILD_DOCS=true
|
||||
arch: amd64
|
||||
compiler: gcc
|
||||
addons:
|
||||
@ -49,10 +49,10 @@ jobs:
|
||||
- env: DEF_LIB="static"
|
||||
arch: amd64
|
||||
compiler: clang
|
||||
- env: DEF_LIB="shared" RUN_TESTS=1
|
||||
- env: DEF_LIB="shared" RUN_TESTS=true
|
||||
arch: amd64
|
||||
compiler: clang
|
||||
- env: DEF_LIB="shared" BUILD_DOCS=1
|
||||
- env: DEF_LIB="shared" BUILD_DOCS=true
|
||||
arch: amd64
|
||||
compiler: clang
|
||||
addons:
|
||||
@ -61,7 +61,7 @@ jobs:
|
||||
- *required_packages
|
||||
- *doc_packages
|
||||
# x86_64 cross-compiling 32-bits jobs
|
||||
- env: DEF_LIB="static" BUILD_32BIT=1
|
||||
- env: DEF_LIB="static" BUILD_32BIT=true
|
||||
arch: amd64
|
||||
compiler: gcc
|
||||
addons:
|
||||
@ -69,14 +69,14 @@ jobs:
|
||||
packages:
|
||||
- *build_32b_packages
|
||||
# x86_64 cross-compiling aarch64 jobs
|
||||
- env: DEF_LIB="static" AARCH64=1
|
||||
- env: DEF_LIB="static" AARCH64=true
|
||||
arch: amd64
|
||||
compiler: gcc
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- *aarch64_packages
|
||||
- env: DEF_LIB="shared" AARCH64=1
|
||||
- env: DEF_LIB="shared" AARCH64=true
|
||||
arch: amd64
|
||||
compiler: gcc
|
||||
addons:
|
||||
@ -87,16 +87,16 @@ jobs:
|
||||
- env: DEF_LIB="static"
|
||||
arch: arm64
|
||||
compiler: gcc
|
||||
- env: DEF_LIB="shared" RUN_TESTS=1
|
||||
- env: DEF_LIB="shared" RUN_TESTS=true
|
||||
arch: arm64
|
||||
compiler: gcc
|
||||
- env: DEF_LIB="shared" RUN_TESTS=1
|
||||
- env: DEF_LIB="shared" RUN_TESTS=true
|
||||
dist: focal
|
||||
arch: arm64-graviton2
|
||||
virt: vm
|
||||
group: edge
|
||||
compiler: gcc
|
||||
- env: DEF_LIB="shared" BUILD_DOCS=1
|
||||
- env: DEF_LIB="shared" BUILD_DOCS=true
|
||||
arch: arm64
|
||||
compiler: gcc
|
||||
addons:
|
||||
@ -108,10 +108,10 @@ jobs:
|
||||
- env: DEF_LIB="static"
|
||||
arch: arm64
|
||||
compiler: clang
|
||||
- env: DEF_LIB="shared" RUN_TESTS=1
|
||||
- env: DEF_LIB="shared" RUN_TESTS=true
|
||||
arch: arm64
|
||||
compiler: clang
|
||||
- env: DEF_LIB="shared" RUN_TESTS=1
|
||||
- env: DEF_LIB="shared" RUN_TESTS=true
|
||||
dist: focal
|
||||
arch: arm64-graviton2
|
||||
virt: vm
|
||||
|
@ -109,6 +109,7 @@ Public CI
|
||||
M: Aaron Conole <aconole@redhat.com>
|
||||
M: Michael Santana <maicolgabriel@hotmail.com>
|
||||
F: .travis.yml
|
||||
F: .github/workflows/build.yml
|
||||
F: .ci/
|
||||
|
||||
ABI Policy & Versioning
|
||||
|
Loading…
Reference in New Issue
Block a user