version: 2.1 orbs: aws-ecr: circleci/aws-ecr@8.2.1 aws-ecs: circleci/aws-ecs@03.2.0 slack: circleci/slack@4.12.0 node: circleci/node@5.0.3 jobs: tests: executor: node/default steps: - checkout - run: command: cd front && npm install name: install node dependencies - run: command: cd front && npm run test name: tests workflows: build-and-deploy: jobs: - tests - aws-ecr/build-and-push-image: name: build-image filters: branches: only: main requires: - tests dockerfile: ./infra/prod/Dockerfile registry-id: AWS_ACCOUNT_ID aws-access-key-id: AWS_ACCESS_KEY_ID aws-secret-access-key: AWS_SECRET_ACCESS_KEY region: $AWS_REGION repo: $AWS_ECR_REPO tag: $CIRCLE_SHA1 - aws-ecs/deploy-service-update: name: deploy-canary requires: - build-image family: $AWS_ECS_CONTAINER_NAME_CANARY cluster: $AWS_ECS_CLUSTER container-image-name-updates: "container=$AWS_ECS_CONTAINER_NAME_CANARY,tag=${CIRCLE_SHA1}" - slack/on-hold: name: slack-notification context: slack-secrets requires: - deploy-canary - hold: type: approval requires: - slack-notification - aws-ecs/deploy-service-update: name: deploy-prod requires: - hold family: $AWS_ECS_CONTAINER_NAME_DEFAULT cluster: $AWS_ECS_CLUSTER container-image-name-updates: "container=$AWS_ECS_CONTAINER_NAME_DEFAULT,tag=${CIRCLE_SHA1}" post-steps: - slack/notify: event: pass template: basic_success_1 - slack/notify: event: fail template: basic_fail_1 - aws-ecr/build-and-push-image: name: build-image-latest requires: - deploy-prod dockerfile: ./infra/prod/Dockerfile registry-id: AWS_ACCOUNT_ID aws-access-key-id: AWS_ACCESS_KEY_ID aws-secret-access-key: AWS_SECRET_ACCESS_KEY region: $AWS_REGION repo: $AWS_ECR_REPO tag: latest