Skip to content

libddwaf update 1.23.0 #964

libddwaf update 1.23.0

libddwaf update 1.23.0 #964

Workflow file for this run

name: Build Native Libraries
on:
pull_request:
push:
branches: [ master ]
tags:
- '*'
defaults:
run:
shell: bash
env:
buildType: RelWithDebInfo
tempdir: ${{ github.workspace }}/build
libddwafVersion: 1.23.0
jobs:
Coverage:
runs-on: ubuntu-22.04
if: "!(contains(github.ref, 'refs/tags/v'))"
steps:
- uses: actions/checkout@v4
name: Checkout
with:
submodules: recursive
clean: true
- name: Cache Gradle artifacts
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build and test
run: |
./gradlew check jacocoTestReport
- name: Generate native coverage report
run: |
sudo apt-get install -y gcovr
gcovr -f '.*src/main/c/.*' -x -d -o build/coverage.xml
- name: Submit coverage
uses: codecov/codecov-action@v2
with:
flags: helper
verbose: true
files: build/coverage.xml,build/reports/jacoco/test/jacocoTestReport.xml
Native_binaries_Stage_macos_x86_64:
name: MacOS x86_64
runs-on: macos-13
env:
generator: Unix Makefiles
shlib_prefix: lib
shlib_ext: dylib
debug_ext: dylib.dwarf
artifactsuff: macos-x86_64
libdir: macos/x86_64
steps:
- uses: actions/checkout@v4
name: Checkout
- name: Select Xcode version
# Matches libddwaf https://github.com/DataDog/libddwaf/blob/6aabaa97fb224c251dacc70e427a4c1d7d985af4/.github/workflows/build.yml#L68-L69
run: sudo xcode-select --switch /Applications/Xcode_14.3.1.app
- name: Prepare libddwaf
run: |
# Get sha256sum
brew install coreutils
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-darwin-x86_64.tar.gz
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-darwin-x86_64.tar.gz.sha256
sha256sum --check libddwaf-${{ env.libddwafVersion }}-darwin-x86_64.tar.gz.sha256
mkdir -p libddwaf/out
tar xvzf libddwaf-${{ env.libddwafVersion }}-darwin-x86_64.tar.gz -C libddwaf/out --strip-components=1
mv libddwaf/out/lib/.build-id/*/*.debug libddwaf/out/lib/libddwaf.dylib.dwarf
- name: Create Build Directory for JNI binding
run: cmake -E make_directory "${{ env.tempdir }}/buildAG"
- name: Generate Build Scripts for JNI binding
run: |
cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_BUILD_TYPE=${{ env.buildType }} \
-DCMAKE_PREFIX_PATH='${{ github.workspace }}/libddwaf/out/share/cmake/libddwaf/' \
-DCMAKE_C_FLAGS="-fno-omit-frame-pointer" \
-G "${{ env.generator }}" ${{ github.workspace }}
working-directory: ${{ env.tempdir }}/buildAG
- name: Build Binaries for JNI Binding
run: cmake --build . --verbose
working-directory: ${{ env.tempdir }}/buildAG
- name: Copy libddwaf binaries to native_libs
run: |
cmake -E copy ${{ env.shlib_prefix }}ddwaf.${{ env.shlib_ext }} \
${{ env.shlib_prefix }}ddwaf.${{ env.debug_ext }} \
${{ github.workspace }}/native_libs/${{ env.libdir }}
working-directory: ${{ github.workspace }}/libddwaf/out/lib
- name: Copy JNI binding binaries to native_libs
run: |
cmake -E copy ${{ env.shlib_prefix }}sqreen_jni.${{ env.shlib_ext }} \
${{ env.shlib_prefix }}sqreen_jni.${{ env.debug_ext }} \
${{ github.workspace }}/native_libs/${{ env.libdir }}
working-directory: ${{ env.tempdir }}/buildAG
- name: Save Artifacts
uses: actions/upload-artifact@v4
with:
path: native_libs
name: libsqreen_jni_${{ env.artifactsuff }}
Native_binaries_Stage_macos_aarch64:
name: MacOS aarch64
runs-on: macos-13
env:
generator: Unix Makefiles
shlib_prefix: lib
shlib_ext: dylib
debug_ext: dylib.dwarf
artifactsuff: macos-aarch64
libdir: macos/aarch64
steps:
- uses: actions/checkout@v4
name: Checkout
- name: Select Xcode version
# Matches libddwaf https://github.com/DataDog/libddwaf/blob/6aabaa97fb224c251dacc70e427a4c1d7d985af4/.github/workflows/build.yml#L68-L69
run: sudo xcode-select --switch /Applications/Xcode_14.3.1.app
- name: Prepare libddwaf
run: |
# Get sha256sum
brew install coreutils
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-darwin-arm64.tar.gz
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-darwin-arm64.tar.gz.sha256
sha256sum --check libddwaf-${{ env.libddwafVersion }}-darwin-arm64.tar.gz.sha256
mkdir -p libddwaf/out
tar xvzf libddwaf-${{ env.libddwafVersion }}-darwin-arm64.tar.gz -C libddwaf/out --strip-components=1
mv libddwaf/out/lib/.build-id/*/*.debug libddwaf/out/lib/libddwaf.dylib.dwarf
- name: Create Build Directory for JNI binding
run: cmake -E make_directory "${{ env.tempdir }}/buildAG"
- name: Generate Build Scripts for JNI binding
run: |
cmake -DCMAKE_OSX_ARCHITECTURES=arm64 \
-DCMAKE_BUILD_TYPE=${{ env.buildType }} \
-DCMAKE_PREFIX_PATH='${{ github.workspace }}/libddwaf/out/share/cmake/libddwaf/' \
-DCMAKE_C_FLAGS="-fno-omit-frame-pointer" \
-G "${{ env.generator }}" ${{ github.workspace }}
working-directory: ${{ env.tempdir }}/buildAG
- name: Build Binaries for JNI Binding
run: cmake --build .
working-directory: ${{ env.tempdir }}/buildAG
- name: Copy libddwaf binaries to native_libs
run: |
cmake -E copy ${{ env.shlib_prefix }}ddwaf.${{ env.shlib_ext }} \
${{ env.shlib_prefix }}ddwaf.${{ env.debug_ext }} \
${{ github.workspace }}/native_libs/${{ env.libdir }}
working-directory: ${{ github.workspace }}/libddwaf/out/lib
- name: Copy JNI binding binaries to native_libs
run: |
cmake -E copy ${{ env.shlib_prefix }}sqreen_jni.${{ env.shlib_ext }} \
${{ env.shlib_prefix }}sqreen_jni.${{ env.debug_ext }} \
${{ github.workspace }}/native_libs/${{ env.libdir }}
working-directory: ${{ env.tempdir }}/buildAG
- name: Save Artifacts
uses: actions/upload-artifact@v4
with:
path: native_libs
name: libsqreen_jni_${{ env.artifactsuff }}
Native_binaries_Stage_windows_x86_64:
name: Windows x86_64
runs-on: windows-2019
defaults:
run:
shell: cmd
env:
generator: NMake Makefiles
shlib_prefix:
shlib_ext: dll
debug_ext: pdb
artifactsuff: win-x86_64
libdir: windows/x86_64
steps:
- uses: actions/checkout@v4
name: Checkout
- uses: ilammy/msvc-dev-cmd@v1
name: Setup x86_64 build
with:
toolset: 14.29
arch: amd64
- name: Prepare libddwaf
run: |
choco install wget --no-progress
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-windows-x64.tar.gz
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-windows-x64.tar.gz.sha256
sha256sum --check libddwaf-${{ env.libddwafVersion }}-windows-x64.tar.gz.sha256
mkdir -p libddwaf/out
tar xvzf libddwaf-${{ env.libddwafVersion }}-windows-x64.tar.gz -C libddwaf/out --strip-components=1
shell: bash
- name: Create Build Directory for JNI binding
run: cmake -E make_directory "${{ env.tempdir }}/buildAG"
- name: Generate Build Scripts for JNI binding
run: |
cmake -DCMAKE_BUILD_TYPE=${{ env.buildType }} -DCMAKE_PREFIX_PATH="${{ github.workspace }}/libddwaf/out/share/cmake/libddwaf/" -G "${{ env.generator }}" "${{ github.workspace }}"
working-directory: ${{ env.tempdir }}/buildAG
- name: Build Binaries for JNI Binding
run: cmake --build .
working-directory: ${{ env.tempdir }}/buildAG
- name: Copy JNI binding binaries to native_libs
run: cmake -E copy ${{ env.shlib_prefix }}sqreen_jni.${{ env.shlib_ext }} ${{ env.shlib_prefix }}sqreen_jni.${{ env.debug_ext }} ${{ github.workspace }}\native_libs\${{ env.libdir }}
shell: cmd
working-directory: ${{ env.tempdir }}/buildAG
- name: Save Artifacts
uses: actions/upload-artifact@v4
with:
path: native_libs
name: libsqreen_jni_${{ env.artifactsuff }}
Native_binaries_Stage_linux:
strategy:
fail-fast: false
matrix:
include:
- libc: glibc
arch: x86_64
dockerfile: ci/manylinux/x86_64
runs-on: ubuntu-24.04
- libc: musl
arch: x86_64
dockerfile: ci/alpine
runs-on: ubuntu-24.04
- libc: glibc
arch: aarch64
dockerfile: ci/manylinux/aarch64
runs-on: arm-4core-linux-ubuntu24.04
- libc: musl
arch: aarch64
dockerfile: ci/alpine
runs-on: arm-4core-linux-ubuntu24.04
name: Linux ${{ matrix.libc }} ${{ matrix.arch }}
runs-on: ${{ matrix.runs-on }}
env:
artifactsuff: linux_${{ matrix.libc }}-${{ matrix.arch }}
libdir: linux/${{ matrix.arch }}/${{ matrix.libc }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Prepare libddwaf
run: |
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-${{ matrix.arch }}-linux-musl.tar.gz
wget https://github.com/DataDog/libddwaf/releases/download/${{ env.libddwafVersion }}/libddwaf-${{ env.libddwafVersion }}-${{ matrix.arch }}-linux-musl.tar.gz.sha256
sha256sum --check libddwaf-${{ env.libddwafVersion }}-${{ matrix.arch }}-linux-musl.tar.gz.sha256
mkdir -p libddwaf/out
tar xvzf libddwaf-${{ env.libddwafVersion }}-${{ matrix.arch }}-linux-musl.tar.gz -C libddwaf/out --strip-components=1
mv libddwaf/out/lib/.build-id/*/*.debug libddwaf/out/lib/libddwaf.so.debug
- name: Build docker linux image
run: docker build ${{ matrix.dockerfile }} -t linux_cmake
- name: Build bindings
run: |
docker run --name pwaf_java_build -u $(id -u):$(id -g) -w ${{ github.workspace }} -v ${{ github.workspace }}:${{ github.workspace }} linux_cmake bash -e -c 'export VERBOSE=1;
export LIBDDWAF_INSTALL_PREFIX=${{ github.workspace }}/libddwaf/out;
set -x;
mkdir buildAG &&
cd buildAG &&
cmake ${{ github.workspace }} -DCMAKE_PREFIX_PATH=$LIBDDWAF_INSTALL_PREFIX/share/cmake/libddwaf -DCMAKE_BUILD_TYPE=${{ env.buildType }} -DCMAKE_C_FLAGS="-fno-omit-frame-pointer" &&
make -j &&
cp -v $LIBDDWAF_INSTALL_PREFIX/lib/libddwaf.so{,.debug} ${{ github.workspace }}/native_libs/linux/${{ matrix.arch }}/ &&
cp -v *.so *.so.debug ${{ github.workspace }}/native_libs/${{ env.libdir }}'
shell: bash
- name: Save Artifacts
uses: actions/upload-artifact@v4
with:
path: native_libs
name: jni_${{ env.artifactsuff }}
Native_binaries_Stage_asan:
name: ASAN/static analyzer on Linux
runs-on: ubuntu-22.04
steps:
- name: Checkout project
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install GCC and clang
run: |
sudo apt-get update
sudo apt-get install -y libc++-dev libc++abi-dev libc++abi1 libstdc++-12-dev gcc g++ \
clang clang-tools ruby
shell: bash
- name: Build and test (with ASAN)
run: ./gradlew check -PwithASAN
- name: Run static analyzer
run: |
ci/static_analysis
shell: bash
Dev_Tests:
# Used to test our development workflow for debug builds.
# This should be in sync with whatever we document in the README.
strategy:
fail-fast: false
matrix:
include:
- runs-on: ubuntu-22.04
- runs-on: macos-15
name: Development tests
runs-on: ${{ matrix.runs-on }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
clean: true
- name: Setup JDK 11
uses: actions/setup-java@v4
with:
java-version: 11
distribution: temurin
- name: Build and run tests
run: ./gradlew check
Jmh_Build:
name: JMH Build
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
clean: true
- name: Setup JDK 8
uses: actions/setup-java@v4
with:
java-version: 8
distribution: temurin
- name: Build JMH jar
run: ./gradlew jmhJar
Jar_File_Stage_build_jar:
name: Build
runs-on: ubuntu-24.04
needs:
- Native_binaries_Stage_macos_x86_64
- Native_binaries_Stage_macos_aarch64
- Native_binaries_Stage_windows_x86_64
- Native_binaries_Stage_linux
- Native_binaries_Stage_asan
steps:
- name: Setup JDK 1.8
uses: actions/setup-java@v4
with:
java-version: 8
distribution: temurin
- uses: actions/checkout@v4
name: Checkout
with:
submodules: recursive
clean: true
- name: Download libsqreen_jni_win-x86_64
uses: actions/download-artifact@v4
with:
name: libsqreen_jni_win-x86_64
path: native_libs
- name: Download jni_linux_glibc-x86_64
uses: actions/download-artifact@v4
with:
name: jni_linux_glibc-x86_64
path: native_libs
- name: Download jni_linux_glibc-aarch64
uses: actions/download-artifact@v4
with:
name: jni_linux_glibc-aarch64
path: native_libs
- name: Download jni_linux_musl-x86_64
uses: actions/download-artifact@v4
with:
name: jni_linux_musl-x86_64
path: native_libs
- name: Download jni_linux_musl-aarch64
uses: actions/download-artifact@v4
with:
name: jni_linux_musl-aarch64
path: native_libs
- name: Download libsqreen_jni_macos-x86_64
uses: actions/download-artifact@v4
with:
name: libsqreen_jni_macos-x86_64
path: native_libs
- name: Download libsqreen_jni_macos_aarch64
uses: actions/download-artifact@v4
with:
name: libsqreen_jni_macos-aarch64
path: native_libs
- run: find .
working-directory: native_libs
- name: Cache Gradle artifacts
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build final JAR and debug symbols package
run: ./gradlew assemble
- name: Copy artifacts to the packages directory
run: |
set -ex
mkdir -p "${{ env.tempdir }}/packages"
cp ${{ github.workspace }}/build/libs/libsqreen-*.jar "${{ env.tempdir }}/packages"
cp ${{ github.workspace }}/build/distributions/libsqreen-*-dbgsym.zip "${{ env.tempdir }}/packages"
shell: bash
- name: Publish artifacts (native libs)
uses: actions/upload-artifact@v4
with:
path: native_libs
name: native_libs
- name: Publish artifacts (jars)
uses: actions/upload-artifact@v4
with:
path: ${{ env.tempdir }}/packages
name: libsqreen_jni_jar
Test:
name: Test
needs:
- Jar_File_Stage_build_jar
strategy:
fail-fast: false
matrix:
include:
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-temurin8
test_java_home_var: JAVA_8_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-temurin11
test_java_home_var: JAVA_11_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-temurin17
test_java_home_var: JAVA_17_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-temurin21
test_java_home_var: JAVA_21_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-semeru8
test_java_home_var: JAVA_SEMERU8_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-semeru11
test_java_home_var: JAVA_SEMERU11_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-semeru17
test_java_home_var: JAVA_SEMERU17_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: ubuntu2204-semeru21
test_java_home_var: JAVA_SEMERU21_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: centos7-stock8
test_java_home_var: JAVA_8_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: alpine-stock8
test_java_home_var: JAVA_8_HOME
- runs-on: ubuntu-24.04
os: linux
arch: x86_64
docker_image: centos6-stock8
test_java_home_var: JAVA_8_HOME
- runs-on: arm-4core-linux-ubuntu24.04
os: linux
arch: aarch64
docker_image: ubuntu2204-temurin8
test_java_home_var: JAVA_8_HOME
- runs-on: arm-4core-linux-ubuntu24.04
os: linux
arch: aarch64
docker_image: alpine-stock8
test_java_home_var: JAVA_8_HOME
- runs-on: macos-13
os: macos
arch: x86_64
jdk: temurin8
java_home_var: JAVA_HOME_8_X64
- runs-on: macos-14-large
os: macos
arch: x86_64
jdk: temurin8
java_home_var: JAVA_HOME_8_X64
- runs-on: macos-13-xlarge
os: macos
arch: aarch64
jdk: temurin11
java_home_var: JAVA_HOME_11_arm64
- runs-on: macos-14-large
os: macos
arch: x86_64
jdk: temurin11
java_home_var: JAVA_HOME_11_X64
- runs-on: macos-14
os: macos
arch: aarch64
jdk: temurin11
java_home_var: JAVA_HOME_11_arm64
- runs-on: macos-15
os: macos
arch: aarch64
jdk: temurin11
java_home_var: JAVA_HOME_11_arm64
- runs-on: macos-13
os: macos
arch: x86_64
jdk: temurin17
java_home_var: JAVA_HOME_17_X64
- runs-on: macos-15
os: macos
arch: aarch64
jdk: temurin17
java_home_var: JAVA_HOME_17_arm64
- runs-on: windows-2019
os: windows
arch: x86_64
jdk: temurin8
java_home_var: JAVA_HOME_8_X64
- runs-on: windows-2022
os: windows
arch: x86_64
jdk: temurin8
java_home_var: JAVA_HOME_8_X64
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v4
name: Checkout
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: native_libs
path: native_libs
- name: Build Docker image
run: docker build -t ${{ matrix.docker_image }} ci/${{ matrix.docker_image }}
if: ${{ matrix.docker_image != '' }}
- name: Run tests (docker)
run: |
docker run --rm -w $(pwd) -v $(pwd):$(pwd) ${{ matrix.docker_image }} \
sh -c './gradlew check --no-daemon --info -Prelease -PuseReleaseBinaries -Dorg.gradle.native=false -PtestJavaHome="$${{ matrix.test_java_home_var }}"'
if: ${{ matrix.os == 'linux' }}
- name: Run tests (no docker)
run: |
set -eux
export JAVA_HOME="$${{ matrix.java_home_var }}"
./gradlew check --info -Prelease -PuseReleaseBinaries
if: ${{ matrix.os != 'linux' }}
TestsPass:
# This test is a fan-in for GitHub branch rules
name: Tests pass
needs:
- Test
- Dev_Tests
- Jmh_Build
- Jar_File_Stage_build_jar
runs-on: ubuntu-24.04
steps:
- name: Done
run: echo Done
Publish:
name: Publish
runs-on: ubuntu-24.04
needs:
- Test
- Dev_Tests
- Jar_File_Stage_build_jar
if: contains(github.ref, 'refs/tags/v')
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
clean: true
- name: Setup JDK 1.8
uses: actions/setup-java@v4
with:
java-version: 8
distribution: temurin
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: native_libs
path: native_libs
- name: Publish artifacts to S3
run: ./gradlew publish
env:
AWS_ACCESS_KEY_ID: AKIA5VR734GFSK4FR2PD
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
if: (success() && contains(github.ref, 'refs/tags/v'))