11name : deploy to environments
22
33on :
4- pull_request :
5- branches : [main]
4+ workflow_dispatch :
5+ inputs :
6+ dev_version :
7+ description : " DEV version to promote (e.g., dev-123-a1b2c3d)"
8+ required : true
9+ type : string
610
711env :
8- BRANCH_NAME : ${{ github.event.ref.BRANCH_NAME }}
12+ BRANCH_NAME : ${{ github.ref_name }}
913
1014jobs :
1115 quality_checks :
@@ -27,29 +31,108 @@ jobs:
2731 needs : quality_checks
2832 runs-on : ubuntu-22.04
2933 outputs :
30- version_tag : PR- ${{ github.event.number }}
34+ version_tag : ${{ steps.output_version_tag.outputs.VERSION_TAG }}
3135 steps :
32- - name : Set PR version for testing
36+ - name : Checkout code
37+ uses : actions/checkout@v5
38+ with :
39+ ref : ${{ env.BRANCH_NAME }}
40+ fetch-depth : 0
41+
42+ # using git commit sha for version of action to ensure we have stable version
43+ - name : Install asdf
44+ uses : asdf-vm/actions/setup@1902764435ca0dd2f3388eea723a4f92a4eb8302
45+ with :
46+ asdf_branch : v0.14.1
47+
48+ - name : Cache asdf
49+ uses : actions/cache@v4
50+ with :
51+ path : |
52+ ~/.asdf
53+ key : ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}
54+ restore-keys : |
55+ ${{ runner.os }}-asdf-
56+
57+ - name : Install asdf dependencies in .tool-versions
58+ uses : asdf-vm/actions/install@1902764435ca0dd2f3388eea723a4f92a4eb8302
59+ with :
60+ asdf_branch : v0.14.1
61+ env :
62+ PYTHON_CONFIGURE_OPTS : --enable-shared
63+
64+ - name : Setting up .npmrc
65+ env :
66+ NODE_AUTH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
67+ run : |
68+ echo "//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}" >> ~/.npmrc
69+ echo "@nhsdigital:registry=https://npm.pkg.github.com" >> ~/.npmrc
70+
71+ - name : Install dependencies
72+ run : |
73+ make install
74+
75+ - name : Set VERSION_TAG to be next tag version
76+ id : output_version_tag
77+ run : |
78+ NEXT_VERSION=$(npx semantic-release --dry-run | grep -i 'The next release version is' | sed -E 's/.* ([[:digit:].]+)$/\1/')
79+ tagFormat=$(node -e "const config=require('./release.config.js'); console.log(config.tagFormat)")
80+ if [ "${tagFormat}" = "null" ]
81+ then
82+ tagFormat="v\${version}"
83+ fi
84+ # disabling shellcheck as replace does not work
85+ # shellcheck disable=SC2001
86+ VERSION_TAG=$(echo "$tagFormat" | sed "s/\${version}/$NEXT_VERSION/")
87+ echo "## VERSION TAG : ${VERSION_TAG}" >> "$GITHUB_STEP_SUMMARY"
88+ echo "VERSION_TAG=${VERSION_TAG}" >> "$GITHUB_OUTPUT"
89+ echo "VERSION_TAG=${VERSION_TAG}" >> "$GITHUB_ENV"
90+ env :
91+ GITHUB_TOKEN : ${{ github.token }}
92+
93+ - name : tag release
94+ env :
95+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
3396 run : |
34- VERSION="PR-${{ github.event.number }}"
35- echo "VERSION_TAG=$VERSION" >> "$GITHUB_OUTPUT"
36- echo "Using PR version for testing: $VERSION"
97+ npx semantic-release
98+
99+ - name : Get release for editing
100+ id : get_release
101+ # version 1.2.4
102+ uses : cardinalby/git-get-release-action@5172c3a026600b1d459b117738c605fabc9e4e44
103+ env :
104+ GITHUB_TOKEN : ${{ github.token }}
105+ with :
106+ tag : ${{ env.VERSION_TAG }}
107+
108+ - name : Edit Release
109+ # version 1.2.0
110+ uses : irongut/EditRelease@ccf529ad26dddf9996e7dd0f24ca5da4ea507cc2
111+ with :
112+ token : ${{ secrets.GITHUB_TOKEN }}
113+ id : ${{ steps.get_release.outputs.id }}
114+ body : |
115+ ## Info
116+ [See code diff](${{ github.event.compare }})
117+ [Release workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
118+
119+ It was initialised by [${{ github.event.sender.login }}](${{ github.event.sender.html_url }})
37120
38121 package_code :
39122 needs : [get_commit_id, tag_release]
40123 uses : ./.github/workflows/cdk_package_code.yml
41124 with :
42- STACK_NAME : epsam-test
125+ STACK_NAME : epsam
43126 VERSION_NUMBER : ${{ needs.tag_release.outputs.version_tag }}
44127 COMMIT_ID : ${{ needs.get_commit_id.outputs.commit_id }}
45128
46129 release_dev :
47130 needs : [get_commit_id, tag_release, package_code]
48131 uses : ./.github/workflows/release_all_stacks.yml
49132 with :
50- STACK_NAME : epsam-test
133+ STACK_NAME : epsam
51134 TARGET_ENVIRONMENT : dev
52- VERSION_NUMBER : ${{ needs.tag_release.outputs.version_tag }}
135+ VERSION_NUMBER : ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
53136 COMMIT_ID : ${{ needs.get_commit_id.outputs.commit_id }}
54137 CDK_APP_NAME : EpsAssistMeApp
55138 DEPLOY_CODE : true
@@ -71,104 +154,101 @@ jobs:
71154 SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
72155 SLACK_SIGNING_SECRET : ${{ secrets.SLACK_SIGNING_SECRET }}
73156
74- # Commented out for testing - uncomment after DEV deployment confirmed working
75- # release_qa:
76- # needs: [get_commit_id, tag_release, package_code, release_dev]
77- # uses: ./.github/workflows/release_all_stacks.yml
78- # with:
79- # STACK_NAME: epsam
80- # TARGET_ENVIRONMENT: qa
81- # VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
82- # COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
83- # CDK_APP_NAME: EpsAssistMeApp
84- # DEPLOY_CODE: true
85- # LOG_RETENTION_IN_DAYS: 30
86- # LOG_LEVEL: "DEBUG"
87- # CREATE_INT_RELEASE_NOTES: false
88- # CREATE_PROD_RELEASE_NOTES: false
89- # MARK_JIRA_RELEASED: false
90- # CREATE_INT_RC_RELEASE_NOTES: false
91- # IS_PULL_REQUEST: false
92- # secrets:
93- # CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.QA_CLOUD_FORMATION_DEPLOY_ROLE }}
94- # CDK_PULL_IMAGE_ROLE: ${{ secrets.QA_CDK_PULL_IMAGE_ROLE }}
95- # DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
96- # INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
97- # PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
98- # DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
99- # REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }}
100- # SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
101- # SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
102-
103- # Commented out for safe testing - uncomment after DEV deployment confirmed working
104- # release_int:
105- # needs: [get_commit_id, tag_release, package_code, release_qa]
106- # uses: ./.github/workflows/release_all_stacks.yml
107- # with:
108- # STACK_NAME: epsam
109- # TARGET_ENVIRONMENT: int
110- # VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
111- # COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
112- # CDK_APP_NAME: EpsAssistMeApp
113- # DEPLOY_CODE: true
114- # LOG_RETENTION_IN_DAYS: 731
115- # LOG_LEVEL: "INFO"
116- # CREATE_INT_RELEASE_NOTES: true
117- # CREATE_PROD_RELEASE_NOTES: false
118- # MARK_JIRA_RELEASED: false
119- # CREATE_INT_RC_RELEASE_NOTES: true
120- # IS_PULL_REQUEST: false
121- # secrets:
122- # CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.INT_CLOUD_FORMATION_DEPLOY_ROLE }}
123- # CDK_PULL_IMAGE_ROLE: ${{ secrets.INT_CDK_PULL_IMAGE_ROLE }}
124- # DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
125- # INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
126- # PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
127- # DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
128- # REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }}
129- # SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
130- # SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
131-
132- # Commented out for safe testing - uncomment after DEV deployment confirmed working
133- # release_prod:
134- # needs: [get_commit_id, tag_release, package_code, release_int]
135- # uses: ./.github/workflows/release_all_stacks.yml
136- # with:
137- # STACK_NAME: epsam
138- # TARGET_ENVIRONMENT: prod
139- # VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
140- # COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
141- # CDK_APP_NAME: EpsAssistMeApp
142- # DEPLOY_CODE: true
143- # LOG_RETENTION_IN_DAYS: 731
144- # LOG_LEVEL: "INFO"
145- # CREATE_INT_RELEASE_NOTES: false
146- # CREATE_PROD_RELEASE_NOTES: true
147- # MARK_JIRA_RELEASED: true
148- # CREATE_INT_RC_RELEASE_NOTES: false
149- # IS_PULL_REQUEST: false
150- # secrets:
151- # CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_DEPLOY_ROLE }}
152- # CDK_PULL_IMAGE_ROLE: ${{ secrets.PROD_CDK_PULL_IMAGE_ROLE }}
153- # DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
154- # INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
155- # PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
156- # DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
157- # REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }}
158- # SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
159- # SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
160-
161- # create_release_notes:
162- # needs: [tag_release, package_code, get_commit_id, release_int, release_prod]
163- # uses: ./.github/workflows/create_release_notes.yml
164- # with:
165- # VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
166- # CREATE_INT_RELEASE_NOTES: true
167- # CREATE_INT_RC_RELEASE_NOTES: false
168- # CREATE_PROD_RELEASE_NOTES: true
169- # MARK_JIRA_RELEASED: true
170- # secrets:
171- # DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
172- # DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
173- # INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
174- # PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
157+ release_qa :
158+ needs : [get_commit_id, tag_release, package_code, release_dev]
159+ uses : ./.github/workflows/release_all_stacks.yml
160+ with :
161+ STACK_NAME : epsam
162+ TARGET_ENVIRONMENT : qa
163+ VERSION_NUMBER : ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
164+ COMMIT_ID : ${{ needs.get_commit_id.outputs.commit_id }}
165+ CDK_APP_NAME : EpsAssistMeApp
166+ DEPLOY_CODE : true
167+ LOG_RETENTION_IN_DAYS : 30
168+ LOG_LEVEL : " DEBUG"
169+ CREATE_INT_RELEASE_NOTES : false
170+ CREATE_PROD_RELEASE_NOTES : false
171+ MARK_JIRA_RELEASED : false
172+ CREATE_INT_RC_RELEASE_NOTES : false
173+ IS_PULL_REQUEST : false
174+ secrets :
175+ CLOUD_FORMATION_DEPLOY_ROLE : ${{ secrets.QA_CLOUD_FORMATION_DEPLOY_ROLE }}
176+ CDK_PULL_IMAGE_ROLE : ${{ secrets.QA_CDK_PULL_IMAGE_ROLE }}
177+ DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
178+ INT_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
179+ PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
180+ DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
181+ REGRESSION_TESTS_PEM : ${{ secrets.REGRESSION_TESTS_PEM }}
182+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
183+ SLACK_SIGNING_SECRET : ${{ secrets.SLACK_SIGNING_SECRET }}
184+
185+ release_int :
186+ needs : [get_commit_id, tag_release, package_code, release_qa]
187+ uses : ./.github/workflows/release_all_stacks.yml
188+ with :
189+ STACK_NAME : epsam
190+ TARGET_ENVIRONMENT : int
191+ VERSION_NUMBER : ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
192+ COMMIT_ID : ${{ needs.get_commit_id.outputs.commit_id }}
193+ CDK_APP_NAME : EpsAssistMeApp
194+ DEPLOY_CODE : true
195+ LOG_RETENTION_IN_DAYS : 731
196+ LOG_LEVEL : " INFO"
197+ CREATE_INT_RELEASE_NOTES : true
198+ CREATE_PROD_RELEASE_NOTES : false
199+ MARK_JIRA_RELEASED : false
200+ CREATE_INT_RC_RELEASE_NOTES : true
201+ IS_PULL_REQUEST : false
202+ secrets :
203+ CLOUD_FORMATION_DEPLOY_ROLE : ${{ secrets.INT_CLOUD_FORMATION_DEPLOY_ROLE }}
204+ CDK_PULL_IMAGE_ROLE : ${{ secrets.INT_CDK_PULL_IMAGE_ROLE }}
205+ DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
206+ INT_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
207+ PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
208+ DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
209+ REGRESSION_TESTS_PEM : ${{ secrets.REGRESSION_TESTS_PEM }}
210+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
211+ SLACK_SIGNING_SECRET : ${{ secrets.SLACK_SIGNING_SECRET }}
212+
213+ release_prod :
214+ needs : [get_commit_id, tag_release, package_code, release_int]
215+ uses : ./.github/workflows/release_all_stacks.yml
216+ with :
217+ STACK_NAME : epsam
218+ TARGET_ENVIRONMENT : prod
219+ VERSION_NUMBER : ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
220+ COMMIT_ID : ${{ needs.get_commit_id.outputs.commit_id }}
221+ CDK_APP_NAME : EpsAssistMeApp
222+ DEPLOY_CODE : true
223+ LOG_RETENTION_IN_DAYS : 731
224+ LOG_LEVEL : " INFO"
225+ CREATE_INT_RELEASE_NOTES : false
226+ CREATE_PROD_RELEASE_NOTES : true
227+ MARK_JIRA_RELEASED : true
228+ CREATE_INT_RC_RELEASE_NOTES : false
229+ IS_PULL_REQUEST : false
230+ secrets :
231+ CLOUD_FORMATION_DEPLOY_ROLE : ${{ secrets.PROD_CLOUD_FORMATION_DEPLOY_ROLE }}
232+ CDK_PULL_IMAGE_ROLE : ${{ secrets.PROD_CDK_PULL_IMAGE_ROLE }}
233+ DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
234+ INT_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
235+ PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
236+ DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
237+ REGRESSION_TESTS_PEM : ${{ secrets.REGRESSION_TESTS_PEM }}
238+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
239+ SLACK_SIGNING_SECRET : ${{ secrets.SLACK_SIGNING_SECRET }}
240+
241+ create_release_notes :
242+ needs : [tag_release, package_code, get_commit_id, release_int, release_prod]
243+ uses : ./.github/workflows/create_release_notes.yml
244+ with :
245+ VERSION_NUMBER : ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
246+ CREATE_INT_RELEASE_NOTES : true
247+ CREATE_INT_RC_RELEASE_NOTES : false
248+ CREATE_PROD_RELEASE_NOTES : true
249+ MARK_JIRA_RELEASED : true
250+ secrets :
251+ DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
252+ DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
253+ INT_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
254+ PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE : ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
0 commit comments