Loading .clang-tidy 0 → 100644 +4 −0 Original line number Diff line number Diff line Checks: '-*,clang-analyzer-*' WarningsAsErrors: '' HeaderFilterRegex: '(^|/)(src|include)/' FormatStyle: none No newline at end of file .gitlab-ci.yml +51 −0 Original line number Diff line number Diff line Loading @@ -666,6 +666,57 @@ cppcheck: codequality: cppcheck2.json expire_in: 5 days static-analysis: stage: report image: ${TESTING} needs: [gkfs] script: - cd ${CI_PROJECT_DIR} - ${SCRIPTS_DIR}/check_static_analysis.sh --cppcheck --require-tools --build-dir ${BUILD_PATH} --output-dir analysis - ${SCRIPTS_DIR}/check_static_analysis.sh --clang-tidy --require-tools --build-dir ${BUILD_PATH} --output-dir analysis --clang-tidy-files src/common/rpc/distributor.cpp src/common/rpc/distributor_factory.cpp src/common/rpc/distribution_config.cpp src/daemon/classes/fs_data.cpp src/daemon/handler/srv_malleability.cpp src/client/rpc/forward_malleability.cpp artifacts: when: always paths: - analysis expire_in: 5 days abi: stage: report image: ${TESTING} needs: [gkfs] script: - cd ${CI_PROJECT_DIR} - ${SCRIPTS_DIR}/check_abi.sh --build-dir ${BUILD_PATH} artifacts: when: always paths: - abi expire_in: 5 days sanitizers: stage: report image: ${DEPS} needs: [] parallel: matrix: - SANITIZER: [asan, ubsan, tsan] script: - cd ${CI_PROJECT_DIR} - cmake --preset ci-${SANITIZER} - cmake --build ${CI_PROJECT_DIR}/gkfs/build-${SANITIZER} --target unit_tests --parallel $(nproc) - ctest --test-dir ${CI_PROJECT_DIR}/gkfs/build-${SANITIZER} --output-on-failure -L unit::all ################################################################################ ## Deployment of documentation and reports Loading CMakeLists.txt +2 −0 Original line number Diff line number Diff line Loading @@ -234,11 +234,13 @@ find_package(Threads REQUIRED) # details transparently find_package(Filesystem REQUIRED) if (GKFS_BUILD_FUSE) find_package(PkgConfig REQUIRED) pkg_check_modules(FUSE3 REQUIRED fuse3) include_directories(${FUSE3_INCLUDE_DIRS}) link_directories(${FUSE3_LIBRARY_DIRS}) add_definitions(${FUSE3_CFLAGS_OTHER}) endif () # Search for 'source-only' dependencies ############################################################################### Loading CMakePresets.json +105 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,48 @@ "GKFS_GENERATE_COVERAGE_REPORTS": true } }, { "name": "asan", "hidden": true, "inherits": "debug", "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false, "CMAKE_CXX_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=address -fno-omit-frame-pointer", "CMAKE_C_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=address -fno-omit-frame-pointer", "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address", "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=address" } }, { "name": "ubsan", "hidden": true, "inherits": "debug", "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false, "CMAKE_CXX_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=undefined -fno-omit-frame-pointer", "CMAKE_C_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=undefined -fno-omit-frame-pointer", "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=undefined", "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=undefined" } }, { "name": "tsan", "hidden": true, "inherits": "debug", "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false, "CMAKE_CXX_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=thread -fno-omit-frame-pointer", "CMAKE_C_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=thread -fno-omit-frame-pointer", "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=thread", "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=thread" } }, { "name": "docs", "inherits": "debug", Loading Loading @@ -96,6 +138,36 @@ "coverage" ] }, { "name": "default-asan", "displayName": "Default gekkofs (AddressSanitizer)", "inherits": ["default", "asan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "default-ubsan", "displayName": "Default gekkofs (UndefinedBehaviorSanitizer)", "inherits": ["default", "ubsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "default-tsan", "displayName": "Default gekkofs (ThreadSanitizer)", "inherits": ["default", "tsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "default-release", "displayName": "Default gekkofs (release)", Loading @@ -122,6 +194,39 @@ "coverage" ] }, { "name": "ci-asan", "displayName": "CI GekkoFS (AddressSanitizer)", "binaryDir": "${sourceDir}/gkfs/build-asan", "inherits": ["ci", "default", "asan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "ci-ubsan", "displayName": "CI GekkoFS (UndefinedBehaviorSanitizer)", "binaryDir": "${sourceDir}/gkfs/build-ubsan", "inherits": ["ci", "default", "ubsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "ci-tsan", "displayName": "CI GekkoFS (ThreadSanitizer)", "binaryDir": "${sourceDir}/gkfs/build-tsan", "inherits": ["ci", "default", "tsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "ci-docs", "displayName": "Documentation (CI flags)", Loading WIP.md +11 −0 Original line number Diff line number Diff line Loading @@ -490,6 +490,17 @@ clang-tidy/cppcheck with narrow reviewed suppressions. Add ABI checks for exported client/user-library symbols and application-facing structs. Publish actionable reports and triage new warnings. **Status: Done for the supported automated scope.** Added reproducible ASan, UBSan, and TSan CMake presets and CI unit-test jobs; a local/CI cppcheck and clang-tidy runner with checked-in policy and report artifacts; and exported symbol-set ABI checks with reviewed baselines for the client, user-library, and libc-interception libraries. Reports are documented in `docs/sphinx/devs/analysis.md`. The ABI check intentionally covers exported symbol presence only. Type/layout ABI compatibility still requires `abi-dumper`/`abi-compliance-checker`, which are not available in the supported build images and remain a follow-up. ### 28. Build a compatibility corpus Maintain small reproducible workloads for `cp`, `tar`, `find`, `dd`, MPI-IO, Loading Loading
.clang-tidy 0 → 100644 +4 −0 Original line number Diff line number Diff line Checks: '-*,clang-analyzer-*' WarningsAsErrors: '' HeaderFilterRegex: '(^|/)(src|include)/' FormatStyle: none No newline at end of file
.gitlab-ci.yml +51 −0 Original line number Diff line number Diff line Loading @@ -666,6 +666,57 @@ cppcheck: codequality: cppcheck2.json expire_in: 5 days static-analysis: stage: report image: ${TESTING} needs: [gkfs] script: - cd ${CI_PROJECT_DIR} - ${SCRIPTS_DIR}/check_static_analysis.sh --cppcheck --require-tools --build-dir ${BUILD_PATH} --output-dir analysis - ${SCRIPTS_DIR}/check_static_analysis.sh --clang-tidy --require-tools --build-dir ${BUILD_PATH} --output-dir analysis --clang-tidy-files src/common/rpc/distributor.cpp src/common/rpc/distributor_factory.cpp src/common/rpc/distribution_config.cpp src/daemon/classes/fs_data.cpp src/daemon/handler/srv_malleability.cpp src/client/rpc/forward_malleability.cpp artifacts: when: always paths: - analysis expire_in: 5 days abi: stage: report image: ${TESTING} needs: [gkfs] script: - cd ${CI_PROJECT_DIR} - ${SCRIPTS_DIR}/check_abi.sh --build-dir ${BUILD_PATH} artifacts: when: always paths: - abi expire_in: 5 days sanitizers: stage: report image: ${DEPS} needs: [] parallel: matrix: - SANITIZER: [asan, ubsan, tsan] script: - cd ${CI_PROJECT_DIR} - cmake --preset ci-${SANITIZER} - cmake --build ${CI_PROJECT_DIR}/gkfs/build-${SANITIZER} --target unit_tests --parallel $(nproc) - ctest --test-dir ${CI_PROJECT_DIR}/gkfs/build-${SANITIZER} --output-on-failure -L unit::all ################################################################################ ## Deployment of documentation and reports Loading
CMakeLists.txt +2 −0 Original line number Diff line number Diff line Loading @@ -234,11 +234,13 @@ find_package(Threads REQUIRED) # details transparently find_package(Filesystem REQUIRED) if (GKFS_BUILD_FUSE) find_package(PkgConfig REQUIRED) pkg_check_modules(FUSE3 REQUIRED fuse3) include_directories(${FUSE3_INCLUDE_DIRS}) link_directories(${FUSE3_LIBRARY_DIRS}) add_definitions(${FUSE3_CFLAGS_OTHER}) endif () # Search for 'source-only' dependencies ############################################################################### Loading
CMakePresets.json +105 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,48 @@ "GKFS_GENERATE_COVERAGE_REPORTS": true } }, { "name": "asan", "hidden": true, "inherits": "debug", "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false, "CMAKE_CXX_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=address -fno-omit-frame-pointer", "CMAKE_C_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=address -fno-omit-frame-pointer", "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address", "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=address" } }, { "name": "ubsan", "hidden": true, "inherits": "debug", "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false, "CMAKE_CXX_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=undefined -fno-omit-frame-pointer", "CMAKE_C_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=undefined -fno-omit-frame-pointer", "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=undefined", "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=undefined" } }, { "name": "tsan", "hidden": true, "inherits": "debug", "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false, "CMAKE_CXX_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=thread -fno-omit-frame-pointer", "CMAKE_C_FLAGS": "-Wall -Wextra -g -O1 -fsanitize=thread -fno-omit-frame-pointer", "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=thread", "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=thread" } }, { "name": "docs", "inherits": "debug", Loading Loading @@ -96,6 +138,36 @@ "coverage" ] }, { "name": "default-asan", "displayName": "Default gekkofs (AddressSanitizer)", "inherits": ["default", "asan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "default-ubsan", "displayName": "Default gekkofs (UndefinedBehaviorSanitizer)", "inherits": ["default", "ubsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "default-tsan", "displayName": "Default gekkofs (ThreadSanitizer)", "inherits": ["default", "tsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "default-release", "displayName": "Default gekkofs (release)", Loading @@ -122,6 +194,39 @@ "coverage" ] }, { "name": "ci-asan", "displayName": "CI GekkoFS (AddressSanitizer)", "binaryDir": "${sourceDir}/gkfs/build-asan", "inherits": ["ci", "default", "asan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "ci-ubsan", "displayName": "CI GekkoFS (UndefinedBehaviorSanitizer)", "binaryDir": "${sourceDir}/gkfs/build-ubsan", "inherits": ["ci", "default", "ubsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "ci-tsan", "displayName": "CI GekkoFS (ThreadSanitizer)", "binaryDir": "${sourceDir}/gkfs/build-tsan", "inherits": ["ci", "default", "tsan"], "cacheVariables": { "GKFS_BUILD_TESTS": true, "GKFS_BUILD_FUSE": false, "GKFS_BUILD_PERFORMANCE": false } }, { "name": "ci-docs", "displayName": "Documentation (CI flags)", Loading
WIP.md +11 −0 Original line number Diff line number Diff line Loading @@ -490,6 +490,17 @@ clang-tidy/cppcheck with narrow reviewed suppressions. Add ABI checks for exported client/user-library symbols and application-facing structs. Publish actionable reports and triage new warnings. **Status: Done for the supported automated scope.** Added reproducible ASan, UBSan, and TSan CMake presets and CI unit-test jobs; a local/CI cppcheck and clang-tidy runner with checked-in policy and report artifacts; and exported symbol-set ABI checks with reviewed baselines for the client, user-library, and libc-interception libraries. Reports are documented in `docs/sphinx/devs/analysis.md`. The ABI check intentionally covers exported symbol presence only. Type/layout ABI compatibility still requires `abi-dumper`/`abi-compliance-checker`, which are not available in the supported build images and remain a follow-up. ### 28. Build a compatibility corpus Maintain small reproducible workloads for `cp`, `tar`, `find`, `dd`, MPI-IO, Loading