Skip to content
Snippets Groups Projects
.gitlab-ci.yml 6.02 KiB
Newer Older
    - run-schema
    - test-coverage
    - deploy-coverage-page
variables:
    PROJECT_NAME: "workspaces"
    # Postgres Service Variables
    POSTGRES_DB: archive
    POSTGRES_USER: "archive"
    POSTGRES_PASSWORD: "docker"

# CI Postgres Service
services:
    - name: marconi.aoc.nrao.edu/ops/ci/db:workspaces
      alias: db
    - if: $CI_MERGE_REQUEST_TITLE =~ /^WIP:|^Draft:/
      when: never
    - if: $CI_MERGE_REQUEST_IID
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

# Import Templates
include:
    - '/ci/build.template.yml'
    - '/ci/push.template.yml'
    - '/ci/cleanup.template.yml'
    - '/ci/unit-test.template.yml'
        - docker build -t ${REGISTRY_URL}/ops/base:${PROJECT_NAME} -f Dockerfile.base .
        - docker tag ${REGISTRY_URL}/ops/base:${PROJECT_NAME} ${REGISTRY_URL}/ops/base:${CI_COMMIT_SHORT_SHA}
    rules:
        - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_MESSAGE =~ /\A(?i)-ops/'
          changes:
            - Dockerfile.base
            - docker.properties
# Push Base Image Stage
push base image:
    stage: push-base
    script:
        - echo "$HARBOR_PASSWORD" | docker login -u "$HARBOR_USER" --password-stdin $REGISTRY_URL
        - docker push ${REGISTRY_URL}/ops/base:${PROJECT_NAME}
        - docker push ${REGISTRY_URL}/ops/base:${CI_COMMIT_SHORT_SHA}
        - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE =~ /\A(?i)-ops/'
            - Dockerfile.base
            - docker.properties
# Run Schema
run schema:
    stage: run-schema
    image: ${REGISTRY_URL}/ops/base:${PROJECT_NAME}
    script:
        - export PGPASSWORD=$POSTGRES_PASSWORD
        - cd schema && ./bin/run-migrations.sh "docker"
    rules:
        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
          when: always
        - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
          when: always

    variables:
        SERVICE_NAME: "workflow"
    extends: .build
    variables:
        SERVICE_NAME: "capability"
    variables:
        SERVICE_NAME: "notification"
    variables:
        SERVICE_NAME: "web"
        PATH_PREFIX: "apps/"
    extends: .build
    variables:
        SERVICE_NAME: "workflow"
    extends: .unit-test
    variables:
        SERVICE_NAME: "capability"
    extends: .unit-test
    variables:
        SERVICE_NAME: "notification"
    extends: .unit-test
# Generate Coverage reports 
    stage: test-coverage
    image: python:3.8-slim
    before_script:
        - pip install pytest pytest-cov
        - coverage report
        - coverage xml
    artifacts:
        reports:
            cobertura: coverage.xml
        paths:
            - coverage.xml
      - unit test workflow
      - unit test capability
      - unit test notification
    rules:
        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
        - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    variables:
        SERVICE_NAME: "workflow"
    extends: .push
    needs:
    variables:
        SERVICE_NAME: "capability"
    extends: .push
    needs:
    variables:
        SERVICE_NAME: "notification"
    extends: .push
    needs:
    variables:
        SERVICE_NAME: "web"
    extends: .push
    # UI tests coming soon!
    # needs:
    #     - unit test dev ui

clean build workflow:
    variables:
        SERVICE_NAME: "workflow"
    extends: .cleanup
clean build capability:
    variables:
        SERVICE_NAME: "capability"
    extends: .cleanup
clean build notification:
    variables:
        SERVICE_NAME: "notification"
    extends: .cleanup

clean build web:
    stage: .post
    variables:
        SERVICE_NAME: "web"
    extends: .cleanup
    allow_failure: true
# Deploy Stages
    stage: deploy-coverage-page
    image: python:3.8-slim
    dependencies:
        - unit test coverage
    script:
        - mkdir public
        - mv htmlcov/* public/
    artifacts:
        paths:
        - public
        expire_in: 2 weeks
    rules:
        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
# Development 
    script:
        # Docker doesn't allow variable interpolation when declaring Docker Secret names
        # This sed command finds and replaces "dsoc_ENV_secrets:" with "dsoc_${DEPLOY_ENV}_secrets:"
        - sed -i "s/dsoc_ENV_secrets:/dsoc_${DEPLOY_ENV}_secrets:/g" docker-compose.dev.yml
        - ENV=$DEPLOY_ENV TAG=$IMAGE_TAG docker stack deploy --compose-file docker-compose.dev.yml workspaces-${DEPLOY_ENV}
    rules:
        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
          variables:
            IMAGE_TAG: ${CI_DEFAULT_BRANCH}
        - if: '$CI_COMMIT_TAG =~ /^test_[0-9]+\.[0-9]+.[0-9]+$/'
          variables:
            IMAGE_TAG: $CI_COMMIT_TAG
            # override DEPLOY_ENV
            DEPLOY_ENV: "test"