-
Notifications
You must be signed in to change notification settings - Fork 1
191 lines (179 loc) · 12.2 KB
/
Copy pathdevops-vars.yml
File metadata and controls
191 lines (179 loc) · 12.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
on:
workflow_call:
inputs:
DEPLOY_FEATURE_BRANCHES:
description: "A boolean flag used to enable the deployment of CloudFormation for feature branches. Will deploy if true."
type: boolean
default: false
outputs:
DEVOPS_BRANCH_ENV_NAME:
description: "A value to append to CloudFormation stack names and AWS resource names for the purpose of unique names."
value: ${{ jobs.define-outputs.outputs.DEVOPS_BRANCH_ENV_NAME }}
DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME:
description: "The name of the current deployment environment. That is one of: dev, uat, demo, or prod. This is used to determine what AWS account to deploy into."
value: ${{ jobs.define-outputs.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}
DEVOPS_DEPLOY_FEATURE_BRANCHES:
description: "A true/false (string) flag that can be used to enable the deployment of feature branches (if set to true)."
value: ${{ jobs.define-outputs.outputs.DEVOPS_DEPLOY_FEATURE_BRANCHES }}
DEVOPS_IS_ENV_DEV:
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'DEV' deployment environment."
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEV }}
DEVOPS_IS_ENV_UAT:
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'UAT' deployment environment."
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_UAT }}
DEVOPS_IS_ENV_DEMO:
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'DEMO' deployment environment."
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEMO }}
DEVOPS_IS_ENV_PROD:
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'PROD' deployment environment."
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_PROD }}
DEVOPS_IS_FEATURE_BRANCH:
description: "A true/false (string) flag that indicates whether the current GitHub branch is a feature branch or not. It is determined to be a feature branch if the branch name is not one of: 'develop', 'uat', 'demo', 'main'."
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_FEATURE_BRANCH }}
DEVOPS_JIRA_TICKET_ID:
description: "The JIRA Ticket ID that was found within the branch name. Only expect a value when DEVOPS_IS_FEATURE_BRANCH is true. Defaults to 'N/A' in the case one doesn't exist in the branch name or isn't a feature branch."
value: ${{ jobs.define-outputs.outputs.DEVOPS_JIRA_TICKET_ID }}
DEVOPS_TRIGGER_DB_MIGRATIONS_NON_PROD:
description: "This flag determines whether or not the Non-Prod Database Migrations will actually occur (true) or if the conditions have not been met for attempting DB migrations (false)."
value: ${{ (jobs.define-outputs.outputs.DEVOPS_IS_ENV_UAT == 'true' || jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEMO == 'true' || jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEV == 'true') && (jobs.define-outputs.outputs.DEVOPS_IS_FEATURE_BRANCH == 'false') }}
DEVOPS_TRIGGER_DB_MIGRATIONS_PROD:
description: "This flag determines whether or not the Prod Database Migrations will actually occur (true) or if the conditions have not been met for attempting DB migrations (false)."
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_PROD == 'true' }}
DEVOPS_TRIGGER_DEPLOYMENT:
description: "This flag determines whether or not the CloudFormation deployment will actually occur (true) or if the conditions have not been met for deployment (false)."
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_UAT == 'true' || jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEMO == 'true' || jobs.define-outputs.outputs.DEVOPS_IS_ENV_PROD == 'true' || jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEV == 'true' && (jobs.define-outputs.outputs.DEVOPS_IS_FEATURE_BRANCH == 'false' || (jobs.define-outputs.outputs.DEVOPS_IS_FEATURE_BRANCH == 'true' && jobs.define-outputs.outputs.DEVOPS_DEPLOY_FEATURE_BRANCHES == 'true')) }}
jobs:
define-outputs:
runs-on: ubuntu-latest
outputs:
DEVOPS_BRANCH_ENV_NAME: ${{ steps.set-branch-env-name.outputs.DEVOPS_BRANCH_ENV_NAME }}
DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}
DEVOPS_DEPLOY_FEATURE_BRANCHES: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_DEPLOY_FEATURE_BRANCHES }}
DEVOPS_IS_ENV_DEV: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEV }}
DEVOPS_IS_ENV_UAT: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_UAT }}
DEVOPS_IS_ENV_DEMO: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEMO }}
DEVOPS_IS_ENV_PROD: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_PROD }}
DEVOPS_IS_FEATURE_BRANCH: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }}
DEVOPS_JIRA_TICKET_ID: ${{ steps.set-jira-ticket-id.outputs.DEVOPS_JIRA_TICKET_ID }}
steps:
- name: Echo Version
run: |
echo 'devops-vars v1.3.1'
- name: Determine value of DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME
id: set-deployment-env-vars
env:
GITHUB_BRANCH_NAME: ${{ github.ref_name }}
BRANCH_NAME_DEV: ${{ vars.DEVOPS_BRANCH_NAME_DEV || 'develop' }}
BRANCH_NAME_UAT: ${{ vars.DEVOPS_BRANCH_NAME_UAT || 'uat' }}
BRANCH_NAME_DEMO: ${{ vars.DEVOPS_BRANCH_NAME_DEMO }}
BRANCH_NAME_PROD: ${{ vars.DEVOPS_BRANCH_NAME_PROD }}
shell: bash
run: |
#!/bin/bash
refname=$GITHUB_BRANCH_NAME
echo "Branch Ref is ${GITHUB_BRANCH_NAME}"
# Set the variable that was passed into this workflows
echo "DEVOPS_DEPLOY_FEATURE_BRANCHES=${{ inputs.DEPLOY_FEATURE_BRANCHES }}" >> $GITHUB_OUTPUT;
# These are the special branch names that indicate the environment we are deploying to.
reDev=${BRANCH_NAME_DEV}
echo "Branch Name Dev = ${BRANCH_NAME_DEV}"
reUat=${BRANCH_NAME_UAT}
echo "Branch Name UAT = ${BRANCH_NAME_UAT}"
reDemo=${BRANCH_NAME_DEMO}
echo "Branch Name Demo = ${BRANCH_NAME_DEMO}"
reProd=${BRANCH_NAME_PROD}
echo "Branch Name Prod = ${BRANCH_NAME_PROD}"
echo "Setting Feature and Env Branch Flags to be false by default"
echo "DEVOPS_IS_FEATURE_BRANCH=false" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_DEV=false" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_UAT=false" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_DEMO=false" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_PROD=false" >> $GITHUB_OUTPUT;
# Logic for Checking Deployment Env
echo "Checking if branch name indicates a deployment to one of the four environments (dev, uat, demo, or prod)"
if [[ $refname = $reProd ]]; then
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to ${{ vars.DEVOPS_ENV_NAME_PROD }}";
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_PROD }}" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_PROD=true" >> $GITHUB_OUTPUT;
elif [[ $refname = $reUat ]]; then
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_UAT }}";
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_UAT }}" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_UAT=true" >> $GITHUB_OUTPUT;
elif [[ $refname = $reDemo ]]; then
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_DEMO }}";
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_DEMO }}" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_DEMO=true" >> $GITHUB_OUTPUT;
elif [[ $refname = $reDev ]]; then
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_DEV }}";
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_DEV }}" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_DEV=true" >> $GITHUB_OUTPUT;
else
# In case none of the above occurs
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_DEV }}";
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_DEV }}" >> $GITHUB_OUTPUT;
echo "Setting DEVOPS_IS_FEATURE_BRANCH to 'true' because this is not one of the four named environment branches.";
echo "DEVOPS_IS_FEATURE_BRANCH=true" >> $GITHUB_OUTPUT;
echo "DEVOPS_IS_ENV_DEV=true" >> $GITHUB_OUTPUT;
fi;
- name: Echo Deployment Environment Vars
id: echo-deployment-env-vars
run: |
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ steps.set-deployment-env-vars.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}"
echo "DEVOPS_IS_FEATURE_BRANCH=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }}"
echo "DEVOPS_IS_ENV_DEV=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEV }}"
echo "DEVOPS_IS_ENV_UAT=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_UAT }}"
echo "DEVOPS_IS_ENV_DEMO=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEMO }}"
echo "DEVOPS_IS_ENV_PROD=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_PROD }}"
- name: Determine value of DEVOPS_JIRA_TICKET_ID
id: set-jira-ticket-id
env:
GITHUB_BRANCH_NAME: ${{ github.ref_name }}
shell: bash
run: |
#!/bin/bash
# Set to "N/A" if not a feature branch
if [ ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }} = 'false' ]; then
echo "DEVOPS_JIRA_TICKET_ID=N/A" >> $GITHUB_OUTPUT;
else
refname=$GITHUB_BRANCH_NAME
re="[A-Z]+-[0-9]+"
echo "Checking if branch name contains a JIRA issue (format MID-1234, AN-1 or similar)"
if [[ $refname =~ $re ]]; then
echo "JIRA Ticket ID found within ${refname}";
DEVOPS_JIRA_TICKET_ID_POSSIBLY_UPPERCASE=${BASH_REMATCH[0]}
DEVOPS_JIRA_TICKET_ID_LOWERCASE=${DEVOPS_JIRA_TICKET_ID_POSSIBLY_UPPERCASE,,}
echo "DEVOPS_JIRA_TICKET_ID=$(echo ${DEVOPS_JIRA_TICKET_ID_LOWERCASE})" >> $GITHUB_OUTPUT;
else
echo "Branch ${refname} does not contain a JIRA Ticket ID ";
echo "DEVOPS_JIRA_TICKET_ID=N/A" >> $GITHUB_OUTPUT;
fi
fi;
- name: Echo DEVOPS_JIRA_TICKET_ID
id: echo-jira-ticket-id
run: echo "DEVOPS_JIRA_TICKET_ID=${{ steps.set-jira-ticket-id.outputs.DEVOPS_JIRA_TICKET_ID }}"
- name: Determine DEVOPS_BRANCH_ENV_NAME based upon DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME and DEVOPS_IS_FEATURE_BRANCH
id: set-branch-env-name
shell: bash
run: |
#!/bin/bash
# First, check if this is a PR. If so, set the branch name to be the PR number
if [ ${{ github.event_name }} = 'pull_request' ]; then
echo "Setting DEVOPS_BRANCH_ENV_NAME to be equal to the pull request number";
echo "DEVOPS_BRANCH_ENV_NAME=${{ github.event.number }}" >> $GITHUB_OUTPUT;
else
if [ ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }} = true ]; then
if [ ${{ steps.set-jira-ticket-id.outputs.DEVOPS_JIRA_TICKET_ID }} != 'N/A' ]; then
echo "Setting DEVOPS_ENV_NAME to be equal to DEVOPS_JIRA_TICKET_ID";
echo "DEVOPS_BRANCH_ENV_NAME=${{ steps.set-jira-ticket-id.outputs.DEVOPS_JIRA_TICKET_ID }}" >> $GITHUB_OUTPUT;
else
echo "Setting DEVOPS_ENV_NAME to be equal to GITHUB_REF_NAME";
echo "DEVOPS_BRANCH_ENV_NAME=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT;
fi;
else
echo "Setting DEVOPS_ENV_NAME to be equal to DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME";
echo "DEVOPS_BRANCH_ENV_NAME=${{ steps.set-deployment-env-vars.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}" >> $GITHUB_OUTPUT;
fi;
fi;
- name: Echo DEVOPS_BRANCH_ENV_NAME
id: echo-branch-env-name
run: echo "DEVOPS_BRANCH_ENV_NAME=${{ steps.set-branch-env-name.outputs.DEVOPS_BRANCH_ENV_NAME }}"