variables: DUNE_CONTROL_PATH: /opt/dune:$CI_PROJECT_DIR DUNECONTROL: ./dune-common/bin/dunecontrol CPUS_MULTICORE: 4 CPUS_DIND: 2 DOCKER_LOGIN: docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW # DUNE environment image BASE_IMAGE: dorie/dune-env # Use semantic versioning (not the version of DUNE) and bump according to # to whether changes are backwards-compatible or not. IMAGE_VERSION: "1.2" DUNE_ENV_IMAGE: ${BASE_IMAGE}:img-v${IMAGE_VERSION} CMAKE_FLAGS: -DDUNE_PYTHON_VIRTUALENV_SETUP=True -DDUNE_PYTHON_ALLOW_GET_PIP=True # Recursively load submodules by default GIT_SUBMODULE_STRATEGY: recursive MAKE_FLAGS: -j $CPUS_MULTICORE RUN_IN_DUNE_ENV: $CI_PROJECT_DIR/build-cmake/run-in-dune-env image: $DUNE_ENV_IMAGE before_script: - cd /opt/dune stages: - setup - prep - build - test - deploy # --- Preparation of Docker Images --- setup:dune-env: &setup stage: setup only: variables: - $REBUILD_BASE_IMAGE # must be defined and have non-empty value tags: - dind image: docker:stable services: - docker:dind variables: DOCKER_DRIVER: overlay2 before_script: - $DOCKER_LOGIN script: - docker build -f docker/dune-env.dockerfile --build-arg PROCNUM=$CPUS_DIND -t $DUNE_ENV_IMAGE . - docker push $DUNE_ENV_IMAGE setup:dune-env-clang: <<: *setup script: - docker build -f docker/dune-env.dockerfile --build-arg CC=clang --build-arg CXX=clang++ --build-arg PROCNUM=$CPUS_DIND -t ${DUNE_ENV_IMAGE}-clang . - docker push ${DUNE_ENV_IMAGE}-clang prep:update-dune: &update <<: *setup stage: prep allow_failure: true only: - master - tags script: - docker build -f docker/dune-env-update.dockerfile --build-arg DUNE_ENV_IMAGE=$DUNE_ENV_IMAGE --build-arg PROCNUM=$CPUS_DIND -t $DUNE_ENV_IMAGE . - docker push $DUNE_ENV_IMAGE prep:update-dune-clang: <<: *update script: - docker build -f docker/dune-env-update.dockerfile --build-arg DUNE_ENV_IMAGE=${DUNE_ENV_IMAGE}-clang --build-arg CC=clang --build-arg CXX=clang++ --build-arg PROCNUM=$CPUS_DIND -t ${DUNE_ENV_IMAGE}-clang . - docker push ${DUNE_ENV_IMAGE}-clang # --- Build jobs --- build:system-tests: &build-tests stage: build script: - CMAKE_FLAGS="$CMAKE_FLAGS" $DUNECONTROL --only=dorie configure - $DUNECONTROL --only=dorie make $MAKE_FLAGS build_system_tests - $DUNECONTROL --only=dorie make doc artifacts: name: "$CI_JOB_NAME" paths: - $CI_PROJECT_DIR/build-cmake expire_in: 1 day build:unit-tests: <<: *build-tests script: - CMAKE_FLAGS="$CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug" $DUNECONTROL --only=dorie configure - $DUNECONTROL --only=dorie make $MAKE_FLAGS build_unit_tests build:debug: &debug stage: build allow_failure: true script: - CMAKE_FLAGS=" $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS_DEBUG='-Werror'" $DUNECONTROL --only=dorie configure - $DUNECONTROL --only=dorie make $MAKE_FLAGS dorie-rfg - $DUNECONTROL --only=dorie make $MAKE_FLAGS build_unit_tests build:debug-clang: <<: *debug image: ${DUNE_ENV_IMAGE}-clang script: - CMAKE_FLAGS=" $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_FLAGS_DEBUG='-Werror'" $DUNECONTROL --only=dorie configure - $DUNECONTROL --only=dorie make $MAKE_FLAGS dorie-rfg - $DUNECONTROL --only=dorie make $MAKE_FLAGS build_unit_tests # --- Tests --- test:system-tests: &test stage: test dependencies: - build:system-tests script: - $DUNECONTROL --only=dorie configure - $DUNECONTROL --only=dorie make system_tests artifacts: name: "$CI_JOB_NAME" paths: - $CI_PROJECT_DIR/build-cmake/test expire_in: 1 day test:unit-tests: <<: *test dependencies: - build:unit-tests script: # install coverage reporter - $DUNECONTROL --only=dorie bexec "./run-in-dune-env python3 -m pip install gcovr" # perform the tests - $DUNECONTROL --only=dorie configure - $DUNECONTROL --only=dorie make unit_tests # report coverage - cd $CI_PROJECT_DIR/build-cmake - mkdir -p dune/dorie/test/coverage - ./run-in-dune-env gcovr --root ../ --exclude ../dune/dorie/test --exclude ../plugins --html --html-details -o dune/dorie/test/coverage/coverage.html # run again for coverage report in GitLab - ./run-in-dune-env gcovr --root ../ --exclude ../dune/dorie/test --exclude ../plugins coverage: '/^TOTAL.*\s+(\d+\%)$/' artifacts: name: "$CI_JOB_NAME" paths: - $CI_PROJECT_DIR/build-cmake/dune/dorie/test expire_in: 1 day test:python-tests: <<: *test dependencies: [] script: - $DUNECONTROL --only=dorie configure - $DUNECONTROL --only=dorie make test_python # --- Deploy jobs --- deploy:dockerhub-devel: &deploy stage: deploy only: - master@dorie/dorie tags: - dind image: docker:stable services: - docker:dind variables: DOCKER_DRIVER: overlay2 dependencies: [] before_script: - $DOCKER_LOGIN script: - docker build -f docker/dorie.dockerfile --build-arg DUNE_ENV_IMAGE=$DUNE_ENV_IMAGE --build-arg PROCNUM=$CPUS_DIND -t dorie/dorie:devel . - docker push dorie/dorie:devel deploy:dockerhub-stable: <<: *deploy only: - tags@dorie/dorie script: - docker build -f docker/dorie.dockerfile --build-arg DUNE_ENV_IMAGE=$DUNE_ENV_IMAGE --build-arg PROCNUM=$CPUS_DIND -t dorie/dorie:$CI_COMMIT_TAG . - docker push dorie/dorie:$CI_COMMIT_TAG deploy:sphinx-docs: stage: deploy only: - tags@dorie/dorie dependencies: - build:system-tests before_script: # install the netfly CLI - apt-get install -y golang-go golang-glide - go get -d github.com/netlify/netlifyctl - cd $HOME/go/src/github.com/netlify/netlifyctl/ - make deps build - go install - cd $HOME/go/bin script: - ./netlifyctl deploy -A $NETFLY_DEPLOY_TOKEN -s $NETFLY_SITE_ID -P $CI_PROJECT_DIR/build-cmake/doc/html environment: name: sphinx-docs url: https://dorie-doc.netlify.com/