.gitlab-ci.yml 4.85 KiB
Newer Older
Tommaso Tocci's avatar
Tommaso Tocci committed
stages:
Tommaso Tocci's avatar
Tommaso Tocci committed
  - download deps
  - build deps
  - build
  - test

variables:
  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"
Tommaso Tocci's avatar
Tommaso Tocci committed
  # Configuration variables
  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
Tommaso Tocci's avatar
Tommaso Tocci committed

Jean Bez's avatar
Jean Bez committed
image: gekkofs/gekkofs:build_env-0.8.0
Tommaso Tocci's avatar
Tommaso Tocci committed

check format:
  stage: check format
  script:
    - ${CI_PROJECT_DIR}/scripts/check_format.sh -s "${CI_PROJECT_DIR}/src" -i "${CI_PROJECT_DIR}/src" -v
Tommaso Tocci's avatar
Tommaso Tocci committed
compile dependencies:
  stage: build deps
  cache:
    key: deps-cache
Tommaso Tocci's avatar
Tommaso Tocci committed
    paths:
     - ${DEPS_INSTALL_PATH}/
  script:
   # Folder of built dependencies is cached and marked with the ID of the commit from which have been built.
   # If the download and compile script have been modified the cache gets invalidated and dependencies will be built again.
   - ( [ -f "${DEPS_COMMIT}" ] && git diff --quiet "`cat ${DEPS_COMMIT}`" -- scripts/dl_dep.sh scripts/compile_dep.sh ) || (
Tommaso Tocci's avatar
Tommaso Tocci committed
           rm -f ${DEPS_COMMIT} &&
           scripts/dl_dep.sh ${DEPS_SRC_PATH} -n ofi -c ci &&
           scripts/compile_dep.sh -n ofi -c ci ${DEPS_SRC_PATH} ${DEPS_INSTALL_PATH} &&
Tommaso Tocci's avatar
Tommaso Tocci committed
           echo "${CI_COMMIT_SHA}" > "${DEPS_COMMIT}"
     )
  artifacts:
    paths:
     - ${DEPS_INSTALL_PATH}

compile GekkoFS:
  stage: build
  dependencies:
    - "compile dependencies"
  script:
    - mkdir -p ${BUILD_PATH} && cd ${BUILD_PATH}
    - cmake
      -Wdev
      -Wdeprecate
      -DCMAKE_BUILD_TYPE=Debug
      -DGKFS_BUILD_TESTS:BOOL=ON
      -DGKFS_INSTALL_TESTS:BOOL=ON
      -DGKFS_ENABLE_FORWARDING:BOOL=ON
      -DGKFS_ENABLE_AGIOS:BOOL=ON
Tommaso Tocci's avatar
Tommaso Tocci committed
      -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_PATH}
      -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH}
      ${CI_PROJECT_DIR}
    - make -j$(nproc) install
Tommaso Tocci's avatar
Tommaso Tocci committed
  artifacts:
    paths:
     - ${INSTALL_PATH}
Tommaso Tocci's avatar
Tommaso Tocci committed

compile tests:
Tommaso Tocci's avatar
Tommaso Tocci committed
  stage: build
  dependencies:
    - "compile dependencies"
  script:
    - mkdir -p ${TESTS_BUILD_PATH} && cd ${TESTS_BUILD_PATH}
    - cmake -DCMAKE_BUILD_TYPE=Debug ..
    - make -j$(nproc)
  artifacts:
    paths:
     - ${TESTS_BUILD_PATH}

integration tests:
  stage: test
  script:
    - mkdir -p ${INTEGRATION_TESTS_RUN_PATH}
    - cd ${INTEGRATION_TESTS_BIN_PATH} 
    - TMPDIR=${INTEGRATION_TESTS_RUN_PATH} unbuffer ${PYTEST} -v | tee ${INTEGRATION_TESTS_RUN_PATH}/session.log
  artifacts:
    when: on_failure
    paths:
      - "${INTEGRATION_TESTS_RUN_PATH}"
Tommaso Tocci's avatar
Tommaso Tocci committed
test wr:
  stage: test
  script:
    - mkdir -p "${LOG_PATH}"
    - ${INSTALL_PATH}/bin/gkfs_daemon --mount /tmp/mountdir --root /tmp/root &
Tommaso Tocci's avatar
Tommaso Tocci committed
    - sleep 4
    - LD_PRELOAD=${INSTALL_PATH}/lib/libgkfs_intercept.so ${TESTS_BUILD_PATH}/gkfs_test_wr
Tommaso Tocci's avatar
Tommaso Tocci committed
  artifacts:
    when: on_failure
Tommaso Tocci's avatar
Tommaso Tocci committed
    paths:
     - "${LOG_PATH}"

test directories:
  stage: test
  script:
    - mkdir -p "${LOG_PATH}"
    - ${INSTALL_PATH}/bin/gkfs_daemon --mount /tmp/mountdir --root /tmp/root &
Tommaso Tocci's avatar
Tommaso Tocci committed
    - sleep 4
    - LD_PRELOAD=${INSTALL_PATH}/lib/libgkfs_intercept.so ${TESTS_BUILD_PATH}/gkfs_test_dir
Tommaso Tocci's avatar
Tommaso Tocci committed
  artifacts:
    when: on_failure
Tommaso Tocci's avatar
Tommaso Tocci committed
    paths:
     - "${LOG_PATH}"
Tommaso Tocci's avatar
Tommaso Tocci committed

test truncate:
  stage: test
  script:
    - mkdir -p "${LOG_PATH}"
    - ${INSTALL_PATH}/bin/gkfs_daemon --mount /tmp/mountdir --root /tmp/root &
Tommaso Tocci's avatar
Tommaso Tocci committed
    - sleep 4
    - LD_PRELOAD=${INSTALL_PATH}/lib/libgkfs_intercept.so ${TESTS_BUILD_PATH}/gkfs_test_truncate
Tommaso Tocci's avatar
Tommaso Tocci committed
  artifacts:
    when: on_failure
Tommaso Tocci's avatar
Tommaso Tocci committed
    paths:
     - "${LOG_PATH}"
Tommaso Tocci's avatar
Tommaso Tocci committed

test path resolution:
  stage: test
  script:
    - mkdir -p "${LOG_PATH}"
    - ${INSTALL_PATH}/bin/gkfs_daemon --mount /tmp/mountdir --root /tmp/root &
Tommaso Tocci's avatar
Tommaso Tocci committed
    - sleep 4
    - LD_PRELOAD=${INSTALL_PATH}/lib/libgkfs_intercept.so ${TESTS_BUILD_PATH}/gkfs_test_path_resolution
Tommaso Tocci's avatar
Tommaso Tocci committed
  artifacts:
    when: on_failure
Tommaso Tocci's avatar
Tommaso Tocci committed
    paths:
     - "${LOG_PATH}"

test lseek:
  stage: test
  script:
    - mkdir -p "${LOG_PATH}"
    - ${INSTALL_PATH}/bin/gkfs_daemon --mount /tmp/mountdir --root /tmp/root &
    - sleep 4
    - LD_PRELOAD=${INSTALL_PATH}/lib/libgkfs_intercept.so ${TESTS_BUILD_PATH}/gkfs_test_lseek
  artifacts:
    when: on_failure
    paths:
     - "${LOG_PATH}"