summaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/build-and-test.yml203
1 files changed, 203 insertions, 0 deletions
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
new file mode 100644
index 000000000..847fd3150
--- /dev/null
+++ b/.github/workflows/build-and-test.yml
@@ -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