Skip to content
Snippets Groups Projects
.gitlab-ci.yml 7.23 KiB
Newer Older
  • Learn to ignore specific revisions
  •   - unit_tests
      - system_tests
    
    .dind_docker_tags: &dind_docker_tags
    
        - "dind"
    
    .global_variables: &global_variables
      DUNE_OPTIONS_FILE: /duneci/dune.opts
      DUNECONTROL: dunecontrol
    
    
    .docker_variables: &docker_variables
      DOCKER_IMAGE: docker:19.03.1
      DOCKER_HOST: tcp://docker:2375/
      DOCKER_DRIVER: overlay2
      DOCKER_TLS_CERTDIR: ""
    
    .debian_gcc: &debian_gcc
    
      <<: *global_variables
      TOOLCHAIN: gcc-8-17
      DUNECI_OS: debian
    
      BASE_IMAGE: debian:10
      DEPENDENCIES_IMAGE: ${CI_REGISTRY}/copasi/dune-copasi/dependencies:${DUNECI_OS}-${TOOLCHAIN}-${BASE_IMAGE_VERSION}
    
    .debian_clang: &debian_clang
    
      <<: *global_variables
      TOOLCHAIN: clang-6-17
      DUNECI_OS: debian
    
      BASE_IMAGE: debian:10
      DEPENDENCIES_IMAGE: ${CI_REGISTRY}/copasi/dune-copasi/dependencies:${DUNECI_OS}-${TOOLCHAIN}-${BASE_IMAGE_VERSION}
    
    .ubuntu_gcc: &ubuntu_gcc
    
      <<: *global_variables
      TOOLCHAIN: gcc-7-17
      DUNECI_OS: ubuntu
    
      BASE_IMAGE: ubuntu:18.04
      DEPENDENCIES_IMAGE: ${CI_REGISTRY}/copasi/dune-copasi/dependencies:${DUNECI_OS}-${TOOLCHAIN}-${BASE_IMAGE_VERSION}
    
    .ubuntu_clang: &ubuntu_clang
    
      <<: *global_variables
      TOOLCHAIN: clang-6-17
      DUNECI_OS: ubuntu
    
      BASE_IMAGE: ubuntu:18.04
      DEPENDENCIES_IMAGE: ${CI_REGISTRY}/copasi/dune-copasi/dependencies:${DUNECI_OS}-${TOOLCHAIN}-${BASE_IMAGE_VERSION}
    
        - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY/copasi/dune-copasi
    
        - docker build
            --build-arg BASE_IMAGE=${BASE_IMAGE}
    
            --build-arg TOOLCHAIN=${TOOLCHAIN}
    
            --target setup-env
            -t ${DEPENDENCIES_IMAGE} .
        - docker push ${DEPENDENCIES_IMAGE}
    
        - docker logout $CI_REGISTRY/copasi/dune-copasi
    
      rules:
        - if: '$REBUILD_BASE_IMAGE'
        - if: '$CI_COMMIT_TAG'
        - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
        - if: '$CI_COMMIT_BRANCH == "latest"'
      <<: *dind_docker_tags
    
      image: ${DEPENDENCIES_IMAGE}
    
        - echo 'CMAKE_FLAGS+=" -DCMAKE_INSTALL_PREFIX=dune-copasi-install"' >> /duneci/cmake-flags/dune_copasi
    
        - bash dune-copasi/.ci/build.sh
    
        expire_in: 30 mins
    
    .unit_tests: &unit_tests
    
      image: ${DEPENDENCIES_IMAGE}
    
      stage: unit_tests
    
        - echo 'CMAKE_FLAGS+=" -DCMAKE_PREFIX_PATH=dune-copasi-install"' >> /duneci/cmake-flags/dune_copasi
        - echo 'CMAKE_FLAGS+=" -DCMAKE_BUILD_TYPE=Debug"' >> /duneci/cmake-flags/dune_copasi
    
        - bash dune-copasi/.ci/unit_tests.sh
    
    .system_tests: &system_tests
    
      image: ${DEPENDENCIES_IMAGE}
    
      stage: system_tests
    
        - cd ..
        - bash dune-copasi/.ci/system_tests.sh
    
    .deploy: &deploy
    
      stage: deploy
    
        - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY/copasi/dune-copasi
        - DOCKER_TAG="${DUNECI_OS}-${TOOLCHAIN}-${CI_COMMIT_REF_NAME}"
    
        - docker build
          --build-arg BASE_IMAGE=${BASE_IMAGE}
          --build-arg TOOLCHAIN=${TOOLCHAIN}
          --cache-from ${DEPENDENCIES_IMAGE}
    
          -t $CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG} .
        - docker push $CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG}
    
        - if [ "$CI_COMMIT_BRANCH" == "latest" && $DEPLOY_LATEST ]; then
    
            docker tag $CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG} $CI_REGISTRY/copasi/dune-copasi/dune-copasi:latest
            docker push $CI_REGISTRY/copasi/dune-copasi/dune-copasi:latest
          fi
    
        - docker logout $CI_REGISTRY/copasi/dune-copasi
    
      rules:
        - if: '$CI_COMMIT_TAG'
        - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
        - if: '$CI_COMMIT_BRANCH == "latest"'
      <<: *dind_docker_tags
    
    
    .deploy_test: &deploy_test
      <<: *deploy
      stage: deploy_test
      script:
        - mkdir -m 777 dunecopasi && cd dunecopasi
        - cp test/test_cell.mini dunecopasi
    
        - docker run -v $PWD $CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG} dune-copasi-md test_cell.mini
    
      variables:
        <<: *docker_variables
        <<: *debian_gcc
    
      <<: *build
      dependencies:
        - setup:debian_gcc
    
    unit_tests:debian_gcc:
    
      dependencies:
        - build:debian_gcc
    
    system_tests:debian_gcc:
    
      <<: *system_tests
    
      dependencies:
        - build:debian_gcc
    
    deploy:debian_gcc:
    
      variables:
        <<: *docker_variables
        <<: *debian_gcc
    
      <<: *deploy
      dependencies:
    
        - system_tests:debian_gcc
    
    deploy_test:debian_gcc:
      variables:
        <<: *docker_variables
        <<: *debian_gcc
      <<: *deploy_test
      dependencies:
        - deploy:debian_gcc
    
    
    # # ubuntu gcc
    # setup:ubuntu_gcc:
    
    #   variables:
    #     <<: *docker_variables
    #     <<: *ubuntu_gcc
    
    #   <<: *setup
    
    #   <<: *build
    #   dependencies:
    #     - setup:ubuntu_gcc
    
    
    # unit_tests:ubuntu_gcc:
    
    #   <<: *unit_tests
    
    #   dependencies:
    #     - build:ubuntu_gcc
    
    
    # system_tests:ubuntu_gcc:
    
    #   <<: *system_tests
    
    #   dependencies:
    #     - build:ubuntu_gcc
    
    
    # deploy:ubuntu_gcc:
    
    #   variables:
    #     <<: *docker_variables
    #     <<: *ubuntu_gcc
    
    #   <<: *deploy
    #   dependencies:
    
    #     - system_tests:ubuntu_gcc
    
    # deploy_test:ubuntu_gcc:
    #   variables:
    #     <<: *docker_variables
    #     <<: *ubuntu_gcc
    #   <<: *deploy_test
    #   dependencies:
    #     - deploy:ubuntu_gcc
    
    
    # debian clang
    setup:debian_clang:
    
      variables:
        <<: *docker_variables
        <<: *debian_clang
    
    build:debian_clang:
    
      <<: *build
      dependencies:
        - setup:debian_clang
    
    
    unit_tests:debian_clang:
    
      dependencies:
        - build:debian_clang
    
    
    system_tests:debian_clang:
    
      <<: *system_tests
    
      dependencies:
        - build:debian_clang
    
    deploy:debian_clang:
    
      variables:
        <<: *docker_variables
        <<: *debian_clang
    
      <<: *deploy
      dependencies:
    
        - system_tests:debian_clang
    
    deploy_test:debian_clang:
      variables:
        <<: *docker_variables
        <<: *debian_clang
      <<: *deploy_test
      dependencies:
        - deploy:debian_clang
    
    
    # # ubuntu clang
    # setup:ubuntu_clang:
    #   <<: *ubuntu_clang
    
    #   <<: *setup
    
    
    # build:ubuntu_clang:
    #   <<: *ubuntu_clang
    #   <<: *build
    #   dependencies:
    #     - setup:ubuntu_clang
    
    
    # unit_tests:ubuntu_clang:
    
    #   <<: *ubuntu_clang
    
    #   <<: *unit_tests
    
    #   dependencies:
    #     - build:ubuntu_clang
    
    
    # system_tests:ubuntu_clang:
    
    #   <<: *ubuntu_clang
    
    #   <<: *system_tests
    
    #     - build:ubuntu_clang
    
    
    # deploy:ubuntu_clang:
    #   <<: *ubuntu_clang
    #   <<: *deploy
    #   dependencies:
    
    
    # deploy_test:ubuntu_clang:
    #   variables:
    #     <<: *docker_variables
    #     <<: *ubuntu_clang
    #   <<: *deploy_test
    #   dependencies:
    #     - deploy:ubuntu_clang