Skip to content
This repository was archived by the owner on Feb 22, 2024. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 73 additions & 47 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
version: 2.1
orbs:
k8s: circleci/[email protected]
s3: circleci/[email protected]
slack: circleci/[email protected]
commands:
git_checkout_from_cache:
description: "Git checkout and save cache"
Expand Down Expand Up @@ -39,7 +39,7 @@ commands:
command: |
sudo apt-get update && sudo apt-get install -y ruby-full
sudo gem install sass
npm_install_from_cache:
npm_install:
description: "npm install and save cache"
steps:
- restore_cache:
Expand All @@ -55,54 +55,44 @@ commands:
name: Save npm cache
paths:
- "node_modules"
npm_build:
build:
description: "Grunt build the project"
steps:
- run:
name: "Build binary-style"
command: npm run build
compress:
description: "Compress"
deploy:
description: "Deploy to static branches"
parameters:
target_branch:
type: string
steps:
- checkout
- attach_workspace:
at: dist
- run:
name: Tag build
command: echo "<< parameters.target_branch >> $(date -u +'%Y-%m-%dT%H:%M:%SZ')" > dist/version
- run:
name: "Compress"
name: Install and configure dependencies
command: |
pushd dist/
tar -cvf artifact.tar *
mv artifact.tar ${OLDPWD}/
sudo npm install -g [email protected]
git config user.email "[email protected]"
git config user.name "ci-build"
- add_ssh_keys:
fingerprints:
- "01:67:4a:6d:26:9c:70:c4:1a:60:91:88:d9:dd:f0:83"
- run:
name: "Tag commit id as artifact identifer"
command: echo "${CIRCLE_SHA1}" > artifact-info.txt
upload_artifact:
description: "upload artifact to s3"
steps:
- s3/copy:
from: artifact.tar
to: 's3://${CONTEXT_ARTIFACT_S3_BUCKET}/${CIRCLE_PROJECT_REPONAME}/'
aws-access-key-id: env_CONTEXT_ARTIFACT_S3_AWS_ACCESS_KEY_ID
aws-secret-access-key: env_CONTEXT_ARTIFACT_S3_AWS_SECRET_ACCESS_KEY
aws-region: env_CONTEXT_ARTIFACT_S3_AWS_REGION
arguments: '--metadata "{\"x-amz-artifact-id\": \"${CIRCLE_SHA1}\" }"'
upload_checksum:
description: "upload artifact checksum to s3"
steps:
- s3/copy:
from: artifact-info.txt
to: 's3://${CONTEXT_ARTIFACT_S3_BUCKET}/${CIRCLE_PROJECT_REPONAME}/'
aws-access-key-id: env_CONTEXT_ARTIFACT_S3_AWS_ACCESS_KEY_ID
aws-secret-access-key: env_CONTEXT_ARTIFACT_S3_AWS_SECRET_ACCESS_KEY
aws-region: env_CONTEXT_ARTIFACT_S3_AWS_REGION
docker_build:
name: Deploy docs to gh-pages branch
command: gh-pages -d dist --branch << parameters.target_branch >> --message '[skip ci]'
docker_build_push:
description: "Build Docker image"
steps:
- setup_remote_docker
- run:
name: Building docker image
command: |
docker build -t ${DOCKHUB_ORGANISATION}/binary-static-style:${CIRCLE_SHA1} -t ${DOCKHUB_ORGANISATION}/binary-static-style:latest .
docker_push:
description: "Push image to docker hub"
steps:
- run:
name: Pushing Image to docker hub
command: |
Expand Down Expand Up @@ -130,29 +120,65 @@ commands:
echo $CA_CRT | base64 --decode > ca.crt
kubectl --server=${KUBE_SERVER} --certificate-authority=ca.crt --token=$SERVICEACCOUNT_TOKEN set image deployment/style-binary-com style-binary-com=${DOCKHUB_ORGANISATION}/binary-static-style:${CIRCLE_SHA1}
fi
done
done
notify_slack:
description: "Notify slack"
steps:
- slack/status:
include_project_field: false
failure_message: "Release failed for style.binary.com with version *$(cat dist/version)*"
success_message: "Release succeeded for style.binary.com with version *$(cat dist/version)*"
webhook: ${SLACK_WEBHOOK}
jobs:
release:
build:
docker:
- image: circleci/node:9.9.0-stretch
steps:
- git_checkout_from_cache
- install_deps
- npm_install
- build
release_production:
docker:
- image: circleci/node:9.9.0-stretch
steps:
- git_checkout_from_cache
- install_deps
- npm_install
- build
- deploy:
target_branch: "production"
- notify_slack
release_aws_production:
docker:
- image: circleci/node:9.9.0-stretch
steps:
- git_checkout_from_cache
- install_deps
- npm_install_from_cache
- npm_build
- compress
- upload_artifact # uploading the built code to s3 to create a backup of key services separate from Kubernetes deployment
- upload_checksum # uploading compressed artifact checksum to cross match artifact fingerprint
- docker_build
- docker_push
- npm_install
- build
- docker_build_push
- k8s_deploy

workflows:
build:
jobs:
- build:
filters:
branches:
ignore: /^master$/
release:
jobs:
- release:
- release_production:
filters:
branches:
ignore: /.*/
tags:
only: /^production.*/
- release_aws_production:
filters:
branches:
only: /^master$/
context: binary-frontend-artifact-upload # need to change the context name here

ignore: /.*/
tags:
only: /^production.*/
context: binary-frontend-artifact-upload