[dpdk-dev] [PATCH] ci: hook to Github Actions
Aaron Conole
aconole at redhat.com
Wed Nov 25 14:44:54 CET 2020
David Marchand <david.marchand at redhat.com> writes:
> 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:
> - All jobs generate documentation.
> This is not that heavy and the default timeout on actions is never
> reached so no reason splitting this into multiple jobs.
> - 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.
>
> Signed-off-by: David Marchand <david.marchand at redhat.com>
> ---
Thanks for working on this. Sadly, I think we will have to abandon
Travis soon - given the new changes it is looking very awful. Robot
already is starved for job time.
Since we don't have ARM test runs, I guess we will have to rely on
something else for that coverage now, but I like that there is coverage
included at least to compile.
I will need to update the robot to pull information from github actions,
so for now it will need to be manually checked (but here's an example of
a run: https://github.com/ovsrobot/dpdk/actions/runs/382073265). What's
nice is the robot is already primed to run the jobs, so that's good.
Acked-by: Aaron Conole <aconole at redhat.com>
> .ci/linux-build.sh | 4 +-
> .github/workflows/build.yml | 98 +++++++++++++++++++++++++++++++++++++
> MAINTAINERS | 1 +
> 3 files changed, 102 insertions(+), 1 deletion(-)
> create mode 100644 .github/workflows/build.yml
>
> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> index d079801d78..a2a0e5bf42 100755
> --- a/.ci/linux-build.sh
> +++ b/.ci/linux-build.sh
> @@ -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
> diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
> new file mode 100644
> index 0000000000..e0a8f1ed52
> --- /dev/null
> +++ b/.github/workflows/build.yml
> @@ -0,0 +1,98 @@
> +name: build
> +
> +on: push
> +
> +defaults:
> + run:
> + shell: bash --noprofile --norc -exo pipefail {0}
> +
> +jobs:
> + build:
> + name: ${{ join(matrix.config.*, '-') }}
> + runs-on: ${{ matrix.config.os }}
> + env:
> + PKGS: |
> + ccache libnuma-dev python3-setuptools python3-wheel python3-pip \
> + ninja-build libbsd-dev libpcap-dev libibverbs-dev libcrypto++-dev \
> + libfdt-dev libjansson-dev doxygen graphviz python3-sphinx \
> + python3-sphinx-rtd-theme
> + CC: ccache ${{ matrix.config.compiler }}
> + JOBNAME: ${{ join(matrix.config.*, '-') }}
> +
> + strategy:
> + fail-fast: false
> + matrix:
> + config:
> + - os: ubuntu-18.04
> + compiler: gcc
> + library: static
> + - os: ubuntu-18.04
> + compiler: gcc
> + library: shared
> + - os: ubuntu-18.04
> + compiler: clang
> + library: static
> + - os: ubuntu-18.04
> + compiler: clang
> + library: shared
> + - 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:
> + - uses: actions/checkout at v2
> + - uses: actions/cache at v2
> + with:
> + path: ~/.ccache
> + key: ${{ env.JOBNAME }}-${{ github.ref }}
> + restore-keys: |
> + ${{ env.JOBNAME }}-refs/heads/main
> + - name: Install packages
> + run: sudo apt install -y ${{ env.PKGS }}
> + - name: Install i386 cross compiling packages
> + if: matrix.config.cross == 'i386'
> + run: sudo apt install -y gcc-multilib
> + - name: Install aarch64 cross compiling packages
> + if: matrix.config.cross == 'aarch64'
> + run: |
> + sudo apt install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross \
> + pkg-config-aarch64-linux-gnu
> + - name: Prepare environment
> + 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: |
> + export DEF_LIB=${{ matrix.config.library }}
> + export BUILD_DOCS=1
> + case '${{ matrix.config.cross }}' in
> + 'i386')
> + export BUILD_32BIT=1
> + ;;
> + 'aarch64')
> + export AARCH64=1
> + ;;
> + '')
> + export RUN_TESTS=1
> + ;;
> + esac
> + .ci/linux-build.sh
> + - name: Upload logs on failure
> + if: failure()
> + uses: actions/upload-artifact at v2
> + with:
> + name: meson-logs-${{ env.JOBNAME }}
> + path: |
> + build/meson-logs/testlog.txt
> + build/.ninja_log
> + build/meson-logs/meson-log.txt
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 214515060a..95b61085b7 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -109,6 +109,7 @@ Public CI
> M: Aaron Conole <aconole at redhat.com>
> M: Michael Santana <maicolgabriel at hotmail.com>
> F: .travis.yml
> +F: .github/workflows/build.yml
> F: .ci/
>
> ABI Policy & Versioning
More information about the dev
mailing list