image: vladyslavusenko/b_image_focal:latest variables: GIT_SUBMODULE_STRATEGY: recursive BUILD_TYPE: Release CXX_MARCH: native CMAKE_INSTALL_PREFIX: /usr/ DEB_DIR: deb stages: - docker - build - test - eval - results - deploy - repository # template for docker builds with ccache .prepare_docker_template: &prepare_docker_definition tags: - docker before_script: - mkdir -p ccache - export CCACHE_BASEDIR=${PWD} - export CCACHE_DIR=${PWD}/ccache - ccache -s cache: paths: - ccache/ key: ${CI_JOB_NAME} # template for build & unit test & make deb configurations .compile_test_package_template: &compile_test_package_definition stage: build script: - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCXX_MARCH=${CXX_MARCH} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} - make -j3 - ctest - make package - cd .. - mkdir $DEB_DIR - mv build/*.deb $DEB_DIR/ - dpkg -i $DEB_DIR/*.deb # smoke test to see if all executables at least start up - basalt_calibrate --help - basalt_calibrate_imu --help - basalt_mapper --help - basalt_mapper_sim --help - basalt_mapper_sim_naive --help - basalt_opt_flow --help - basalt_vio --help - basalt_vio_sim --help # template for build & unit test configurations (no deb) .compile_test_template: &compile_test_definition stage: build script: - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCXX_MARCH=${CXX_MARCH} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} - make -j3 - ctest # smoke test to see if all executables at least start up - ./basalt_calibrate --help - ./basalt_calibrate_imu --help - ./basalt_mapper --help - ./basalt_mapper_sim --help - ./basalt_mapper_sim_naive --help - ./basalt_opt_flow --help - ./basalt_vio --help - ./basalt_vio_sim --help # template to test debian .test_deb_template: &test_deb_definition stage: test tags: - docker script: - dpkg -i $DEB_DIR/*.deb # smoke test to see if all executables at least start up - basalt_calibrate --help - basalt_calibrate_imu --help - basalt_mapper --help - basalt_mapper_sim --help - basalt_mapper_sim_naive --help - basalt_opt_flow --help - basalt_vio --help - basalt_vio_sim --help # template to evaluate on EuRoC sequences .eval_euroc_template: &eval_euroc_definition stage: eval parallel: 10 tags: [docker, dataset-eval] variables: GIT_STRATEGY: none artifacts: paths: - scripts/eval_full/eval_results/* expire_in: 1 week script: - dpkg -i deb_focal/*.deb - cd scripts/eval_full - ./run_evaluations.sh # template to evaluate on TUM-VI sequences .eval_tumvi_template: &eval_tumvi_definition stage: eval parallel: 4 tags: [docker, dataset-eval] variables: GIT_STRATEGY: none artifacts: paths: - scripts/eval_full/eval_results_tumvi/* expire_in: 1 week script: - dpkg -i deb_focal/*.deb - cd scripts/eval_full - ./run_evaluations_tumvi.sh .eval_kitti_template: &eval_kitti_definition stage: eval parallel: 10 tags: [docker, dataset-eval] variables: GIT_STRATEGY: none artifacts: paths: - scripts/eval_full/eval_results_kitti/* expire_in: 1 week script: - dpkg -i deb_focal/*.deb - cd scripts/eval_full - ./run_evaluations_kitti.sh bionic-release-compile: <<: *prepare_docker_definition <<: *compile_test_package_definition image: vladyslavusenko/b_image_bionic:latest # only: # - master variables: # compile w/ clang; GCC 7.5 has multiple issues: magic_enum is not # supported, Eigen hast false positive maybe-uninitialized # warnings, structured bindings give false positive # "unused-variable" warnings. Using GCC 9 from the Ubuntu's # toolchain testing PPA would make the built debian package depend # on the updatd libstdc++. So we use clang instead, which works # with the default libstdc++ on bionic and doesn't lead to # additional runtime dependencies for the debian package. CC: clang-12 CXX: clang++-12 CXX_MARCH: 'haswell' DEB_DIR: deb_bionic artifacts: paths: - deb_bionic/*.deb expire_in: 1 week focal-release-compile: <<: *prepare_docker_definition <<: *compile_test_package_definition image: vladyslavusenko/b_image_focal:latest variables: CXX_MARCH: 'haswell' DEB_DIR: deb_focal artifacts: paths: - deb_focal/*.deb - scripts/eval_full/* expire_in: 1 week focal-debug-compile: <<: *prepare_docker_definition <<: *compile_test_package_definition image: vladyslavusenko/b_image_focal:latest only: - master variables: BUILD_TYPE: CiDebug focal-relwithdebinfo-compile: <<: *prepare_docker_definition <<: *compile_test_package_definition image: vladyslavusenko/b_image_focal:latest variables: BUILD_TYPE: CiRelWithDebInfo only: - master catalina-relwithdebinfo-compile: <<: *compile_test_definition tags: [macos, "10.15"] only: # - master variables: BUILD_TYPE: CiRelWithDebInfo catalina-brewclang-relwithdebinfo-compile: <<: *compile_test_definition tags: [macos, "10.15"] only: - master variables: BUILD_TYPE: CiRelWithDebInfo CC: /usr/local/opt/llvm/bin/clang CXX: /usr/local/opt/llvm/bin/clang++ bigsur-relwithdebinfo-compile: <<: *compile_test_definition tags: [macos, "11"] only: # - master variables: BUILD_TYPE: CiRelWithDebInfo # check if clang-format would make any changes clang-format: tags: - docker stage: build variables: GIT_SUBMODULE_STRATEGY: none script: - ./scripts/clang-format-all.sh # check if any files are now modified and error if yes - (if [ -n "`git diff --name-only --diff-filter=M --ignore-submodules`" ]; then echo $'\n Some files are not properly formatted. You can use "./scripts/clang-format-all.sh".\n'; git diff --diff-filter=M; false; fi) bionic-test: <<: *test_deb_definition image: vladyslavusenko/b_image_bionic:latest only: - master variables: DEB_DIR: deb_bionic GIT_STRATEGY: none focal-test: <<: *test_deb_definition image: vladyslavusenko/b_image_focal:latest only: - master variables: DEB_DIR: deb_focal GIT_STRATEGY: none # evaluate on EuRoC sequences eval_euroc_master: <<: *eval_euroc_definition only: - master # evaluate on EuRoC sequences eval_euroc: <<: *eval_euroc_definition when: manual except: - master allow_failure: false # evaluate on TUM-VI sequences eval_tumvi_master: <<: *eval_tumvi_definition only: - master # evaluate on TUM-VI sequences eval_tumvi: <<: *eval_tumvi_definition when: manual except: - master allow_failure: false # evaluate on KITTI sequences eval_kitti_master: <<: *eval_kitti_definition only: - master # evaluate on KITTI sequences eval_kitti: <<: *eval_kitti_definition when: manual except: - master allow_failure: false # aggregate results for all EuRoC sequences gen_results: stage: results variables: GIT_STRATEGY: none tags: - docker when: on_success artifacts: paths: - euroc_results.txt - kitti_results.txt - tumvi_results.txt - scripts/eval_full/eval_results/* script: - cd scripts/eval_full - ./gen_results.py eval_results > euroc_results.txt - cat euroc_results.txt - ./gen_results_kitti.py eval_results_kitti > kitti_results.txt - cat kitti_results.txt - ./gen_results_tumvi.py eval_results_tumvi > tumvi_results.txt - cat tumvi_results.txt - mv euroc_results.txt ../../ - mv kitti_results.txt ../../ - mv tumvi_results.txt ../../ # deploy deb packages deploy: stage: deploy when: manual variables: GIT_STRATEGY: none tags: - docker only: - master before_script: - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts script: - scp $SCP_FLAGS deb_bionic/*.deb $REPOSITORY_URL/bionic/ - scp $SCP_FLAGS deb_focal/*.deb $REPOSITORY_URL/focal/ .docker_build_template: &docker_build_definition image: docker:stable stage: docker when: manual only: - master services: - docker:stable-dind tags: - docker-dind before_script: - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY script: - cd docker/"$B_IMAGE_NAME" - docker build -t "$CI_REGISTRY_IMAGE"/"$B_IMAGE_NAME" . - docker push "$CI_REGISTRY_IMAGE"/"$B_IMAGE_NAME" docker-build-bionic: <<: *docker_build_definition variables: DOCKER_TLS_CERTDIR: '/certs' GIT_SUBMODULE_STRATEGY: none B_IMAGE_NAME: b_image_bionic docker-build-focal: <<: *docker_build_definition variables: DOCKER_TLS_CERTDIR: '/certs' GIT_SUBMODULE_STRATEGY: none B_IMAGE_NAME: b_image_focal .repository_check_template: &repository_check_definition stage: repository when: manual tags: - docker only: - master script: - apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y gnupg2 rsync linux-generic - apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0AD9A3000D97B6C9 - echo "deb [arch=amd64] http://packages.usenko.eu/ubuntu $REPO_NAME $REPO_NAME/main" > /etc/apt/sources.list.d/basalt.list - apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y basalt - basalt_rs_t265_vio --help - basalt_rs_t265_record --help bionic-repository-check: image: ubuntu:18.04 <<: *repository_check_definition variables: GIT_STRATEGY: none REPO_NAME: bionic focal-repository-check: image: ubuntu:20.04 <<: *repository_check_definition variables: GIT_STRATEGY: none REPO_NAME: focal