Newer
Older

Andrew Kapuscinski
committed
- build-base
- push-base
- build-dev
image: docker:19.03.12
before_script:
- echo "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"
- echo "$CI_COMMIT_REF_NAME"
# Check if branch is associated with a MR

Andrew Kapuscinski
committed
# This helps solves the issue of duplicate pipelines when a branch that's associated with a PR is changed
# It creates two pipelines. It checks if the branch has an open PR. If it does, it'll cancel the push-to-
# branch pipeline to allow the Merge-Request-event pipeline to run.
# Drawbacks: the cancelled push-to-PR pipeline is marked as a Failed pipeline
# based on issue: https://gitlab.com/gitlab-org/gitlab/-/issues/201845

Andrew Kapuscinski
committed
# which should have a less hacky fix in a future Gitlab-CI release
check-merge-request:
stage: init
before_script:
- apk add --no-cache curl
script:

Andrew Kapuscinski
committed
- 'export OPENED_MR_ON_BRANCH=$(curl --header "Private-Token: $GITLAB_TOKEN" "https://$CI_SERVER_HOST/api/v4/merge_requests?project_id=$CI_PROJECT_ID&source_branch=$CI_COMMIT_BRANCH&state=opened&scope=all")'
- |
if [ "${OPENED_MR_ON_BRANCH}" != "[]" ]; then \
echo "There is at least one MR opened on branch $CI_COMMIT_BRANCH. Stopping the push pipeline in favor of the merge request pipeline"; \
exit 1; \
fi
rules:
- if: $GITLAB_TOKEN && $CI_PIPELINE_SOURCE == 'push'

Andrew Kapuscinski
committed
# Build Base if changed
build base image:
stage: build-base
script:
- docker build -t marconi.aoc.nrao.edu/ops/base:workspaces -f Condaless.dockerfile.v2 . ; \
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_MESSAGE =~ /\A(?i)-ops/'
changes:
- Condaless.dockerfile.v2
build dev workflow:
stage: build-dev
script:

Andrew Kapuscinski
committed
- |
if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "" ]; then \
echo "Building PR branch: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"; \
docker build -t marconi.aoc.nrao.edu/workspaces/workflow:"$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" -f services/workflow/Dockerfile.dev . ; \
docker tag marconi.aoc.nrao.edu/workspaces/workflow:"$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" marconi.aoc.nrao.edu/workspaces/workflow:"$CI_COMMIT_SHORT_SHA" ; \

Andrew Kapuscinski
committed
echo "WORKFLOW_BRANCH=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" >> build.env; \

Andrew Kapuscinski
committed
else
echo "Building branch: ${CI_COMMIT_BRANCH}"; \
docker build -t marconi.aoc.nrao.edu/workspaces/workflow:"$CI_COMMIT_BRANCH" -f services/workflow/Dockerfile.dev . ; \
docker tag marconi.aoc.nrao.edu/workspaces/workflow:"$CI_COMMIT_BRANCH" marconi.aoc.nrao.edu/workspaces/workflow:"$CI_COMMIT_SHORT_SHA" ; \

Andrew Kapuscinski
committed
if [ "$CI_COMMIT_BRANCH" != "development" ]; then \
echo "WORKFLOW_BRANCH=$CI_COMMIT_BRANCH" >> build.env; \
fi

Andrew Kapuscinski
committed
fi

Andrew Kapuscinski
committed
artifacts:
reports:
dotenv: build.env
- if: $CI_COMMIT_MESSAGE =~ /\A(?i)Revert/
when: always
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- .gitlab-ci.yml
when: always

Andrew Kapuscinski
committed
- if: $GITLAB_TOKEN && $CI_PIPELINE_SOURCE == 'push'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- services/workflow/**/*
- apps/cli/**/*.{py,sh}
- shared/**/*.{py,sh}

Andrew Kapuscinski
committed
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_MESSAGE =~ /\A(?i)-ops/'
changes:
- Condaless.dockerfile.v2
build dev capability:
stage: build-dev
script:
- |
if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "" ]; then \
echo "Building PR branch: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"; \
docker build -t marconi.aoc.nrao.edu/workspaces/capability:"$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" -f services/capability/Dockerfile.dev . ; \
docker tag marconi.aoc.nrao.edu/workspaces/capability:"$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" marconi.aoc.nrao.edu/workspaces/capability:"$CI_COMMIT_SHORT_SHA" ; \

