Skip to content
Snippets Groups Projects
.gitlab-ci.yml 4.09 KiB
Newer Older
  • Learn to ignore specific revisions
  • .dind_docker_tags: &dind_docker_tags
    
        - "dind"
    
    .global_variables: &global_variables
      DUNECONTROL: dunecontrol
    
      BASE_IMAGE_VERSION: v1.0.0
    
      DUNE_COPASI_SD_EXECUTABLE: 'ON'
    
      CPACK_PACKAGE_DIRECTORY: $CI_PROJECT_DIR/tmp
    
      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}
    
      MASTER_IMAGE: "true"
    
        - 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}
    
            --build-arg BUILDKIT_INLINE_CACHE=1
    
            --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}
    
        - ./.ci/install /duneci/dune.opts
    
        - ./.ci/test /duneci/dune.opts
    
        - mv tmp/dune-copasi-*-Runtime.deb packages/dune-copasi-runtime.deb
    
    .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_DEPLOY_IMAGE=$CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG}
        # set directory to get packages from the image
        - mkdir -p $CI_PROJECT_DIR/packages
    
        # build final production image using packages from artifacts
    
          --build-arg PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
          --file docker/deploy.dockerfile
          --tag ${DOCKER_DEPLOY_IMAGE} .
    
        # push images into registry
        - docker push ${DOCKER_DEPLOY_IMAGE}
    
        # set alternative and simpler names
    
          if [[ ! -z "${MASTER_IMAGE}" ]]; then
            DOCKER_TAG=${CI_REGISTRY}/copasi/dune-copasi/dune-copasi:${CI_COMMIT_REF_NAME}
            docker tag ${DOCKER_DEPLOY_IMAGE} ${DOCKER_TAG}
            docker push ${DOCKER_TAG}
            if [[ "$CI_COMMIT_BRANCH" == "latest" ]]; then
              DOCKER_TAG=${CI_REGISTRY}/copasi/dune-copasi/dune-copasi:latest
              docker tag ${DOCKER_DEPLOY_IMAGE} ${DOCKER_TAG}
              docker push ${DOCKER_TAG}
            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
    
      variables:
        <<: *docker_variables
        <<: *debian_gcc
    
      <<: *build
      dependencies:
    
        - setup:debian_gcc
    
    deploy:debian_gcc:
    
      variables:
        <<: *docker_variables
        <<: *debian_gcc
    
      <<: *deploy
      dependencies:
    
    # debian clang
    setup:debian_clang:
    
      variables:
        <<: *docker_variables
        <<: *debian_clang
    
    build:debian_clang:
    
      <<: *build
      dependencies:
    
    deploy:debian_clang:
    
      variables:
        <<: *docker_variables
        <<: *debian_clang
    
      <<: *deploy
      dependencies: