Newer
Older

Andrew Kapuscinski
committed
- build-base
- push-base
- build-dev

Andrew Kapuscinski
committed
- push-dev

Andrew Kapuscinski
committed
# - deploy-test
variables:
PROJECT_NAME: "workspaces"
DEFAULT_DEPLOY_ENV: "dev"
# 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
image: docker:19.03.12

Andrew Kapuscinski
committed
workflow:
rules:
- 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'

Andrew Kapuscinski
committed
# Build Base Image

Andrew Kapuscinski
committed
build base image:
stage: build-base
script:
- 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}

Andrew Kapuscinski
committed
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_MESSAGE =~ /\A(?i)-ops/'
changes:

Andrew Kapuscinski
committed

Andrew Kapuscinski
committed
# 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}

Andrew Kapuscinski
committed
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE =~ /\A(?i)-ops/'

Andrew Kapuscinski
committed
changes:

Andrew Kapuscinski
committed
# 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
build dev workflow:
stage: build-dev
variables:
SERVICE_NAME: "workflow"
PATH_PREFIX: "services/"
build dev capability:
stage: build-dev
variables:
SERVICE_NAME: "capability"
PATH_PREFIX: "services/"
build dev notification:
stage: build-dev
variables:
SERVICE_NAME: "notification"
PATH_PREFIX: "services/"
build dev web:
stage: build-dev
variables:
SERVICE_NAME: "web"
PATH_PREFIX: "apps/"
extends: .build
## Test Stages ##
# Unit Tests
stage: unit-test-dev
variables:
SERVICE_NAME: "workflow"
extends: .unit-test
artifacts:
paths:
- .coverage.${SERVICE_NAME}.${CI_COMMIT_SHORT_SHA}
needs:
- build dev workflow
stage: unit-test-dev
variables:
SERVICE_NAME: "capability"
extends: .unit-test
artifacts:
paths:
- .coverage.${SERVICE_NAME}.${CI_COMMIT_SHORT_SHA}
needs:
- build dev capability

Andrew Kapuscinski
committed
unit test dev notification:
stage: unit-test-dev
variables:
SERVICE_NAME: "notification"
extends: .unit-test
artifacts:
paths:
- .coverage.${SERVICE_NAME}.${CI_COMMIT_SHORT_SHA}
needs:
- build dev notification

Andrew Kapuscinski
committed
unit test coverage:
- pip install pytest pytest-cov

Andrew Kapuscinski
committed
- coverage combine --append
- coverage report
- coverage xml
artifacts:
reports:
cobertura: coverage.xml
paths:
- coverage.xml
dependencies:
- unit test dev workflow
- unit test dev capability
- unit test dev notification
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: always
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: always

Andrew Kapuscinski
committed
push dev workflow:
stage: push-dev
variables:
SERVICE_NAME: "workflow"
extends: .push
needs:
- unit test dev workflow

Andrew Kapuscinski
committed
push dev capability:
stage: push-dev
variables:
SERVICE_NAME: "capability"
extends: .push
needs:
- unit test dev capability

Andrew Kapuscinski
committed
push dev notification:
stage: push-dev
variables:
SERVICE_NAME: "notification"
extends: .push
needs:
- unit test dev notification
push dev web:
stage: push-dev
variables:
SERVICE_NAME: "web"
extends: .push
# UI tests coming soon!
# needs:
# - unit test dev ui
stage: .post
variables:
SERVICE_NAME: "workflow"
extends: .cleanup

Andrew Kapuscinski
committed
allow_failure: true
stage: .post
variables:
SERVICE_NAME: "capability"
extends: .cleanup

Andrew Kapuscinski
committed
allow_failure: true
clean build notification:
stage: .post
variables:
SERVICE_NAME: "notification"
extends: .cleanup

