1- name : Deploy Workflow
1+ name : 🚀 Deploy Workflow
22
33on :
4+ # This workflow runs for both releases and pre-releases
45 release : { types: [published] }
56 workflow_dispatch :
67
78jobs :
89 deploy :
9- name : Deploy to ECS
10+ name : 🚀 Deploy to ECS
1011 runs-on : ubuntu-latest
11-
12- # Permissions required to use aws-actions/configure-aws-credentials:
13- permissions : { id-token: write, contents: read }
14-
12+ permissions :
13+ contents : read # to checkout the code
14+ id-token : write # to assume the OIDC role (configure-aws-credentials)
1515 steps :
1616 - uses : actions/checkout@v4
1717
1818 - uses : docker/setup-buildx-action@v3
1919
20- - uses : aws-actions/configure-aws-credentials@v4
20+ - name : Configure AWS Credentials for ECR
21+ uses : aws-actions/configure-aws-credentials@v4
2122 with :
2223 role-to-assume : ${{ secrets.ECR_OIDC_GITHUB_ROLE_ARN }}
2324 aws-region : ${{ secrets.ECR_REPO_REGION }}
@@ -36,49 +37,50 @@ jobs:
3637 # 3. env tag (if release: "prod", anything else: "staging")
3738 # 4. relative pointer (if release: "latest", anything else: "next")
3839 run : |
39- IMAGE_TAGS =( "${{ github.sha }}" )
40+ image_tags =( "${{ github.sha }}" )
4041
4142 if [ "${{ github.event_name }}" == 'release' ]; then
42- IMAGE_TAGS +=( "${{ github.event.release.tag_name }}" )
43+ image_tags +=( "${{ github.event.release.tag_name }}" )
4344 fi
4445
4546 if [[ "${{ github.event_name }}" == 'release' && "${{ github.event.release.prerelease }}" == 'false' ]]; then
46- IMAGE_TAGS +=( prod latest )
47+ image_tags +=( prod latest )
4748 else
48- IMAGE_TAGS +=( staging next )
49+ image_tags +=( staging next )
4950 fi
5051
51- IMAGE_REPO ="${{ steps.login-ecr.outputs.registry }}/${{ secrets.ECR_PRIVATE_REPO }}"
52- IMAGE_TAGS =("${IMAGE_TAGS [@]/#/$IMAGE_REPO :}")
52+ image_repo ="${{ steps.login-ecr.outputs.registry }}/${{ secrets.ECR_PRIVATE_REPO }}"
53+ image_tags =("${image_tags [@]/#/$image_repo :}")
5354
54- docker build ${IMAGE_TAGS [@]/#/--tag } .
55+ docker build ${image_tags [@]/#/--tag } .
5556
56- for tag in "${IMAGE_TAGS [@]}"; do docker push "$tag"; done
57+ for tag in "${image_tags [@]}"; do docker push "$tag"; done
5758
58- - uses : aws-actions/configure-aws-credentials@v4
59+ - name : Configure AWS Credentials for ECS
60+ uses : aws-actions/configure-aws-credentials@v4
5961 with :
6062 role-to-assume : ${{ secrets.ECS_OIDC_GITHUB_ROLE_ARN }}
6163 aws-region : ${{ secrets.ECS_CLUSTER_REGION }}
6264
6365 - name : Update ECS Task Definition & Service
6466 run : |
6567 if [[ "${{ github.event_name }}" == 'release' && "${{ github.event.release.prerelease }}" == 'false' ]]; then
66- TASK_DEF_NAME =${{ secrets.ECS_API_TASK_DEF_PROD }}
67- SERVICE_NAME =${{ secrets.ECS_API_SERVICE_NAME_PROD }}
68- CLUSTER_NAME =${{ secrets.ECS_CLUSTER_NAME_PROD }}
68+ task_def_name =${{ secrets.ECS_API_TASK_DEF_PROD }}
69+ service_name =${{ secrets.ECS_API_SERVICE_NAME_PROD }}
70+ cluster_name =${{ secrets.ECS_CLUSTER_NAME_PROD }}
6971 else
70- TASK_DEF_NAME =${{ secrets.ECS_API_TASK_DEF_STAGING }}
71- SERVICE_NAME =${{ secrets.ECS_API_SERVICE_NAME_STAGING }}
72- CLUSTER_NAME =${{ secrets.ECS_CLUSTER_NAME_STAGING }}
72+ task_def_name =${{ secrets.ECS_API_TASK_DEF_STAGING }}
73+ service_name =${{ secrets.ECS_API_SERVICE_NAME_STAGING }}
74+ cluster_name =${{ secrets.ECS_CLUSTER_NAME_STAGING }}
7375 fi
7476
75- IMAGE_REPO ="${{ steps.login-ecr.outputs.registry }}/${{ secrets.ECR_PRIVATE_REPO }}"
77+ image_repo ="${{ steps.login-ecr.outputs.registry }}/${{ secrets.ECR_PRIVATE_REPO }}"
7678
77- UPDATED_TASK_DEF_JSON =$(
79+ updated_task_def_json =$(
7880 aws ecs describe-task-definition \
79- --task-definition $TASK_DEF_NAME \
81+ --task-definition $task_def_name \
8082 --output json | \
81- jq --arg NEW_IMAGE "$IMAGE_REPO :${{ github.sha }}" \
83+ jq --arg NEW_IMAGE "$image_repo :${{ github.sha }}" \
8284 '.taskDefinition |
8385 .containerDefinitions[0].image = $NEW_IMAGE |
8486 del(.taskDefinitionArn) |
@@ -91,12 +93,12 @@ jobs:
9193 )
9294
9395 aws ecs register-task-definition \
94- --cli-input-json "$UPDATED_TASK_DEF_JSON " \
96+ --cli-input-json "$updated_task_def_json " \
9597 1>/dev/null
9698
9799 aws ecs update-service \
98- --cluster $CLUSTER_NAME \
99- --service $SERVICE_NAME \
100- --task-definition $TASK_DEF_NAME \
100+ --cluster $cluster_name \
101+ --service $service_name \
102+ --task-definition $task_def_name \
101103 --force-new-deployment \
102104 1>/dev/null
0 commit comments