[v8] ci: Introduce travis builds for github repositories

Message ID 20190325153208.8039-1-msantana@redhat.com
State Accepted, archived
Delegated to: Thomas Monjalon
Headers show
Series
  • [v8] ci: Introduce travis builds for github repositories
Related show

Checks

Context Check Description
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/Intel-compilation success Compilation OK
ci/checkpatch success coding style OK

Commit Message

Michael Santana March 25, 2019, 3:32 p.m.
GitHub is a service used by developers to store repositories.  GitHub
provides service integrations that allow 3rd party services to access
developer repositories and perform actions.  One of these services is
Travis-CI, a simple continuous integration platform.

This series introduces the ability for any github mirrors of the DPDK
project, including developer mirrors, to kick off builds under the
travis CI infrastructure.  For now, this just means compilation - no
other kinds of automated run exists yet.  In the future, this can be
expanded to execute and report results for any test-suites that might
exist.

This is a simple initial implementation of a travis build for the DPDK
project.  It doesn't require any changes from individual developers to
enable, but will allow those developers who opt-in to GitHub and the
travis service to get automatic builds for every push they make.

The files added under .ci/ exist so that in the future, other CI
support platforms (such as cirrus, appveyor, etc.) could have a common
place to put their requisite scripts without polluting the main tree.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Signed-off-by: Michael Santana <msantana@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Luca Boccassi <bluca@debian.org>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
---
 .ci/linux-build.sh                  | 24 +++++++
 .ci/linux-setup.sh                  |  3 +
 .travis.yml                         | 99 +++++++++++++++++++++++++++++
 MAINTAINERS                         |  6 ++
 doc/guides/contributing/patches.rst |  4 ++
 5 files changed, 136 insertions(+)
 create mode 100755 .ci/linux-build.sh
 create mode 100755 .ci/linux-setup.sh
 create mode 100644 .travis.yml

Comments

Thomas Monjalon March 25, 2019, 4:10 p.m. | #1
25/03/2019 16:32, Michael Santana:
> GitHub is a service used by developers to store repositories.  GitHub
> provides service integrations that allow 3rd party services to access
> developer repositories and perform actions.  One of these services is
> Travis-CI, a simple continuous integration platform.
> 
> This series introduces the ability for any github mirrors of the DPDK
> project, including developer mirrors, to kick off builds under the
> travis CI infrastructure.  For now, this just means compilation - no
> other kinds of automated run exists yet.  In the future, this can be
> expanded to execute and report results for any test-suites that might
> exist.
> 
> This is a simple initial implementation of a travis build for the DPDK
> project.  It doesn't require any changes from individual developers to
> enable, but will allow those developers who opt-in to GitHub and the
> travis service to get automatic builds for every push they make.
> 
> The files added under .ci/ exist so that in the future, other CI
> support platforms (such as cirrus, appveyor, etc.) could have a common
> place to put their requisite scripts without polluting the main tree.
> 
> Signed-off-by: Aaron Conole <aconole@redhat.com>
> Signed-off-by: Michael Santana <msantana@redhat.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> Acked-by: Luca Boccassi <bluca@debian.org>
> Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>

Acked-by: Thomas Monjalon <thomas@monjalon.net>
Thomas Monjalon March 26, 2019, 9:54 p.m. | #2
25/03/2019 17:10, Thomas Monjalon:
> 25/03/2019 16:32, Michael Santana:
> > GitHub is a service used by developers to store repositories.  GitHub
> > provides service integrations that allow 3rd party services to access
> > developer repositories and perform actions.  One of these services is
> > Travis-CI, a simple continuous integration platform.
> > 
> > This series introduces the ability for any github mirrors of the DPDK
> > project, including developer mirrors, to kick off builds under the
> > travis CI infrastructure.  For now, this just means compilation - no
> > other kinds of automated run exists yet.  In the future, this can be
> > expanded to execute and report results for any test-suites that might
> > exist.
> > 
> > This is a simple initial implementation of a travis build for the DPDK
> > project.  It doesn't require any changes from individual developers to
> > enable, but will allow those developers who opt-in to GitHub and the
> > travis service to get automatic builds for every push they make.
> > 
> > The files added under .ci/ exist so that in the future, other CI
> > support platforms (such as cirrus, appveyor, etc.) could have a common
> > place to put their requisite scripts without polluting the main tree.
> > 
> > Signed-off-by: Aaron Conole <aconole@redhat.com>
> > Signed-off-by: Michael Santana <msantana@redhat.com>
> > Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> > Acked-by: Luca Boccassi <bluca@debian.org>
> > Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> 
> Acked-by: Thomas Monjalon <thomas@monjalon.net>

Applied, thanks, it looks good.

Patch

diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
new file mode 100755
index 000000000..767840e40
--- /dev/null
+++ b/.ci/linux-build.sh
@@ -0,0 +1,24 @@ 
+#!/bin/sh -xe
+
+on_error() {
+    if [ $? = 0 ]; then
+        exit
+    fi
+    FILES_TO_PRINT="build/meson-logs/testlog.txt build/.ninja_log build/meson-logs/meson-log.txt"
+
+    for pr_file in $FILES_TO_PRINT; do
+        if [ -e "$pr_file" ]; then
+            cat "$pr_file"
+        fi
+    done
+}
+trap on_error EXIT
+
+if [ "$AARCH64" = "1" ]; then
+    # convert the arch specifier
+    OPTS="$OPTS --cross-file config/arm/arm64_armv8_linuxapp_gcc"
+fi
+
+OPTS="$OPTS --default-library=$DEF_LIB"
+meson build --werror -Dexamples=all $OPTS
+ninja -C build
diff --git a/.ci/linux-setup.sh b/.ci/linux-setup.sh
new file mode 100755
index 000000000..acdf9f370
--- /dev/null
+++ b/.ci/linux-setup.sh
@@ -0,0 +1,3 @@ 
+#!/bin/sh
+
+python3 -m pip install --upgrade meson --user
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..3045eada5
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,99 @@ 
+language: c
+compiler:
+  - gcc
+  - clang
+
+dist: xenial
+
+os:
+  - linux
+
+addons:
+  apt:
+    update: true
+    packages: &required_packages
+      - [libnuma-dev, linux-headers-$(uname -r), python3-setuptools, python3-wheel, python3-pip, ninja-build]
+
+aarch64_packages: &aarch64_packages
+  - *required_packages
+  - [gcc-aarch64-linux-gnu, libc6-dev-arm64-cross]
+
+extra_packages: &extra_packages
+  - *required_packages
+  - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4]
+
+before_install: ./.ci/${TRAVIS_OS_NAME}-setup.sh
+
+sudo: false
+
+env:
+  - DEF_LIB="static"
+  - DEF_LIB="shared"
+  - DEF_LIB="static" OPTS="-Denable_kmods=false"
+  - DEF_LIB="shared" OPTS="-Denable_kmods=false"
+
+matrix:
+  include:
+  - env: DEF_LIB="static" OPTS="-Denable_kmods=false" AARCH64=1
+    compiler: gcc
+    addons:
+      apt:
+        packages:
+          - *aarch64_packages
+  - env: DEF_LIB="shared" OPTS="-Denable_kmods=false" AARCH64=1
+    compiler: gcc
+    addons:
+      apt:
+        packages:
+          - *aarch64_packages
+  - env: DEF_LIB="static"
+    compiler: gcc
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+  - env: DEF_LIB="shared"
+    compiler: gcc
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+  - env: DEF_LIB="static" OPTS="-Denable_kmods=false"
+    compiler: gcc
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+  - env: DEF_LIB="shared" OPTS="-Denable_kmods=false"
+    compiler: gcc
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+  - env: DEF_LIB="static"
+    compiler: clang
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+  - env: DEF_LIB="shared"
+    compiler: clang
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+  - env: DEF_LIB="static" OPTS="-Denable_kmods=false"
+    compiler: clang
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+  - env: DEF_LIB="shared" OPTS="-Denable_kmods=false"
+    compiler: clang
+    addons:
+      apt:
+        packages:
+          - *extra_packages
+
+
+script: ./.ci/${TRAVIS_OS_NAME}-build.sh
diff --git a/MAINTAINERS b/MAINTAINERS
index 15c53888c..e4b9a8e00 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -119,6 +119,12 @@  F: config/rte_config.h
 F: buildtools/gen-pmdinfo-cfile.sh
 F: buildtools/symlink-drivers-solibs.sh
 
+Public CI
+M: Aaron Conole <aconole@redhat.com>
+M: Michael Santana <msantana@redhat.com>
+F: .travis.yml
+F: .ci/
+
 ABI versioning
 M: Neil Horman <nhorman@tuxdriver.com>
 F: doc/guides/rel_notes/deprecation.rst
diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
index 211a5cdc7..22a9039e8 100644
--- a/doc/guides/contributing/patches.rst
+++ b/doc/guides/contributing/patches.rst
@@ -32,6 +32,10 @@  The mailing list for DPDK development is `dev@dpdk.org <http://mails.dpdk.org/ar
 Contributors will need to `register for the mailing list <http://mails.dpdk.org/listinfo/dev>`_ in order to submit patches.
 It is also worth registering for the DPDK `Patchwork <http://patches.dpdk.org/project/dpdk/list/>`_
 
+If you are using the GitHub service, you can link your repository to
+the ``travis-ci.org`` build service.  When you push patches to your GitHub
+repository, the travis service will automatically build your changes.
+
 The development process requires some familiarity with the ``git`` version control system.
 Refer to the `Pro Git Book <http://www.git-scm.com/book/>`_ for further information.