version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.ap-south-1.amazonaws.com
      - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.ap-south-1.amazonaws.com/$IMAGE_REPO_NAME
      - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - REPO_URI=$AWS_ACCOUNT_ID.dkr.ecr.ap-south-1.amazonaws.com/$IMAGE_REPO_NAME
      - docker pull $REPO_URI:latest || true
      - cd functions
      - docker build --cache-from $REPO_URI:latest -f api.Dockerfile -t bloom-api:latest --build-arg NODE_ENV=$NODE_ENVIRONMENT .
      - docker tag bloom-api:latest $AWS_ACCOUNT_ID.dkr.ecr.ap-south-1.amazonaws.com/$IMAGE_REPO_NAME:latest 
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - REPO_URI=$AWS_ACCOUNT_ID.dkr.ecr.ap-south-1.amazonaws.com/$IMAGE_REPO_NAME
      - docker push $REPO_URI:latest

      # Set AWS region from CodeBuild environment variable
      - export AWS_DEFAULT_REGION=$AWS_REGION

      # Run ECS task
      - aws ecs run-task --cluster $CLUSTER_NAME --task-definition $TASK_DEFINITION --overrides '{"containerOverrides":[{"name":"'"$CONTAINER_NAME"'", "command":["npm","run","db:migrate","--","--env='NODE_ENV=$NODE_ENVIRONMENT'"]}]}'
      - aws ecs run-task --cluster $CLUSTER_NAME --task-definition $TASK_DEFINITION --overrides '{"containerOverrides":[{"name":"'"$CONTAINER_NAME"'", "command":["npm","run","db:seed:all","--","--env='NODE_ENV=$NODE_ENVIRONMENT'"]}]}'
      - aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE_NAME --force-new-deployment