Andrew Kapuscinski
committed
allow_failure: true
clean build web:
stage: .post
variables:
SERVICE_NAME: "web"
extends: .cleanup
allow_failure: true
# Disabled until GL Pages are set up
.pages:
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
when: always
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: always
# Development
deploy dev:
stage: deploy-dev
variables:
ENV: "dev"
script:
- SWARM_NODE_ENV=$ENV TAG_TO_DEPLOY=$CI_DEFAULT_BRANCH docker stack deploy --compose-file docker-compose.${ENV}.yml workspaces-${ENV}
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: manual

Andrew Kapuscinski
committed
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# deploy dev:
# stage: deploy-dev
# script:
# - |
# if [ "$CI_COMMIT_BRANCH" != "" ]; then \
# if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]; then \
# echo "Deploying merged branch: ${CI_COMMIT_BRANCH} to dev environment"; \
# SWARM_NODE_ENV="dev" TAG_TO_DEPLOY="development" docker stack deploy --compose-file docker-compose.dev.yml workspaces-dev ; \
# else
# if [ "$CAPABILITY_BRANCH" != "" ]; then \
# echo "Updating Capability Service: ${CI_COMMIT_BRANCH} in dev environment"; \
# docker service update --image marconi.aoc.nrao.edu/workspaces/capability:"$CAPABILITY_BRANCH" workspaces-dev_capability
# fi
# if [ "$WORKFLOW_BRANCH" != "" ]; then \
# echo "Updating Workflow Service: ${CI_COMMIT_BRANCH} in dev environment"; \
# docker service update --image marconi.aoc.nrao.edu/workspaces/workflow:"$WORKFLOW_BRANCH" workspaces-dev_workflow
# fi
# if [ "$WORKFLOW_BRANCH" == "" && "$CAPABILITY_BRANCH" == "" ]; then \
# echo "Deploying branch: ${CI_COMMIT_BRANCH} to dev environment"; \
# SWARM_NODE_ENV="dev" TAG_TO_DEPLOY="${CI_COMMIT_BRANCH}" docker stack deploy --compose-file docker-compose.dev.yml workspaces-dev ; \
# fi
# fi
# fi
# if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "" ]; then \
# if [ "$CAPABILITY_BRANCH" != "" ]; then \
# echo "Updating Capability Service with PR Branch: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} in dev environment"; \
# docker service update --image marconi.aoc.nrao.edu/workspaces/capability:"$CAPABILITY_BRANCH" workspaces-dev_capability
# fi
# if [ "$WORKFLOW_BRANCH" != "" ]; then \
# echo "Updating Workflow Service with PR Branch: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} in dev environment"; \
# docker service update --image marconi.aoc.nrao.edu/workspaces/workflow:"$WORKFLOW_BRANCH" workspaces-dev_workflow
# fi
# if [ "$WORKFLOW_BRANCH" == "" && "$CAPABILITY_BRANCH" == "" ]; then \
# echo "Deploying branch: ${CI_COMMIT_BRANCH} to dev environment"; \
# SWARM_NODE_ENV="dev" TAG_TO_DEPLOY="${CI_COMMIT_BRANCH}" docker stack deploy --compose-file docker-compose.dev.yml workspaces-dev ; \
# fi
# echo "Deploying PR branch: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} to dev environment"; \
# SWARM_NODE_ENV="dev" TAG_TO_DEPLOY="dev-branch" docker stack deploy --compose-file docker-compose.dev.yml workspaces-dev ; \
# fi
# environment: development
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
# when: always
# - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# when: manual

Andrew Kapuscinski
committed
# deploy test:
# stage: deploy-test
# script:
# |
# echo "branch: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"
# echo "tag: ${CI_COMMIT_TAG}"
# SWARM_NODE_ENV="test" TAG_TO_DEPLOY="${CI_COMMIT_TAG}" docker stack deploy --compose-file docker-compose.dev.yml workspaces-dev
# rules:
# - if: $CI_COMMIT_TAG
# when: manual