1- name : " CI/CD pull request"
2-
3- # The total recommended execution time for the "CI/CD Pull Request" workflow is around 20 minutes.
1+ name : ' CI/CD pull request'
42
53on :
6- push :
7- branches :
8- - " **"
9- - " !main"
104 pull_request :
11- types : [opened, reopened]
5+ types : [opened, reopened, synchronize, labeled ]
126
137jobs :
148 metadata :
15- name : " Set CI/CD metadata"
9+ name : ' Set CI/CD metadata'
1610 runs-on : ubuntu-latest
1711 timeout-minutes : 1
1812 outputs :
@@ -23,28 +17,23 @@ jobs:
2317 nodejs_version : ${{ steps.variables.outputs.nodejs_version }}
2418 python_version : ${{ steps.variables.outputs.python_version }}
2519 terraform_version : ${{ steps.variables.outputs.terraform_version }}
26- version : ${{ steps.variables.outputs.version }}
2720 does_pull_request_exist : ${{ steps.pr_exists.outputs.does_pull_request_exist }}
28- branch_name : ${{ steps.variables.outputs.branch_name }}
21+ version : ${{ steps.variables.outputs.version }}
2922 steps :
30- - name : " Checkout code"
23+ - name : ' Checkout code'
3124 uses : actions/checkout@v6
32- - name : " Set CI/CD variables"
25+ - name : ' Set CI/CD variables'
3326 id : variables
34- env :
35- BRANCH_NAME : ${{ github.head_ref }}
3627 run : |
3728 datetime=$(date -u +'%Y-%m-%dT%H:%M:%S%z')
38- BUILD_DATETIME=$datetime make version-create-effective-file
3929 echo "build_datetime_london=$(TZ=Europe/London date --date=$datetime +'%Y-%m-%dT%H:%M:%S%z')" >> $GITHUB_OUTPUT
4030 echo "build_datetime=$datetime" >> $GITHUB_OUTPUT
4131 echo "build_timestamp=$(date --date=$datetime -u +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT
4232 echo "build_epoch=$(date --date=$datetime -u +'%s')" >> $GITHUB_OUTPUT
43- echo "nodejs_version=$(grep "^nodejs\s" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
44- echo "python_version=$(grep "^python\s" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
45- echo "terraform_version=$(grep "^terraform\s" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
46- echo "version=$(head -n 1 .version 2> /dev/null || echo unknown)" >> $GITHUB_OUTPUT
47- echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
33+ echo "nodejs_version=$(grep "^nodejs" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
34+ echo "python_version=$(grep "^python" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
35+ echo "terraform_version=$(grep "^terraform" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
36+ echo "version=${GITHUB_REF}" >> $GITHUB_OUTPUT
4837 - name : " Check if pull request exists for this branch"
4938 id : pr_exists
5039 env :
@@ -72,45 +61,45 @@ jobs:
7261 export DOES_PULL_REQUEST_EXIST="${{ steps.pr_exists.outputs.does_pull_request_exist }}"
7362 export BRANCH_NAME="${{ steps.variables.outputs.branch_name }}"
7463 make list-variables
75- commit-stage : # Recommended maximum execution time is 2 minutes
76- name : " Commit stage"
64+ commit-stage :
65+ name : ' Commit stage'
7766 needs : [metadata]
7867 uses : ./.github/workflows/stage-1-commit.yaml
7968 with :
80- build_datetime : " ${{ needs.metadata.outputs.build_datetime }}"
81- build_timestamp : " ${{ needs.metadata.outputs.build_timestamp }}"
82- build_epoch : " ${{ needs.metadata.outputs.build_epoch }}"
83- nodejs_version : " ${{ needs.metadata.outputs.nodejs_version }}"
84- python_version : " ${{ needs.metadata.outputs.python_version }}"
85- terraform_version : " ${{ needs.metadata.outputs.terraform_version }}"
86- version : " ${{ needs.metadata.outputs.version }}"
69+ build_datetime : ' ${{ needs.metadata.outputs.build_datetime }}'
70+ build_timestamp : ' ${{ needs.metadata.outputs.build_timestamp }}'
71+ build_epoch : ' ${{ needs.metadata.outputs.build_epoch }}'
72+ nodejs_version : ' ${{ needs.metadata.outputs.nodejs_version }}'
73+ python_version : ' ${{ needs.metadata.outputs.python_version }}'
74+ terraform_version : ' ${{ needs.metadata.outputs.terraform_version }}'
75+ version : ' ${{ needs.metadata.outputs.version }}'
8776 secrets : inherit
88- test-stage : # Recommended maximum execution time is 5 minutes
89- name : " Test stage"
90- needs : [metadata, commit-stage ]
77+ test-stage :
78+ name : ' Test stage'
79+ needs : [metadata]
9180 uses : ./.github/workflows/stage-2-test.yaml
9281 with :
93- build_datetime : " ${{ needs.metadata.outputs.build_datetime }}"
94- build_timestamp : " ${{ needs.metadata.outputs.build_timestamp }}"
95- build_epoch : " ${{ needs.metadata.outputs.build_epoch }}"
96- nodejs_version : " ${{ needs.metadata.outputs.nodejs_version }}"
97- python_version : " ${{ needs.metadata.outputs.python_version }}"
98- terraform_version : " ${{ needs.metadata.outputs.terraform_version }}"
99- version : " ${{ needs.metadata.outputs.version }}"
82+ build_datetime : ' ${{ needs.metadata.outputs.build_datetime }}'
83+ build_timestamp : ' ${{ needs.metadata.outputs.build_timestamp }}'
84+ build_epoch : ' ${{ needs.metadata.outputs.build_epoch }}'
85+ nodejs_version : ' ${{ needs.metadata.outputs.nodejs_version }}'
86+ python_version : ' ${{ needs.metadata.outputs.python_version }}'
87+ terraform_version : ' ${{ needs.metadata.outputs.terraform_version }}'
88+ version : ' ${{ needs.metadata.outputs.version }}'
10089 secrets : inherit
101- build-stage : # Recommended maximum execution time is 3 minutes
102- name : " Build stage"
103- needs : [metadata, test-stage ]
90+ build-stage :
91+ name : ' Build stage'
92+ needs : [metadata]
10493 uses : ./.github/workflows/stage-3-build.yaml
105- if : needs.metadata.outputs.does_pull_request_exist == 'true' || (github.event_name == 'pull_request' && (github.event.action == 'opened' || github.event.action == 'reopened'))
10694 with :
107- build_datetime : " ${{ needs.metadata.outputs.build_datetime }}"
108- build_timestamp : " ${{ needs.metadata.outputs.build_timestamp }}"
109- build_epoch : " ${{ needs.metadata.outputs.build_epoch }}"
110- nodejs_version : " ${{ needs.metadata.outputs.nodejs_version }}"
111- python_version : " ${{ needs.metadata.outputs.python_version }}"
112- terraform_version : " ${{ needs.metadata.outputs.terraform_version }}"
113- version : " ${{ needs.metadata.outputs.version }}"
95+ build_datetime : ' ${{ needs.metadata.outputs.build_datetime }}'
96+ build_timestamp : ' ${{ needs.metadata.outputs.build_timestamp }}'
97+ build_epoch : ' ${{ needs.metadata.outputs.build_epoch }}'
98+ nodejs_version : ' ${{ needs.metadata.outputs.nodejs_version }}'
99+ python_version : ' ${{ needs.metadata.outputs.python_version }}'
100+ terraform_version : ' ${{ needs.metadata.outputs.terraform_version }}'
101+ version : ' ${{ needs.metadata.outputs.version }}'
102+ commit_sha : ' ${{ github.event.pull_request.head.sha }}'
114103 secrets : inherit
115104 acceptance-stage : # Recommended maximum execution time is 10 minutes
116105 name : " Acceptance stage"
@@ -125,4 +114,30 @@ jobs:
125114 python_version : " ${{ needs.metadata.outputs.python_version }}"
126115 terraform_version : " ${{ needs.metadata.outputs.terraform_version }}"
127116 version : " ${{ needs.metadata.outputs.version }}"
117+ deploy-stage :
118+ if : contains(github.event.pull_request.labels.*.name, 'deploy')
119+ name : Deploy review app pr-${{ github.event.pull_request.number }}
120+ needs : [build-stage]
121+ permissions :
122+ id-token : write
123+ uses : ./.github/workflows/stage-5-deploy.yaml
124+ with :
125+ environments : ' ["review"]'
126+ commit_sha : ${{ github.event.pull_request.head.sha }}
127+ pr_number : ${{ github.event.pull_request.number }}
128128 secrets : inherit
129+ post-url :
130+ if : contains(github.event.pull_request.labels.*.name, 'deploy')
131+ name : Post URL pr-${{ github.event.pull_request.number }} to PR comments
132+ runs-on : ubuntu-latest
133+ needs : [deploy-stage]
134+ permissions :
135+ pull-requests : write
136+ steps :
137+ - name : Post URL to PR comments
138+ uses : marocchino/sticky-pull-request-comment@5060d4700a91de252c87eeddd2da026382d9298a
139+ with :
140+ message : |
141+ The review app is available at this URL:
142+ https://pr-${{ github.event.pull_request.number }}.non-live.digital-lung-cancer-screening.nhs.uk/
143+ You must authenticate with HTTP basic authentication. Ask the team for credentials.
0 commit comments