diff --git a/.circleci/config.yml b/.circleci/config.yml index 31980d56..6568169f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: k8s: circleci/kubernetes@0.7.0 - s3: circleci/aws-s3@1.0.13 + slack: circleci/slack@3.4.2 commands: git_checkout_from_cache: description: "Git checkout and save cache" @@ -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: @@ -55,44 +55,37 @@ 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 gh-pages@2.0.1 + git config user.email "ci-build@binary.com" + 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 @@ -100,9 +93,6 @@ commands: 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: | @@ -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