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-front: 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-front - aws-ecr/build-and-push-image: name: build-image filters: branches: only: main requires: - tests-front dockerfile: ./infra/prod/twenty/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 extra-build-args: > --build-arg REACT_APP_API_URL=$REACT_APP_API_URL - 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-default 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-default dockerfile: ./infra/prod/twenty/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 extra-build-args: > --build-arg REACT_APP_API_URL=$REACT_APP_API_URL