Andrew Kapuscinski
committed
echo "CAPABILITY_BRANCH=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" >> build.env; \
else
echo "Building branch: ${CI_COMMIT_BRANCH}"; \
docker build -t marconi.aoc.nrao.edu/workspaces/capability:"$CI_COMMIT_BRANCH" -f services/capability/Dockerfile.dev . ; \
docker tag marconi.aoc.nrao.edu/workspaces/capability:"$CI_COMMIT_BRANCH" marconi.aoc.nrao.edu/workspaces/capability:"$CI_COMMIT_SHORT_SHA" ; \

Andrew Kapuscinski
committed
if [ "$CI_COMMIT_BRANCH" != "development" ]; then \
echo "CAPABILITY_BRANCH=$CI_COMMIT_BRANCH" >> build.env; \
fi

Andrew Kapuscinski
committed
artifacts:
reports:
dotenv: build.env
rules:
- if: $CI_COMMIT_MESSAGE =~ /\A(?i)Revert/
when: always
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- .gitlab-ci.yml
when: always
- if: $GITLAB_TOKEN && $CI_PIPELINE_SOURCE == 'push'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- services/capability/**/*
- apps/cli/**/*.{py,sh}
- shared/**/*.{py,sh}

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

Andrew Kapuscinski
committed
# Push Base Image Stage
push base image:
stage: push-base
script:
- echo "$HARBOR_PASSWORD" | docker login -u "$HARBOR_USER" --password-stdin $HARBOR_URL
- docker push marconi.aoc.nrao.edu/ops/base:workspaces
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- Condaless.dockerfile.v2
when: always

Andrew Kapuscinski
committed
push dev workflow:
stage: push-dev
script:
- echo "$HARBOR_PASSWORD" | docker login -u "$HARBOR_USER" --password-stdin $HARBOR_URL
- |
if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "" ]; then \
echo "Pushing PR branch image to registry: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"; \
docker push marconi.aoc.nrao.edu/workspaces/workflow:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ; \
if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "development" ]; then \
docker tag marconi.aoc.nrao.edu/workspaces/workflow:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME marconi.aoc.nrao.edu/workspaces/workflow:dev-branch ; \
docker push marconi.aoc.nrao.edu/workspaces/workflow:dev-branch ; \
fi

Andrew Kapuscinski
committed
else
echo "Pushing branch image to registry: ${CI_COMMIT_BRANCH}"; \
docker push marconi.aoc.nrao.edu/workspaces/workflow:$CI_COMMIT_BRANCH ; \

Andrew Kapuscinski
committed
fi
- docker push marconi.aoc.nrao.edu/workspaces/workflow:$CI_COMMIT_SHORT_SHA
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
- if: ($CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == 'push')
changes:
- .gitlab-ci.yml
- services/workflow/**/*
- apps/cli/**/*.{py,sh}
- shared/**/*.{py,sh}
when: manual
- if: $CI_COMMIT_MESSAGE =~ /\A(?i)Revert/

Andrew Kapuscinski
committed
when: manual
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
push dev capability:
stage: push-dev
script:
- echo "$HARBOR_PASSWORD" | docker login -u "$HARBOR_USER" --password-stdin $HARBOR_URL
- |
if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "" ]; then \
echo "Pushing PR branch image to registry: ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"; \
docker push marconi.aoc.nrao.edu/workspaces/capability:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ; \
if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "development" ]; then \
docker tag marconi.aoc.nrao.edu/workspaces/capability:$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME marconi.aoc.nrao.edu/workspaces/capability:dev-branch ; \
docker push marconi.aoc.nrao.edu/workspaces/capability:dev-branch ; \
fi
else
echo "Pushing branch image to registry: ${CI_COMMIT_BRANCH}"; \
docker push marconi.aoc.nrao.edu/workspaces/capability:$CI_COMMIT_BRANCH ; \
fi
- docker push marconi.aoc.nrao.edu/workspaces/capability:$CI_COMMIT_SHORT_SHA
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == 'push'
changes:
- .gitlab-ci.yml
- services/capability/**/*
- apps/cli/**/*.{py,sh}
- shared/**/*.{py,sh}
when: manual
- if: $CI_COMMIT_MESSAGE =~ /\A(?i)Revert/
when: manual
# Cleanup
# clean runner:
# stage: .post
# script:
# - docker images -q --filter=reference="marconi.aoc.nrao.edu/workspaces/*" | xargs docker rmi -f

Andrew Kapuscinski
committed
# Deploy Stage

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

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

Andrew Kapuscinski
committed
fi
fi
if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" != "" ]; then \

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

Andrew Kapuscinski
committed
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
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: always
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push"'
when: manual