44 inputs :
55 env :
66 type : choice
7- description : ' AWS Incubator Env'
8- options :
9- - dev
10- - prod
7+ description : " AWS Incubator Env"
8+ options :
9+ - dev
10+ - prod
1111 ref :
12- description : ' Branch, Tag, or SHA'
12+ description : " Branch, Tag, or SHA"
1313 required : true
1414env :
1515 AWS_SHARED_CLUSTER : incubator-prod
1919 DOCKER_PATH : backend
2020jobs :
2121 setup_env :
22- name : Set-up environment
22+ name : Set-up environment
2323 runs-on : ubuntu-latest
2424 steps :
25- - name : Debug Action
26- 27- - name : Checkout
28- uses : actions/checkout@v4
29- with :
30- ref : ${{ github.event.inputs.ref }}
31- - name : Set AWS Env & Image Tag per workflow
32- run : |
33- SHORT_SHA=$(git rev-parse --short HEAD)
34- if [[ "$GITHUB_EVENT_NAME" == "workflow_dispatch" ]]; then
35- INPUT_ENV=${{ github.event.inputs.env }}; INPUT_REF=${{ github.event.inputs.ref }}
36- echo AWS_APPENV="$AWS_APP_NAME"-$INPUT_ENV >> $GITHUB_ENV
37- echo IMAGE_TAG=$SHORT_SHA >> $GITHUB_ENV
38- fi
25+ - name : Debug Action
26+ 27+ - name : Checkout
28+ uses : actions/checkout@v4
29+ with :
30+ ref : ${{ github.event.inputs.ref }}
31+ - name : Set AWS Env & Image Tag per workflow
32+ run : |
33+ SHORT_SHA=$(git rev-parse --short HEAD)
34+ if [[ "$GITHUB_EVENT_NAME" == "workflow_dispatch" ]]; then
35+ INPUT_ENV=${{ github.event.inputs.env }}; INPUT_REF=${{ github.event.inputs.ref }}
36+ echo AWS_APPENV="$AWS_APP_NAME"-$INPUT_ENV >> $GITHUB_ENV
37+ echo IMAGE_TAG=$SHORT_SHA >> $GITHUB_ENV
38+ fi
3939 outputs :
4040 AWS_APPENV : ${{ env.AWS_APPENV }}
4141 IMAGE_TAG : ${{ env.IMAGE_TAG }}
@@ -44,70 +44,86 @@ jobs:
4444 runs-on : ubuntu-latest
4545 needs : [setup_env]
4646 steps :
47- - name : Checkout
48- uses : actions/checkout@v4
49- with :
50- ref : ${{ github.event.inputs.ref }}
51- - name : Configure AWS credentials
52- uses : aws-actions/configure-aws-credentials@v1
53- with :
54- aws-access-key-id : ${{ secrets.INCUBATOR_AWS_ACCESS_KEY_ID }}
55- aws-secret-access-key : ${{ secrets.INCUBATOR_AWS_SECRET_ACCESS_KEY }}
56- aws-region : ${{ env.AWS_REGION }}
57- - name : Login to Amazon ECR
58- id : login-ecr
59- uses : aws-actions/amazon-ecr-login@v1
60- - name : Init Docker Cache
61- 62- with :
63- key : ${{ github.workflow }}-2-{hash}
64- restore-keys : |
65- ${{ github.workflow }}-2-
66- - name : Build & Push Image to ECR
67- uses : kciter/aws-ecr-action@v3
68- with :
69- access_key_id : ${{ secrets.INCUBATOR_AWS_ACCESS_KEY_ID }}
70- secret_access_key : ${{ secrets.INCUBATOR_AWS_SECRET_ACCESS_KEY }}
71- account_id : ${{ secrets.INCUBATOR_AWS_ACCOUNT_ID }}
72- repo : ${{ needs.setup_env.outputs.AWS_APPENV }}
73- region : ${{ env.AWS_REGION }}
74- tags : latest,${{ needs.setup_env.outputs.IMAGE_TAG }}
75- dockerfile : ${{ env.DOCKERFILE }}
76- path : ${{ env.DOCKER_PATH }}
47+ - name : Checkout
48+ uses : actions/checkout@v4
49+ with :
50+ ref : ${{ github.event.inputs.ref }}
51+ - name : Configure AWS credentials
52+ uses : aws-actions/configure-aws-credentials@v1
53+ with :
54+ aws-access-key-id : ${{ secrets.INCUBATOR_AWS_ACCESS_KEY_ID }}
55+ aws-secret-access-key : ${{ secrets.INCUBATOR_AWS_SECRET_ACCESS_KEY }}
56+ aws-region : ${{ env.AWS_REGION }}
57+ - name : Login to Amazon ECR
58+ id : login-ecr
59+ uses : aws-actions/amazon-ecr-login@v1
60+ - name : Init Docker Cache
61+ 62+ with :
63+ key : ${{ github.workflow }}-2-{hash}
64+ restore-keys : |
65+ ${{ github.workflow }}-2-
66+ - name : Docker Layer Caching (retry on cache failure)
67+ 68+ with :
69+ key : Backend Build and Deploy-2-${{ hashFiles('backend/Dockerfile.prod') }}
70+ restore-keys : Backend Build and Deploy-2-
71+ concurrency : 4
72+ skip-save : false
73+ env :
74+ AWS_SHARED_CLUSTER : incubator-prod
75+ AWS_APP_NAME : vrms-backend
76+ AWS_REGION : us-west-2
77+ DOCKERFILE : backend/Dockerfile.prod
78+ DOCKER_PATH : backend
79+ AWS_DEFAULT_REGION : us-west-2
80+ AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
81+ AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
82+ continue-on-error : true
83+ - name : Build & Push Image to ECR
84+ uses : kciter/aws-ecr-action@v3
85+ with :
86+ access_key_id : ${{ secrets.INCUBATOR_AWS_ACCESS_KEY_ID }}
87+ secret_access_key : ${{ secrets.INCUBATOR_AWS_SECRET_ACCESS_KEY }}
88+ account_id : ${{ secrets.INCUBATOR_AWS_ACCOUNT_ID }}
89+ repo : ${{ needs.setup_env.outputs.AWS_APPENV }}
90+ region : ${{ env.AWS_REGION }}
91+ tags : latest,${{ needs.setup_env.outputs.IMAGE_TAG }}
92+ dockerfile : ${{ env.DOCKERFILE }}
93+ path : ${{ env.DOCKER_PATH }}
7794 deploy :
7895 name : Deploy to AWS ECS
7996 runs-on : ubuntu-latest
8097 needs : [setup_env, build]
8198 steps :
82- - name : Configure AWS credentials
83- uses : aws-actions/configure-aws-credentials@v1
84- with :
85- aws-access-key-id : ${{ secrets.INCUBATOR_AWS_ACCESS_KEY_ID }}
86- aws-secret-access-key : ${{ secrets.INCUBATOR_AWS_SECRET_ACCESS_KEY }}
87- aws-region : ${{ env.AWS_REGION }}
88- - name : Login to Amazon ECR
89- id : login-ecr
90- uses : aws-actions/amazon-ecr-login@v1
91- - name : Pull Task Definition & write to file
92- id : aws-task-definition
93- run : |
94- aws ecs describe-task-definition \
95- --task-definition ${{ needs.setup_env.outputs.AWS_APPENV }} \
96- --query taskDefinition | \
97- jq 'del(.taskDefinitionArn,.revision,.status,.registeredBy,.registeredAt,.compatibilities,.requiresAttributes)' > task-def.json
98- - name : Interpolate new Docker Image into Task Definition
99- id : task-definition
100- uses : aws-actions/amazon-ecs-render-task-definition@v1
101- with :
102- task-definition : task-def.json
103- container-name : ${{ needs.setup_env.outputs.AWS_APPENV }}
104- image : ${{ steps.login-ecr.outputs.registry }}/${{ needs.setup_env.outputs.AWS_APPENV }}:${{ needs.setup_env.outputs.IMAGE_TAG }}
105- - name : Deploy Amazon ECS
106- uses : aws-actions/amazon-ecs-deploy-task-definition@v1
107- with :
108- task-definition : ${{ steps.task-definition.outputs.task-definition }}
109- service : ${{ needs.setup_env.outputs.AWS_APPENV }}
110- cluster : ${{ env.AWS_SHARED_CLUSTER }}
111- wait-for-service-stability : true
112- wait-for-minutes : 5 minutes
113-
99+ - name : Configure AWS credentials
100+ uses : aws-actions/configure-aws-credentials@v1
101+ with :
102+ aws-access-key-id : ${{ secrets.INCUBATOR_AWS_ACCESS_KEY_ID }}
103+ aws-secret-access-key : ${{ secrets.INCUBATOR_AWS_SECRET_ACCESS_KEY }}
104+ aws-region : ${{ env.AWS_REGION }}
105+ - name : Login to Amazon ECR
106+ id : login-ecr
107+ uses : aws-actions/amazon-ecr-login@v1
108+ - name : Pull Task Definition & write to file
109+ id : aws-task-definition
110+ run : |
111+ aws ecs describe-task-definition \
112+ --task-definition ${{ needs.setup_env.outputs.AWS_APPENV }} \
113+ --query taskDefinition | \
114+ jq 'del(.taskDefinitionArn,.revision,.status,.registeredBy,.registeredAt,.compatibilities,.requiresAttributes)' > task-def.json
115+ - name : Interpolate new Docker Image into Task Definition
116+ id : task-definition
117+ uses : aws-actions/amazon-ecs-render-task-definition@v1
118+ with :
119+ task-definition : task-def.json
120+ container-name : ${{ needs.setup_env.outputs.AWS_APPENV }}
121+ image : ${{ steps.login-ecr.outputs.registry }}/${{ needs.setup_env.outputs.AWS_APPENV }}:${{ needs.setup_env.outputs.IMAGE_TAG }}
122+ - name : Deploy Amazon ECS
123+ uses : aws-actions/amazon-ecs-deploy-task-definition@v1
124+ with :
125+ task-definition : ${{ steps.task-definition.outputs.task-definition }}
126+ service : ${{ needs.setup_env.outputs.AWS_APPENV }}
127+ cluster : ${{ env.AWS_SHARED_CLUSTER }}
128+ wait-for-service-stability : true
129+ wait-for-minutes : 5 minutes
0 commit comments