Newer
Older
DEPS_SRC_PATH: "${CI_PROJECT_DIR}/deps/src"
DEPS_INSTALL_PATH: "${CI_PROJECT_DIR}/deps/install"
DEPS_COMMIT: "${CI_PROJECT_DIR}/deps/install/gkfs_deps_commit"
BUILD_PATH: "${CI_PROJECT_DIR}/gkfs/build"
INSTALL_PATH: "${CI_PROJECT_DIR}/gkfs/install"
INTEGRATION_TESTS_BIN_PATH: "${CI_PROJECT_DIR}/gkfs/install/share/gkfs/tests/integration"
INTEGRATION_TESTS_RUN_PATH: "${CI_PROJECT_DIR}/gkfs/install/share/gkfs/tests/integration/run"
TESTS_BUILD_PATH: "${CI_PROJECT_DIR}/test/build"
PYTEST: "${CI_PROJECT_DIR}/gkfs/install/share/gkfs/tests/integration/pytest-venv/bin/py.test"
LOG_PATH: "${CI_PROJECT_DIR}/logs"
LD_LIBRARY_PATH: "${CI_PROJECT_DIR}/deps/install/lib:${CI_PROJECT_DIR}/deps/install/lib64"
GKFS_LOG_LEVEL: "100"
GKFS_DAEMON_LOG_PATH: "${CI_PROJECT_DIR}/logs/daemon.log"
LIBGKFS_LOG: "all"
LIBGKFS_LOG_OUTPUT: "${CI_PROJECT_DIR}/logs/gkfs_client.log"
GIT_SUBMODULE_STRATEGY: recursive
################################################################################
## Validating
################################################################################
- ${CI_PROJECT_DIR}/scripts/check_format.sh -s "${CI_PROJECT_DIR}/src" -i "${CI_PROJECT_DIR}/include" -v
################################################################################
## Building
################################################################################
gkfs:
stage: build
image: gekkofs/deps:0.8.0
interruptible: true
- mkdir -p ${BUILD_PATH} && cd ${BUILD_PATH}
- cmake
-Wdev
-Wdeprecate
-DCMAKE_BUILD_TYPE=Debug
-DGKFS_ENABLE_CODE_COVERAGE:BOOL=ON
-DGKFS_BUILD_TESTS:BOOL=ON
-DGKFS_INSTALL_TESTS:BOOL=ON
-DCMAKE_PREFIX_PATH=${DEPS_INSTALL_PATH}
-DCMAKE_INSTALL_PREFIX=${INSTALL_PATH}
${CI_PROJECT_DIR}
- make -j$(nproc) install
- find ${BUILD_PATH} -name "*.o" -delete
# cleanup nlohmann_json: it includes around 500MiB of test data
- rm -rf ${BUILD_PATH}/_deps/nlohmann_json-src/test/data
- rm -rf ${BUILD_PATH}/_deps/nlohmann_json-src/benchmarks/data
- rm -rf ${BUILD_PATH}/_deps/nlohmann_json-src/.git
- ${BUILD_PATH}
- ${INSTALL_PATH}
exclude:
# remove object files
- ${BUILD_PATH}/**/*.o
image: gekkofs/deps:0.8.0
interruptible: true
needs: []
script:
- mkdir -p ${BUILD_PATH} && cd ${BUILD_PATH}
- cmake
-Wdev
-Wdeprecate
-DCMAKE_BUILD_TYPE=Debug
-DGKFS_INSTALL_TESTS:BOOL=ON
-DGKFS_ENABLE_FORWARDING:BOOL=ON
-DGKFS_ENABLE_AGIOS:BOOL=ON
-DCMAKE_INSTALL_PREFIX=${INSTALL_PATH}
${CI_PROJECT_DIR}
- make -j$(nproc) install
- find ${BUILD_PATH} -name "*.o" -delete
# cleanup nlohmann_json: it includes around 500MiB of test data
- rm -rf ${BUILD_PATH}/_deps/nlohmann_json-src/test/data
- rm -rf ${BUILD_PATH}/_deps/nlohmann_json-src/benchmarks/data
- rm -rf ${BUILD_PATH}/_deps/nlohmann_json-src/.git
- ${BUILD_PATH}
- ${INSTALL_PATH}
exclude:
# remove object files
- ${BUILD_PATH}/**/*.o
################################################################################
## Testing
################################################################################
## == integration tests for gkfs ===========
gkfs:integration:
image: gekkofs/testing:0.8.0
interruptible: true
needs: ['gkfs']
parallel:
matrix:
- SUBTEST: [ data, directories, operations, position, shell, status ]
## run tests
- cd ${BUILD_PATH}/tests/integration
- ${PYTEST} -v -n $(nproc)
${INTEGRATION_TESTS_BIN_PATH}/${SUBTEST}
--junit-xml=report.xml
## capture coverage information
- cd ${BUILD_PATH}
- ${CI_PROJECT_DIR}/scripts/ci/coverage.sh
--root-dir ${CI_PROJECT_DIR}
--build-dir ${BUILD_PATH}
--exclusions "${CI_PROJECT_DIR}/scripts/ci/.coverage-exclusions"
# fix relative paths so that GitLab can find the correct files
after_script:
- perl -i.orig
-pe 's%file="(.*?)"%file="tests/integration/$1"%;'
-pe 's%(../)+install/share/gkfs/%%g;'
${BUILD_PATH}/tests/integration/report.xml
reports:
junit: ${BUILD_PATH}/tests/integration/report.xml
## == integration tests for gkfwd ==========
gkfwd:integration:
image: gekkofs/testing:0.8.0
interruptible: true
needs: ['gkfwd']
parallel:
matrix:
- SUBTEST: [ forwarding ]
## run tests
- cd ${BUILD_PATH}/tests/integration
- ${PYTEST} -v -n $(nproc)
${INTEGRATION_TESTS_BIN_PATH}/${SUBTEST}
--junit-xml=report.xml
- ${CI_PROJECT_DIR}/scripts/ci/coverage.sh
--root-dir ${CI_PROJECT_DIR}
--build-dir ${BUILD_PATH}
--exclusions "${CI_PROJECT_DIR}/scripts/ci/.coverage-exclusions"
# fix relative paths so that GitLab can find the correct files
after_script:
- perl -i.orig
-pe 's%file="(.*?)"%file="tests/integration/$1"%;'
-pe 's%(../)+install/share/gkfs/%%g;'
${BUILD_PATH}/tests/integration/report.xml
- /tmp/
- ${BUILD_PATH}
reports:
junit: ${BUILD_PATH}/tests/integration/report.xml
## == unit tests for gkfs ==================
gkfs:unit:
image: gekkofs/testing:0.8.0
needs: ['gkfs']
## run actual tests
- cd ${BUILD_PATH}/tests/unit
- ctest -j $(nproc) -L unit::all --output-junit report.xml
## capture coverage information
- ${CI_PROJECT_DIR}/scripts/ci/coverage.sh
--capture unit
--root-dir ${CI_PROJECT_DIR}
--build-dir ${BUILD_PATH}
--exclusions "${CI_PROJECT_DIR}/scripts/ci/.coverage-exclusions"
- ${BUILD_PATH}
reports:
junit: ${BUILD_PATH}/tests/unit/report.xml
################################################################################
## Generation of code coverage reports
################################################################################
coverage:
stage: report
image: gekkofs/coverage:0.8.0
needs: [ 'gkfs:integration', 'gkfwd:integration', 'gkfs:unit' ]
script:
- cd ${BUILD_PATH}
## merge the partial coverage files from each test in the pipeline
- ${CI_PROJECT_DIR}/scripts/ci/coverage.sh