This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository terminology.

View the commit online.

commit 0d7dbbfef0a3e158c0d606e8654edc4ad08bc505
Author: Boris Faure <[email protected]>
AuthorDate: Mon Aug 24 22:45:25 2026 +0200

    ci: build, test and measure coverage on arm64
    
    TERMINOLOGY_HAVE_NEON is gated on __aarch64__, so on the x86_64 runners
    simd_neon.c compiles to an object with no symbols in it at all and the parity
    harness in simd.c is preprocessed away, leaving tytest_simd_parity an empty
    function. The hand-written intrinsics have never been compiled by CI, let alone
    checked against their scalar reference.
    
    Two build jobs, each differing from its x86_64 twin only in the runner, so the
    architecture is the one variable: gcc at -O0 for the parity test and the
    warnings, and clang under asan so a kernel storing outside its range is caught
    rather than merely disagreeing with the scalar result.
    
    It also gives four tests something to do. unit-scalar and escape-codes-scalar
    set TERMINOLOGY_SIMD_DISABLE=1, but _use_simd is already EINA_FALSE at compile
    time without NEON, so on x86_64 they run code identical to unit and
    escape-codes.
    
    Coverage becomes a matrix over the same two runners, since gcov on x86_64 sees
    simd_neon.c as a file containing no code and drops the kernels from the report
    instead of showing them uncovered. The uploads carry a per-arch flag so codecov
    merges them rather than treating the second as a replacement for the first, and
    the meson-logs artifact is named per-arch because upload-artifact@v4 rejects a
    duplicate name.
    
    ubuntu-24.04-arm is free for public repositories, and noble has every package
    the workflow installs on arm64: libefl-all-dev, clang, lld and
    libclang-rt-18-dev are all built for it, and gcovr is Architecture: all.
---
 .github/workflows/ci.yaml | 49 +++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 45 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index b3c93009..c9c04fa6 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -12,7 +12,7 @@ concurrency:
 jobs:
   build:
     name: ${{ matrix.name }}
-    runs-on: ubuntu-24.04
+    runs-on: ${{ matrix.runner }}
     timeout-minutes: 30
     env:
       COLUMNS: 150
@@ -24,11 +24,13 @@ jobs:
       matrix:
         include:
           - name: gcc-debug
+            runner: ubuntu-24.04
             cc: gcc
             options: -Dnls=false -Dbuildtype=debug -Dfuzzing=true -Dbenchmarks=true
             cflags: -O0 -g -Wall -Wextra
 
           - name: gcc-release
+            runner: ubuntu-24.04
             cc: gcc
             options: -Dnls=true -Dbuildtype=release
             cflags: -O2 -g -Wall -Wextra
@@ -36,6 +38,7 @@ jobs:
             install: true
 
           - name: clang-release
+            runner: ubuntu-24.04
             cc: clang
             # lld rather than bfd, so the LLVM toolchain is exercised end to end.
             cc_ld: lld
@@ -44,6 +47,7 @@ jobs:
             cflags: -O2 -g -Wall -Wextra
 
           - name: clang-asan
+            runner: ubuntu-24.04
             cc: clang
             llvm: true
             options: -Dnls=false -Dbuildtype=debug
@@ -51,12 +55,33 @@ jobs:
             ldflags: -fsanitize=address
 
           - name: clang-ubsan
+            runner: ubuntu-24.04
             cc: clang
             llvm: true
             options: -Dnls=false -Dbuildtype=debug
             cflags: -O1 -g -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=undefined
             ldflags: -fsanitize=undefined
 
+          # TERMINOLOGY_HAVE_NEON is gated on __aarch64__, so these are the only
+          # jobs that compile simd_neon.c to anything, run the parity test in
+          # simd.c, or give TERMINOLOGY_SIMD_DISABLE something to switch off.
+          # Both differ from their x86_64 twin above only in the runner.
+          - name: gcc-debug-arm64
+            runner: ubuntu-24.04-arm
+            cc: gcc
+            options: -Dnls=false -Dbuildtype=debug -Dfuzzing=true -Dbenchmarks=true
+            cflags: -O0 -g -Wall -Wextra
+
+          # asan so that a vector kernel storing outside its range is caught
+          # rather than merely disagreeing with the scalar reference.
+          - name: clang-asan-arm64
+            runner: ubuntu-24.04-arm
+            cc: clang
+            llvm: true
+            options: -Dnls=false -Dbuildtype=debug
+            cflags: -O1 -g -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=address
+            ldflags: -fsanitize=address
+
     steps:
       - uses: actions/checkout@v4
 
@@ -111,12 +136,23 @@ jobs:
           path: build/meson-logs/
 
   coverage:
-    name: coverage
-    runs-on: ubuntu-24.04
+    name: coverage-${{ matrix.arch }}
+    runs-on: ${{ matrix.runner }}
     timeout-minutes: 30
     env:
       COLUMNS: 150
       TERM: xterm-256color
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - arch: amd64
+            runner: ubuntu-24.04
+
+          # On x86_64 gcov sees simd_neon.c as a file with no code in it, so the
+          # NEON kernels are absent from the report rather than shown uncovered.
+          - arch: arm64
+            runner: ubuntu-24.04-arm
     steps:
       - uses: actions/checkout@v4
 
@@ -157,10 +193,15 @@ jobs:
 
       # Tokenless uploads are rate limited, so pass CODECOV_TOKEN if the repo
       # has it. A failed upload should not fail the build either way.
+      #
+      # The two architectures cover different sets of lines, so they upload
+      # under separate flags and codecov merges them into one report instead of
+      # the second arriving as a replacement for the first.
       - name: Upload to codecov
         uses: codecov/codecov-action@v5
         with:
           files: coverage.xml
+          flags: ${{ matrix.arch }}
           token: ${{ secrets.CODECOV_TOKEN }}
           fail_ci_if_error: false
 
@@ -168,5 +209,5 @@ jobs:
         if: failure()
         uses: actions/upload-artifact@v4
         with:
-          name: meson-logs-coverage
+          name: meson-logs-coverage-${{ matrix.arch }}
           path: build/meson-logs/

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to