@ -9,30 +9,91 @@ on:
required : true
type : string
description : "The number of the PR for which to deploy a review app. Note: this is NOT the ticket number"
pull_request:
types : [ synchronize]
concurrency:
group : deploy-review${{ github.event.pull_request.number || inputs.pr_number || github.event.issue.number }}
permissions : {}
jobs:
get_pr_details:
name : Get PR details
if : github.event_name == 'workflow_dispatch' || (github.event.issue.pull_request && startsWith(github.event.comment.body, '/deploy-review'))
if : github.event_name == 'workflow_dispatch' || (github.event.issue.pull_request && startsWith(github.event.comment.body, '/deploy-review')) || github.event_name == 'pull_request'
runs-on : ubuntu-latest
outputs:
pr_number : ${{ steps.get_pr_details.outputs.pr_number }}
pr_head_sha : ${{ steps.get_pr_details.outputs.pr_head_sha }}
steps:
- name : Get PR number
- name : Get PR number and HEAD SHA
id : get_pr_details
uses : actions/github-script@v7
with:
script : |
let prNumber;
if (context.eventName === 'workflow_dispatch') {
core.setOutput('pr_number', '${{ inputs.pr_number }}');
prNumber = '${{ inputs.pr_number }}';
} else if (context.eventName === 'pull_request') {
prNumber = context.payload.pull_request.number.toString();
} else {
core.setOutput('pr_number', context.issue.number.toString());
prNumber = context.issue.number.toString( );
}
core.setOutput('pr_number', prNumber);
const { data: pr } = await github.rest.pulls.get({
owner : context.repo.owner,
repo : context.repo.repo,
pull_number : parseInt(prNumber),
});
core.setOutput('pr_head_sha', pr.head.sha);
check_review_app_exists:
name : Check if review app exists
if : github.event_name == 'pull_request'
needs : [ get_pr_details]
runs-on : ubuntu-latest
permissions:
id-token : write
outputs:
exists : ${{ steps.check.outputs.exists }}
steps:
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with:
aws-region : eu-west-2
role-to-assume : arn:aws:iam::837698168072:role/core-dev-deployment
- name : Check if ECS service exists
id : check
run : |
if aws ecs describe-services --cluster core-review-${{ needs.get_pr_details.outputs.pr_number }}-app --services core-review-${{ needs.get_pr_details.outputs.pr_number }}-app --query "services[?status=='ACTIVE']" | grep -q 'serviceName'; then
echo "exists=true" >> $GITHUB_OUTPUT
else
echo "exists=false" >> $GITHUB_OUTPUT
fi
deployment_started_comment:
name : Comment deployment started
if : github.event_name != 'pull_request'
needs : [ get_pr_details]
runs-on : ubuntu-latest
permissions:
pull-requests : write
steps:
- name : Comment on PR
uses : actions/github-script@v7
with:
script : |
await github.rest.issues.createComment({
owner : context.repo.owner,
repo : context.repo.repo,
issue_number : ${{ needs.get_pr_details.outputs.pr_number }},
body : 'Starting review app deployment...' ,
});
infra:
name : Deploy review app infrastructure
if : github.event_name != 'pull_request'
needs : [ get_pr_details]
uses : communitiesuk/submit-social-housing-lettings-and-sales-data-infrastructure/.github/workflows/create_review_app_infra.yml@main
with:
@ -43,6 +104,7 @@ jobs:
code:
name : Deploy review app code
if : github.event_name != 'pull_request'
needs : [ get_pr_details, infra]
uses : ./.github/workflows/aws_deploy.yml
with:
@ -51,11 +113,28 @@ jobs:
aws_task_prefix : core-review-${{ needs.get_pr_details.outputs.pr_number }}
concurrency_tag : ${{ needs.get_pr_details.outputs.pr_number }}
environment : review
ref : ${{ needs.get_pr_details.outputs.pr_head_sha }}
permissions:
id-token : write
auto_update_code:
name : Auto-update review app code
if : github.event_name == 'pull_request' && needs.check_review_app_exists.outputs.exists == 'true'
needs : [ get_pr_details, check_review_app_exists]
uses : ./.github/workflows/aws_deploy.yml
with:
aws_account_id : 837698168072
aws_role_prefix : core-dev
aws_task_prefix : core-review-${{ needs.get_pr_details.outputs.pr_number }}
concurrency_tag : ${{ needs.get_pr_details.outputs.pr_number }}
environment : review
ref : ${{ needs.get_pr_details.outputs.pr_head_sha }}
permissions:
id-token : write
comment:
name : Add link to PR
if : github.event_name != 'pull_request'
needs : [ get_pr_details, code]
runs-on : ubuntu-latest
permissions: