Skip to content

Commit 325f3ef

Browse files
feat: PTL pipeline
1 parent 131742a commit 325f3ef

File tree

3 files changed

+416
-13
lines changed

3 files changed

+416
-13
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: Auto Deploy to DEV
2+
3+
on:
4+
pull_request:
5+
types: [closed]
6+
branches: [main]
7+
8+
env:
9+
BRANCH_NAME: ${{ github.ref_name }}
10+
11+
jobs:
12+
quality_checks:
13+
if: github.event.pull_request.merged == true
14+
uses: NHSDigital/eps-workflow-quality-checks/.github/workflows/[email protected]
15+
secrets:
16+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
17+
18+
get_commit_id:
19+
if: github.event.pull_request.merged == true
20+
runs-on: ubuntu-22.04
21+
outputs:
22+
commit_id: ${{ steps.commit_id.outputs.commit_id }}
23+
steps:
24+
- name: Get Commit ID
25+
id: commit_id
26+
run: |
27+
echo "commit_id=${{ github.sha }}" >> "$GITHUB_OUTPUT"
28+
29+
generate_dev_version:
30+
if: github.event.pull_request.merged == true
31+
needs: quality_checks
32+
runs-on: ubuntu-22.04
33+
outputs:
34+
dev_version: ${{ steps.version.outputs.dev_version }}
35+
steps:
36+
- name: Generate DEV version
37+
id: version
38+
run: |
39+
DEV_VERSION="dev-${{ github.run_number }}-$(echo ${{ github.sha }} | cut -c1-7)"
40+
echo "dev_version=${DEV_VERSION}" >> "$GITHUB_OUTPUT"
41+
echo "## DEV Version: ${DEV_VERSION}" >> "$GITHUB_STEP_SUMMARY"
42+
43+
package_code:
44+
needs: [get_commit_id, generate_dev_version]
45+
uses: ./.github/workflows/cdk_package_code.yml
46+
with:
47+
STACK_NAME: epsam
48+
VERSION_NUMBER: ${{ needs.generate_dev_version.outputs.dev_version }}
49+
COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
50+
51+
deploy_dev:
52+
if: github.event.pull_request.merged == true
53+
needs: [get_commit_id, generate_dev_version, package_code]
54+
uses: ./.github/workflows/release_all_stacks.yml
55+
with:
56+
STACK_NAME: epsam
57+
TARGET_ENVIRONMENT: dev
58+
VERSION_NUMBER: ${{ needs.generate_dev_version.outputs.dev_version }}
59+
COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
60+
CDK_APP_NAME: EpsAssistMeApp
61+
DEPLOY_CODE: true
62+
LOG_RETENTION_IN_DAYS: 30
63+
LOG_LEVEL: "DEBUG"
64+
CREATE_INT_RELEASE_NOTES: false
65+
CREATE_PROD_RELEASE_NOTES: false
66+
MARK_JIRA_RELEASED: false
67+
CREATE_INT_RC_RELEASE_NOTES: false
68+
IS_PULL_REQUEST: false
69+
secrets:
70+
CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_DEPLOY_ROLE }}
71+
CDK_PULL_IMAGE_ROLE: ${{ secrets.DEV_CDK_PULL_IMAGE_ROLE }}
72+
DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
73+
INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
74+
PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
75+
DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
76+
REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }}
77+
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
78+
SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}

.github/workflows/release.yml

Lines changed: 101 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ name: deploy to environments
22

33
on:
44
workflow_dispatch:
5+
inputs:
6+
dev_version:
7+
description: "DEV version to promote (e.g., dev-123-a1b2c3d)"
8+
required: true
9+
type: string
510

611
env:
712
BRANCH_NAME: ${{ github.event.ref.BRANCH_NAME }}
@@ -39,7 +44,7 @@ jobs:
3944
uses: asdf-vm/actions/setup@1902764435ca0dd2f3388eea723a4f92a4eb8302
4045
with:
4146
asdf_branch: v0.14.1
42-
47+
4348
- name: Cache asdf
4449
uses: actions/cache@v4
4550
with:
@@ -66,7 +71,7 @@ jobs:
6671
- name: Install dependencies
6772
run: |
6873
make install
69-
74+
7075
- name: Set VERSION_TAG to be next tag varsion
7176
id: output_version_tag
7277
run: |
@@ -121,34 +126,117 @@ jobs:
121126
VERSION_NUMBER: ${{ needs.tag_release.outputs.version_tag }}
122127
COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
123128

