41
41
description : The git commit SHA to deploy.
42
42
required : true
43
43
type : string
44
+ git_ref_to_deploy :
45
+ description : The git ref to deploy (branch, tag, or commit SHA).
46
+ required : false
47
+ type : string
44
48
45
49
permissions : {}
46
50
52
56
&& 'arn:aws:iam::820242920762:role/GithubDeployMavisAndInfrastructure'
53
57
|| 'arn:aws:iam::393416225559:role/GithubDeployMavisAndInfrastructure' }}
54
58
aws_account_id : ${{ inputs.environment == 'production' && '820242920762' || '393416225559' }}
55
- web_codedeploy_application : mavis-${{ inputs.environment }}
56
- web_codedeploy_group : blue-green-group-${{ inputs.environment }}
57
59
cluster_name : mavis-${{ inputs.environment }}
58
- good_job_service : mavis-${{ inputs.environment }}-good-job
59
- web_service : mavis-${{ inputs.environment }}-web
60
+ app_version : ${{ inputs.git_ref_to_deploy == '' && 'unknown' || inputs.git_ref_to_deploy }}
60
61
61
62
jobs :
62
63
prepare-deployment :
75
76
with :
76
77
role-to-assume : ${{ env.aws-role }}
77
78
aws-region : eu-west-2
79
+ - name : Setup python
80
+ uses : actions/setup-python@v4
81
+ with :
82
+ python-version : 3.12.3
83
+ cache : pip
84
+ - name : Install Python dependencies
85
+ run : python3 -m pip install -r script/requirements.txt
78
86
- name : Get image digest
79
87
id : get-image-digest
80
88
run : |
@@ -90,33 +98,39 @@ jobs:
90
98
parsed_env_vars=$(yq -r '.environments.${{ inputs.environment }} | to_entries | .[] | .key + "=" + .value' config/container_variables.yml)
91
99
echo "parsed_env_vars=$parsed_env_vars" >> $GITHUB_OUTPUT
92
100
- name : Populate web task definition
93
- if : inputs.server_types == 'web' || inputs.server_types == 'all'
101
+ if : ${{ inputs.server_types == 'web' || inputs.server_types == 'all' }}
94
102
id : create-web-task-definition
95
103
uses : aws-actions/amazon-ecs-render-task-definition@v1
96
104
with :
97
105
task-definition-family : " mavis-web-task-definition-${{ inputs.environment }}"
98
106
container-name : " application"
99
107
image : " ${{ env.aws_account_id }}.dkr.ecr.eu-west-2.amazonaws.com/mavis/webapp@${{ steps.get-image-digest.outputs.digest }}"
100
108
environment-variables : ${{ steps.parse-environment-variables.outputs.parsed_env_vars }}
101
- secrets : | # We can define secrets here too if we want
102
- RAILS_MASTER_KEY=/copilot/mavis/secrets/STAGING_RAILS_MASTER_KEY
103
109
- name : Populate good-job task definition
104
- if : inputs.server_types == 'good-job' || inputs.server_types == 'all'
110
+ if : ${{ inputs.server_types == 'good-job' || inputs.server_types == 'all' }}
105
111
id : create-good-job-task-definition
106
112
uses : aws-actions/amazon-ecs-render-task-definition@v1
107
113
with :
108
114
task-definition-family : " mavis-good-job-task-definition-${{ inputs.environment }}"
109
115
container-name : " application"
110
116
image : " ${{ env.aws_account_id }}.dkr.ecr.eu-west-2.amazonaws.com/mavis/webapp@${{ steps.get-image-digest.outputs.digest }}"
111
117
environment-variables : ${{ steps.parse-environment-variables.outputs.parsed_env_vars }}
118
+ - name : Populate SSM parameters for web service
119
+ if : ${{ inputs.server_types == 'web' || inputs.server_types == 'all' }}
120
+ run : |
121
+ python3 script/populate_ssm_parameters.py ${{ inputs.environment }} web --app_version=${{ env.app_version }}
122
+ - name : Populate SSM parameters for good-job service
123
+ if : ${{ inputs.server_types == 'good-job' || inputs.server_types == 'all' }}
124
+ run : |
125
+ python3 script/populate_ssm_parameters.py ${{ inputs.environment }} good-job --app_version=${{ env.app_version }}
112
126
- name : Upload artifact for web task definition
113
- if : inputs.server_types == 'web' || inputs.server_types == 'all'
127
+ if : ${{ inputs.server_types == 'web' || inputs.server_types == 'all' }}
114
128
uses : actions/upload-artifact@v4
115
129
with :
116
130
name : ${{ inputs.environment }}-web-task-definition
117
131
path : ${{ steps.create-web-task-definition.outputs.task-definition }}
118
132
- name : Upload artifact for good-job task definition
119
- if : inputs.server_types == 'good-job' || inputs.server_types == 'all'
133
+ if : ${{ inputs.server_types == 'good-job' || inputs.server_types == 'all' }}
120
134
uses : actions/upload-artifact@v4
121
135
with :
122
136
name : ${{ inputs.environment }}-good-job-task-definition
@@ -132,7 +146,7 @@ jobs:
132
146
deploy-web :
133
147
name : Deploy web service
134
148
runs-on : ubuntu-latest
135
- if : inputs.server_types == 'web' || inputs.server_types == 'all'
149
+ if : ${{ inputs.server_types == 'web' || inputs.server_types == 'all' }}
136
150
needs : [ prepare-deployment, approve-deployments ]
137
151
permissions :
138
152
id-token : write
@@ -164,9 +178,9 @@ jobs:
164
178
task-definition : ${{ needs.prepare-deployment.outputs.web-task-definition-path }}
165
179
codedeploy-appspec : appspec.yaml
166
180
cluster : ${{ env.cluster_name }}
167
- service : ${{ env.web_service }}
168
- codedeploy-application : ${{ env.web_codedeploy_application }}
169
- codedeploy-deployment-group : ${{ env.web_codedeploy_group }}
181
+ service : mavis- ${{ inputs.environment }}-web
182
+ codedeploy-application : mavis- ${{ inputs.environment }}
183
+ codedeploy-deployment-group : blue-green-group- ${{ inputs.environment }}
170
184
- name : Wait for deployment to complete
171
185
run : |
172
186
echo "Waiting for CodeDeploy deployment ${{ steps.deploy-web-service.outputs.codedeploy-deployment-id }} to complete..."
@@ -176,7 +190,7 @@ jobs:
176
190
deploy-good-job :
177
191
name : Deploy good-job service
178
192
runs-on : ubuntu-latest
179
- if : inputs.server_types == 'good-job' || inputs.server_types == 'all'
193
+ if : ${{ inputs.server_types == 'good-job' || inputs.server_types == 'all' }}
180
194
needs : [ prepare-deployment, approve-deployments ]
181
195
permissions :
182
196
id-token : write
@@ -196,6 +210,6 @@ jobs:
196
210
with :
197
211
task-definition : ${{ needs.prepare-deployment.outputs.good-job-task-definition-path }}
198
212
cluster : ${{ env.cluster_name }}
199
- service : ${{ env.good_job_service }}
213
+ service : mavis- ${{ inputs.environment }}-good-job
200
214
force-new-deployment : true
201
215
wait-for-service-stability : true
0 commit comments