This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/add-fuzzing in repository https://gitbox.apache.org/repos/asf/celix.git
commit 8ae7acd271f3f2bae72ebb0bef905246f3a96d9c Author: Pepijn Noltes <pnol...@apache.org> AuthorDate: Thu Aug 14 15:42:00 2025 +0200 Add fuzzing workflow and enable benchmarking options in CI configurations --- .github/workflows/fuzzing.yml | 59 +++++++++++++++++++++++++++++++++ .github/workflows/macos.yml | 4 ++- .github/workflows/ubuntu.yml | 3 ++ cmake/cmake_celix/BundlePackaging.cmake | 28 ++++++++-------- 4 files changed, 79 insertions(+), 15 deletions(-) diff --git a/.github/workflows/fuzzing.yml b/.github/workflows/fuzzing.yml new file mode 100644 index 000000000..3548624f3 --- /dev/null +++ b/.github/workflows/fuzzing.yml @@ -0,0 +1,59 @@ +name: Celix Fuzzing + +on: + push: + pull_request: + schedule: + - cron: '0 3 * * *' + +jobs: + fuzz-utils: + runs-on: ubuntu-22.04 + timeout-minutes: 30 + steps: + - name: Checkout source code + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c #v3.3.0 + - name: Set up Python + uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c #v4.9.1 + with: + python-version: '3.x' + - name: Set Compiler Environment Variables + run: | + echo "CC=clang" >> $GITHUB_ENV + echo "CXX=clang++" >> $GITHUB_ENV + - name: Install Conan + run: pip install conan + - name: Cache Conan + uses: actions/cache@v3 + with: + path: ~/.conan2/p + key: ${{ runner.os }}-conan-${{ hashFiles('conanfile.py', 'libs/utils/**') }} + restore-keys: | + ${{ runner.os }}-conan- + - name: Setup Conan Profile + run: | + conan profile detect + - name: Conan install + run: conan install . --output-folder=build --build=missing -o "celix/*:build_utils=True" -o "celix/*:enable_fuzzing=True" + - name: Conan build + run: conan build . --output-folder=build -o "celix/*:build_utils=True" -o "celix/*:enable_fuzzing=True" + - name: Set fuzzer run time + id: set-runtime + run: | + if [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "FUZZ_TIME=600" >> ${GITHUB_ENV} + else + echo "FUZZ_TIME=30" >> ${GITHUB_ENV} + fi + - name: Run properties fuzzer + run: | + source build/conanrun.sh + ./build/libs/utils/fuzzing/celix_properties_fuzzer -max_total_time=$FUZZ_TIME ./build/libs/utils/fuzzing/properties_corpus + - name: Run version fuzzer + run: | + source build/conanrun.sh + ./build/libs/utils/fuzzing/celix_version_fuzzer -max_total_time=$FUZZ_TIME ./build/libs/utils/fuzzing/version_corpus + - name: Run filter fuzzer + run: | + source build/conanrun.sh + ./build/libs/utils/fuzzing/celix_filter_fuzzer -max_total_time=$FUZZ_TIME ./build/libs/utils/fuzzing/filter_corpus diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index e0040b5e0..dd906497c 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -54,6 +54,7 @@ jobs: env: CONAN_BUILD_OPTIONS: | -o celix/*:enable_testing=True + -o celix/*:enable_benchmarking=True -o celix/*:enable_address_sanitizer=True -o celix/*:build_all=True -o celix/*:enable_cmake_warning_tests=True @@ -77,7 +78,7 @@ jobs: uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c #v3.3.0 - name: Install dependencies run: | - brew install lcov jansson rapidjson libzip ccache ninja openssl@1.1 + brew install lcov jansson rapidjson libzip ccache ninja openssl@1.1 google-benchmark - name: Prepare ccache timestamp id: ccache_cache_timestamp run: | @@ -93,6 +94,7 @@ jobs: env: BUILD_OPTIONS: | -DENABLE_TESTING=ON + -DENABLE_BENCHMARKING=ON -DENABLE_ADDRESS_SANITIZER=ON -DENABLE_TESTING_ON_CI=ON -DCMAKE_BUILD_TYPE=Release diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index a472b72e8..07de8bc08 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -77,6 +77,7 @@ jobs: CXX: ${{ matrix.compiler[1] }} CONAN_BUILD_OPTIONS: | -o celix:enable_testing=True + -o celix:enable_benchmarking=True -o celix:enable_address_sanitizer=True -o celix:build_all=True -o celix:enable_cmake_warning_tests=True @@ -120,6 +121,7 @@ jobs: libzip-dev \ libjansson-dev \ libcurl4-openssl-dev \ + libbenchmark-dev \ default-jdk \ cmake \ libffi-dev \ @@ -145,6 +147,7 @@ jobs: BUILD_OPTIONS: | -DBUILD_EXPERIMENTAL=ON -DENABLE_TESTING=ON + -DENABLE_BENCHMARKING=ON -DRSA_JSON_RPC=ON -DRSA_REMOTE_SERVICE_ADMIN_SHM_V2=ON -DENABLE_TESTING_ON_CI=ON diff --git a/cmake/cmake_celix/BundlePackaging.cmake b/cmake/cmake_celix/BundlePackaging.cmake index 9c1335e87..e181f052a 100644 --- a/cmake/cmake_celix/BundlePackaging.cmake +++ b/cmake/cmake_celix/BundlePackaging.cmake @@ -289,23 +289,23 @@ function(add_celix_bundle) ######################################################### ###### Packaging the bundle using using jar or zip and a content dir. Configuring dependencies ###### - if (JAR_COMMAND) + if (ZIP_COMMAND) + file(MAKE_DIRECTORY ${BUNDLE_CONTENT_DIR}) #Note needed because working_directory is bundle content dir add_custom_command(OUTPUT ${BUNDLE_FILE} - COMMAND ${CMAKE_COMMAND} -E make_directory ${BUNDLE_CONTENT_DIR} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${BUNDLE_GEN_DIR}/MANIFEST.json ${BUNDLE_CONTENT_DIR}/META-INF/MANIFEST.json - COMMAND ${JAR_COMMAND} ${CELIX_JAR_COMMAND_ARGUMENTS} ${BUNDLE_FILE} -C ${BUNDLE_CONTENT_DIR} . + COMMAND ${ZIP_COMMAND} ${CELIX_ZIP_COMMAND_ARGUMENTS} ${BUNDLE_FILE} * COMMENT "Packaging ${BUNDLE_TARGET_NAME}" DEPENDS ${BUNDLE_TARGET_NAME} "$<TARGET_PROPERTY:${BUNDLE_TARGET_NAME},BUNDLE_DEPEND_TARGETS>" ${BUNDLE_GEN_DIR}/MANIFEST.json - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + WORKING_DIRECTORY ${BUNDLE_CONTENT_DIR} ) - elseif (ZIP_COMMAND) - file(MAKE_DIRECTORY ${BUNDLE_CONTENT_DIR}) #Note needed because working_directory is bundle content dir + elseif (JAR_COMMAND) add_custom_command(OUTPUT ${BUNDLE_FILE} + COMMAND ${CMAKE_COMMAND} -E make_directory ${BUNDLE_CONTENT_DIR} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${BUNDLE_GEN_DIR}/MANIFEST.json ${BUNDLE_CONTENT_DIR}/META-INF/MANIFEST.json - COMMAND ${ZIP_COMMAND} ${CELIX_ZIP_COMMAND_ARGUMENTS} ${BUNDLE_FILE} * + COMMAND ${JAR_COMMAND} ${CELIX_JAR_COMMAND_ARGUMENTS} ${BUNDLE_FILE} -C ${BUNDLE_CONTENT_DIR} . COMMENT "Packaging ${BUNDLE_TARGET_NAME}" DEPENDS ${BUNDLE_TARGET_NAME} "$<TARGET_PROPERTY:${BUNDLE_TARGET_NAME},BUNDLE_DEPEND_TARGETS>" ${BUNDLE_GEN_DIR}/MANIFEST.json - WORKING_DIRECTORY ${BUNDLE_CONTENT_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) else () message(FATAL_ERROR "A jar or zip command is needed to jar/zip bundles") @@ -936,21 +936,21 @@ function(install_celix_bundle) set(BUNDLE_FILE_INSTALL "${BUNDLE_FILE}.install") get_target_property(BUNDLE_FILE_NAME ${BUNDLE} "BUNDLE_FILE_NAME") get_target_property(BUNDLE_GEN_DIR ${BUNDLE} "BUNDLE_GEN_DIR") - if (JAR_COMMAND) + if (ZIP_COMMAND) install(CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${BUNDLE_GEN_DIR}/MANIFEST.json META-INF/MANIFEST.json - COMMAND ${JAR_COMMAND} ${CELIX_JAR_COMMAND_ARGUMENTS} ${BUNDLE_FILE_INSTALL} -C ${BUNDLE_CONTENT_DIR} . - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${ZIP_COMMAND} ${CELIX_ZIP_COMMAND_ARGUMENTS} ${BUNDLE_FILE_INSTALL} . -i * + WORKING_DIRECTORY ${BUNDLE_CONTENT_DIR} )" COMPONENT ${BUNDLE} ) - elseif (ZIP_COMMAND) + elseif (JAR_COMMAND) install(CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${BUNDLE_GEN_DIR}/MANIFEST.json META-INF/MANIFEST.json - COMMAND ${ZIP_COMMAND} ${CELIX_ZIP_COMMAND_ARGUMENTS} ${BUNDLE_FILE_INSTALL} . -i * - WORKING_DIRECTORY ${BUNDLE_CONTENT_DIR} + COMMAND ${JAR_COMMAND} ${CELIX_JAR_COMMAND_ARGUMENTS} ${BUNDLE_FILE_INSTALL} -C ${BUNDLE_CONTENT_DIR} . + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )" COMPONENT ${BUNDLE} )