124-
release_dev:
125-
needs: [get_commit_id, tag_release, package_code]
126-
uses: ./.github/workflows/cdk_release_code.yml
129+
approve_qa_deployment:
130+
needs: [tag_release]
131+
runs-on: ubuntu-22.04
132+
environment: qa-approval
133+
steps:
134+
- name: Manual approval for QA deployment
135+
run: echo "QA deployment approved"
136+
137+
release_qa:
138+
needs: [get_commit_id, tag_release, package_code, approve_qa_deployment]
139+
uses: ./.github/workflows/release_all_stacks.yml
127140
with:
128141
STACK_NAME: epsam
129-
TARGET_ENVIRONMENT: dev
130-
VERSION_NUMBER: ${{ needs.tag_release.outputs.version_tag }}
142+
TARGET_ENVIRONMENT: qa
143+
VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
131144
COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
132145
CDK_APP_NAME: EpsAssistMeApp
133146
DEPLOY_CODE: true
134147
LOG_RETENTION_IN_DAYS: 30
135-
LOG_LEVEL: DEBUG
148+
LOG_LEVEL: "DEBUG"
149+
CREATE_INT_RELEASE_NOTES: false
150+
CREATE_PROD_RELEASE_NOTES: false
151+
MARK_JIRA_RELEASED: false
152+
CREATE_INT_RC_RELEASE_NOTES: false
153+
IS_PULL_REQUEST: false
136154
secrets:
137-
CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_DEPLOY_ROLE }}
138-
CDK_PULL_IMAGE_ROLE: ${{ secrets.DEV_CDK_PULL_IMAGE_ROLE }}
155+
CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.QA_CLOUD_FORMATION_DEPLOY_ROLE }}
156+
CDK_PULL_IMAGE_ROLE: ${{ secrets.QA_CDK_PULL_IMAGE_ROLE }}
157+
DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
158+
INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
159+
PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
160+
DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
161+
REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }}
162+
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
163+
SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
164+
165+
approve_production_deployment:
166+
needs: [release_qa]
167+
runs-on: ubuntu-22.04
168+
environment: production-approval
169+
steps:
170+
- name: Manual approval for INT and PROD deployment
171+
run: echo "Production environments (INT and PROD) deployment approved"
172+
173+
release_int:
174+
needs:
175+
[get_commit_id, tag_release, package_code, approve_production_deployment]
176+
uses: ./.github/workflows/release_all_stacks.yml
177+
with:
178+
STACK_NAME: epsam
179+
TARGET_ENVIRONMENT: int
180+
VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
181+
COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
182+
CDK_APP_NAME: EpsAssistMeApp
183+
DEPLOY_CODE: true
184+
LOG_RETENTION_IN_DAYS: 30
185+
LOG_LEVEL: "INFO"
186+
CREATE_INT_RELEASE_NOTES: true
187+
CREATE_PROD_RELEASE_NOTES: false
188+
MARK_JIRA_RELEASED: false
189+
CREATE_INT_RC_RELEASE_NOTES: true
190+
IS_PULL_REQUEST: false
191+
secrets:
192+
CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.INT_CLOUD_FORMATION_DEPLOY_ROLE }}
193+
CDK_PULL_IMAGE_ROLE: ${{ secrets.INT_CDK_PULL_IMAGE_ROLE }}
194+
DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
195+
INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
196+
PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
197+
DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
198+
REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }}
199+
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
200+
SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
201+
202+
release_prod:
203+
needs:
204+
[get_commit_id, tag_release, package_code, approve_production_deployment]
205+
uses: ./.github/workflows/release_all_stacks.yml
206+
with:
207+
STACK_NAME: epsam
208+
TARGET_ENVIRONMENT: prod
209+
VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
210+
COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }}
211+
CDK_APP_NAME: EpsAssistMeApp
212+
DEPLOY_CODE: true
213+
LOG_RETENTION_IN_DAYS: 731
214+
LOG_LEVEL: "INFO"
215+
CREATE_INT_RELEASE_NOTES: false
216+
CREATE_PROD_RELEASE_NOTES: true
217+
MARK_JIRA_RELEASED: true
218+
CREATE_INT_RC_RELEASE_NOTES: false
219+
IS_PULL_REQUEST: false
220+
secrets:
221+
CLOUD_FORMATION_DEPLOY_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_DEPLOY_ROLE }}
222+
CDK_PULL_IMAGE_ROLE: ${{ secrets.PROD_CDK_PULL_IMAGE_ROLE }}
223+
DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
224+
INT_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
225+
PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }}
226+
DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
139227
REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }}
140228
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
141229
SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
142230

143231
create_release_notes:
144-
needs: [tag_release, package_code, get_commit_id, release_dev]
232+
needs: [tag_release, package_code, get_commit_id, release_int, release_prod]
145233
uses: ./.github/workflows/create_release_notes.yml
146234
with:
147-
VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}}
235+
VERSION_NUMBER: ${{ inputs.dev_version || needs.tag_release.outputs.version_tag }}
148236
CREATE_INT_RELEASE_NOTES: true
149237
CREATE_INT_RC_RELEASE_NOTES: false
150238
CREATE_PROD_RELEASE_NOTES: true
151-
MARK_JIRA_RELEASED: false
239+
MARK_JIRA_RELEASED: true
152240
secrets:
153241
DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }}
154242
DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }}

0 commit comments

Comments
 (0)