diff --git a/.github/actions/install-zig/action.yml b/.github/actions/install-zig/action.yml new file mode 100644 index 0000000000..75d937baeb --- /dev/null +++ b/.github/actions/install-zig/action.yml @@ -0,0 +1,62 @@ +name: 'install-zig' +description: 'Install zig compiler and make it available in PATH.' + +inputs: + sudo: + description: 'Specify a sudo command. Put it empty when sudo is not available.' + required: false + default: 'sudo' + +runs: + using: "composite" + steps: + - name: Store zig version as local output + shell: bash + id: store + env: + ZIG_VERSION: '0.14.0-dev.1632+d83a3f174' + run: | + echo "zig_version=${ZIG_VERSION}" >> "$GITHUB_OUTPUT" + + # TODO: this is only needed because we are using a development version of zig, + # since we need https://github.com/ziglang/zig/pull/21253 to be included. + # Development versions of zig are not kept alive forever, but get overridden. + # We cache it to keep it alive. + - name: Download zig (cached) + id: cache-zig + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + with: + path: /usr/local/zig + key: zig-${{ runner.os }}-${{ runner.arch }}-${{ steps.store.outputs.zig_version }} + + - name: Download zig + if: steps.cache-zig.outputs.cache-hit != 'true' + shell: bash + run: | + curl -L -o zig.tar.xz https://ziglang.org/builds/zig-linux-$(uname -m)-${{ steps.store.outputs.zig_version }}.tar.xz + tar -xvf zig.tar.xz + + cat > zig-linux-$(uname -m)-${{ steps.store.outputs.zig_version }}/zig-cc < zig-linux-$(uname -m)-${{ steps.store.outputs.zig_version }}/zig-c++ <> $GITHUB_PATH + echo "CC=zig-cc" >> $GITHUB_ENV + echo "CXX=zig-c++" >> $GITHUB_ENV + echo "AR=zig ar" >> $GITHUB_ENV + echo "RANLIB=zig ranlib" >> $GITHUB_ENV \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2957148a63..beea94ccc3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: fail-fast: false matrix: arch: [amd64, arm64] - name: [system_deps, bundled_deps, system_deps_minimal, sanitizers] + name: [system_deps, bundled_deps, system_deps_minimal, sanitizers, zig] include: - name: system_deps cmake_opts: -DBUILD_WARNINGS_AS_ERRORS=On -DBUILD_BPF=On -DUSE_BUNDLED_DEPS=False @@ -31,6 +31,8 @@ jobs: cmake_opts: -DBUILD_WARNINGS_AS_ERRORS=On -DUSE_BUNDLED_DEPS=False -DMINIMAL_BUILD=True - name: sanitizers cmake_opts: -DUSE_ASAN=On -DUSE_UBSAN=On -DUSE_BUNDLED_DEPS=False + - name: zig + cmake_opts: -DUSE_BUNDLED_DEPS=True container: image: debian:buster steps: @@ -59,6 +61,12 @@ jobs: run: | git config --global --add safe.directory $GITHUB_WORKSPACE + - name: Install zig + if: matrix.name == 'zig' + uses: ./.github/actions/install-zig + with: + sudo: '' + - name: Build and test ๐Ÿ—๏ธ๐Ÿงช env: UBSAN_OPTIONS: print_stacktrace=1 @@ -68,6 +76,19 @@ jobs: KERNELDIR=/lib/modules/$(ls /lib/modules)/build make -j4 make run-unit-tests + # On zig, build also sinsp-example and check the glibc linked versions + # to make sure we are actually using the correct glibc version. + - name: Test zig build glibc version + if: matrix.name == 'zig' + run: | + cd build + objdump -T libsinsp/test/unit-test-libsinsp | grep -Eo 'GLIBC_\S+' | sort -u -t "." -k1,1n -k2,2n -k3,3n + linked_glibc=$(objdump -T libsinsp/test/unit-test-libsinsp | grep -Eo 'GLIBC_\S+' | sort -u -t "." -k1,1n -k2,2n -k3,3n | tail -n1 | tr -d ')') + if [ "$linked_glibc" != "GLIBC_2.17" ]; then + echo "Expected glibc 2.17; found $linked_glibc" + exit 1 + fi + build-libs-linux-amd64-static: name: build-libs-linux-amd64-static ๐ŸŽƒ runs-on: ubuntu-latest diff --git a/userspace/libsinsp/test/CMakeLists.txt b/userspace/libsinsp/test/CMakeLists.txt index 44e50efa2f..8a95ce67c2 100644 --- a/userspace/libsinsp/test/CMakeLists.txt +++ b/userspace/libsinsp/test/CMakeLists.txt @@ -58,7 +58,9 @@ if((NOT ${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "s390x") AND ${SCAP_FILES_SUITE_ file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/scap_files") # Add here the name for new scap-files set(SCAP_FILE_NAMES "kexec_arm64.scap" "kexec_x86.scap" "sample.scap") - set(SCAP_FILE_DOWNLOAD_PREFIX "https://download.falco.org/fixtures/libs/scap_files") + set(SCAP_FILE_DOWNLOAD_PREFIX + "https://falco-distribution.s3.eu-west-1.amazonaws.com/fixtures/libs/scap_files" + ) message(STATUS "Download all scap-files from: ${SCAP_FILE_DOWNLOAD_PREFIX}") foreach(FILE_NAME ${SCAP_FILE_NAMES}) message(STATUS "Downloading scap-file: ${SCAP_FILE_DOWNLOAD_PREFIX}/${FILE_NAME}")