]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Add support for private aarch64 CI runner private-runner
authorHans Kristian Rosbach <hk-git@circlestorm.org>
Sat, 24 Apr 2021 15:15:38 +0000 (17:15 +0200)
committerHans Kristian Rosbach <hk-git@circlestorm.org>
Sat, 24 Apr 2021 15:45:06 +0000 (17:45 +0200)
.github/workflows/cmake-priv.yml [new file with mode: 0644]

diff --git a/.github/workflows/cmake-priv.yml b/.github/workflows/cmake-priv.yml
new file mode 100644 (file)
index 0000000..d30471b
--- /dev/null
@@ -0,0 +1,145 @@
+# This is the workflow for cmake builds to be run on our private runners.
+name: CI CMake Priv aarch64y
+on: [push, pull_request]
+jobs:
+  ci-cmake:
+    name: ${{ matrix.name }}
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - name: Ubuntu GCC AARCH64
+            os: el8-aarch64
+            #os: ubuntu-latest
+            #compiler: aarch64-linux-gnu-gcc
+            compiler: gcc
+            cmake-args: -DWITH_SANITIZER=Address
+            asan-options: detect_leaks=0
+            codecov: t_ubuntu_gcc_aarch64
+
+          - name: Ubuntu GCC AARCH64 No ACLE
+            os: el8-aarch64
+            #os: ubuntu-latest
+            #compiler: aarch64-linux-gnu-gcc
+            compiler: gcc
+            cmake-args: -DWITH_ACLE=OFF -DWITH_SANITIZER=Undefined
+            asan-options: detect_leaks=0
+            codecov: t_ubuntu_gcc_aarch64_no_acle
+
+          - name: Ubuntu GCC AARCH64 No NEON
+            os: el8-aarch64
+            #os: ubuntu-latest
+            #compiler: aarch64-linux-gnu-gcc
+            compiler: gcc
+            cmake-args: -DWITH_NEON=OFF -DWITH_SANITIZER=Undefined
+            asan-options: detect_leaks=0
+            codecov: t_ubuntu_gcc_aarch64_no_neon
+
+          - name: Ubuntu GCC AARCH64 Compat No Opt
+            os: el8-aarch64
+            #os: ubuntu-latest
+            #compiler: aarch64-linux-gnu-gcc
+            compiler: gcc
+            cmake-args: -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
+            asan-options: detect_leaks=0
+            codecov: t_ubuntu_gcc_aarch64_compat_no_opt
+             # Limit parallel test jobs to prevent wine errors
+            #parallels-jobs: 1
+
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v2
+
+    - name: Checkout test corpora
+      uses: actions/checkout@v2
+      # Don't test against all corpora with MinGW due to Wine being unable to run parallel jobs
+      # without connection timeout. Without parallel jobs test runs using Wine take close to an hour.
+      if: contains(matrix.name, 'MinGW') == false
+      with:
+        repository: zlib-ng/corpora
+        path: test/data/corpora
+
+    - name: Install packages (Ubuntu)
+      if: runner.os == 'Linux' && matrix.packages
+      run: |
+        sudo dpkg --add-architecture i386 # Required for wine32
+        sudo apt-get update
+        sudo apt-get install -y ${{ matrix.packages }}
+
+    - name: Install packages (Windows)
+      if: runner.os == 'Windows'
+      run: |
+        choco install ninja ${{ matrix.packages }} --no-progress
+
+    - name: Install packages (macOS)
+      if: runner.os == 'macOS'
+      run: |
+        brew install ninja ${{ matrix.packages }}
+      env:
+        HOMEBREW_NO_INSTALL_CLEANUP: 1
+
+    - name: Install codecov.io tools
+      if: matrix.codecov
+      run: |
+        python -u -m pip install codecov
+
+    - name: Initialize Wine
+      # Prevent parallel test jobs from initializing Wine at the same time
+      if: contains(matrix.packages, 'wine')
+      run: |
+        wineboot --init
+
+    - name: Generate project files
+      # Shared libaries turned off for qemu ppc* and sparc & reduce code coverage sources
+      run: |
+        mkdir ${{ matrix.build-dir || '.not-used' }}
+        cd ${{ matrix.build-dir || '.' }}
+        cmake ${{ matrix.build-src-dir || '.' }} ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=${{ matrix.build-config || 'Release' }} -DBUILD_SHARED_LIBS=OFF -DWITH_FUZZERS=ON -DWITH_CODE_COVERAGE=ON -DWITH_MAINTAINER_WARNINGS=ON
+      env:
+        CC: ${{ matrix.compiler }}
+        CFLAGS: ${{ matrix.cflags }}
+        LDFLAGS: ${{ matrix.ldflags }}
+        CI: true
+
+    - name: Compile source code
+      run: |
+        cd ${{ matrix.build-dir || '.' }}
+        cmake --build . --config ${{ matrix.build-config || 'Release' }}
+
+    - name: Run test cases
+      # Don't run tests on Windows ARM
+      if: runner.os != 'Windows' || contains(matrix.name, 'ARM') == false
+      run: |
+        cd ${{ matrix.build-dir || '.' }}
+        ctest --verbose -C Release --output-on-failure --max-width 120 -j ${{ matrix.parallels-jobs || '6' }}
+      env:
+        ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=0' }}:abort_on_error=1
+        MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=0' }}:abort_on_error=1
+        TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=0' }}:abort_on_error=1
+        LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=0' }}:abort_on_error=1
+        QEMU_RUN: ${{ matrix.qemu-run }}
+
+    - name: Upload coverage report
+      if: matrix.codecov && ( env.CODECOV_TOKEN_SECRET != '' || github.repository == 'zlib-ng/zlib-ng' )
+      shell: bash
+      run: |
+        bash tools/codecov-upload.sh
+      env:
+        # Codecov does not yet support GitHub Actions
+        CODECOV_TOKEN_SECRET: "${{secrets.CODECOV_TOKEN}}"
+        CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN || 'e4fdf847-f541-4ab1-9d50-3d27e5913906' }}"
+        CODECOV_FLAGS: "${{ matrix.codecov }}"
+        CODECOV_NAME:  "${{ matrix.name }}"
+        CODECOV_EXEC:  "${{ matrix.gcov-exec || 'gcov' }}"
+        CODECOV_DIR:   "${{ matrix.build-dir || '.' }}"
+
+    - name: Upload build errors
+      uses: actions/upload-artifact@v2
+      if: failure()
+      with:
+        name: ${{ matrix.name }} (cmake)
+        path: |
+          ${{ matrix.build-dir || '.' }}/CMakeFiles/CMakeOutput.log
+          ${{ matrix.build-dir || '.' }}/CMakeFiles/CMakeError.log
+        retention-days: 30