Skip to content

Commit 437945d

Browse files
v1.2.0 (#3)
* Update to support better error logging and running all jobs in parellel despite failure * Update for directions when a case has failed * Fix: add repo checkout to cfn-lint * Update to allow ignoring cfn-clint checks * fix: update ignore checks argument pass thru * fix: rm hardcoded -i * Add devops-vars workflow action * Update devops-vars outputs * Update devops-vars workflow to emit all outputs * Consolidate action jobs * Update github action job names and ids * Update to allow input flag * Update github vars * Update vars * Update to make the extracted JIRA ticket ID be lowercase
1 parent 75bc1ad commit 437945d

File tree

2 files changed

+180
-3
lines changed

2 files changed

+180
-3
lines changed

.github/workflows/devops-vars.yml

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
on:
2+
workflow_call:
3+
inputs:
4+
DEPLOY_FEATURE_BRANCHES:
5+
description: "A true/false (boolean) flag that can be used to enable the deployment of feature branches (if set to true)."
6+
type: boolean
7+
default: false
8+
outputs:
9+
DEVOPS_BRANCH_ENV_NAME:
10+
description: "A value to append to CloudFormation stack names and AWS resource names for the purpose of unique names."
11+
value: ${{ jobs.define-outputs.outputs.DEVOPS_BRANCH_ENV_NAME }}
12+
DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME:
13+
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."
14+
value: ${{ jobs.define-outputs.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}
15+
DEVOPS_DEPLOY_FEATURE_BRANCHES:
16+
description: "A true/false (string) flag that can be used to enable the deployment of feature branches (if set to true)."
17+
value: ${{ jobs.define-outputs.outputs.DEVOPS_DEPLOY_FEATURE_BRANCHES }}
18+
DEVOPS_IS_ENV_DEV:
19+
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'DEV' deployment environment."
20+
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEV }}
21+
DEVOPS_IS_ENV_UAT:
22+
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'UAT' deployment environment."
23+
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_UAT }}
24+
DEVOPS_IS_ENV_DEMO:
25+
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'DEMO' deployment environment."
26+
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_DEMO }}
27+
DEVOPS_IS_ENV_PROD:
28+
description: "A true/false (string) flag that indicates whether the current GitHub branch will target the 'PROD' deployment environment."
29+
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_ENV_PROD }}
30+
DEVOPS_IS_FEATURE_BRANCH:
31+
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'."
32+
value: ${{ jobs.define-outputs.outputs.DEVOPS_IS_FEATURE_BRANCH }}
33+
DEVOPS_JIRA_TICKET_ID:
34+
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."
35+
value: ${{ jobs.define-outputs.outputs.DEVOPS_JIRA_TICKET_ID }}
36+
37+
38+
jobs:
39+
define-outputs:
40+
runs-on: ubuntu-latest
41+
outputs:
42+
DEVOPS_BRANCH_ENV_NAME: ${{ steps.set-branch-env-name.outputs.DEVOPS_BRANCH_ENV_NAME }}
43+
DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}
44+
DEVOPS_DEPLOY_FEATURE_BRANCHES: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_DEPLOY_FEATURE_BRANCHES }}
45+
DEVOPS_IS_ENV_DEV: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEV }}
46+
DEVOPS_IS_ENV_UAT: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_UAT }}
47+
DEVOPS_IS_ENV_DEMO: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEMO }}
48+
DEVOPS_IS_ENV_PROD: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_PROD }}
49+
DEVOPS_IS_FEATURE_BRANCH: ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }}
50+
DEVOPS_JIRA_TICKET_ID: ${{ steps.set-jira-ticket-id.outputs.DEVOPS_JIRA_TICKET_ID }}
51+
steps:
52+
- name: Echo Version
53+
run: |
54+
echo 'devops-vars v1.2.0'
55+
56+
- name: Determine value of DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME
57+
id: set-deployment-env-vars
58+
env:
59+
GITHUB_BRANCH_NAME: ${{ github.ref_name }}
60+
BRANCH_NAME_DEV: ${{ vars.DEVOPS_BRANCH_NAME_DEV }}
61+
BRANCH_NAME_UAT: ${{ vars.DEVOPS_BRANCH_NAME_UAT }}
62+
BRANCH_NAME_DEMO: ${{ vars.DEVOPS_BRANCH_NAME_DEMO }}
63+
BRANCH_NAME_PROD: ${{ vars.DEVOPS_BRANCH_NAME_PROD }}
64+
shell: bash
65+
run: |
66+
#!/bin/bash
67+
refname=$GITHUB_BRANCH_NAME
68+
echo "Branch Ref is ${GITHUB_BRANCH_NAME}"
69+
70+
# Set the variable that was passed into this workflows
71+
echo "DEVOPS_DEPLOY_FEATURE_BRANCHES=${{ inputs.DEPLOY_FEATURE_BRANCHES }}" >> $GITHUB_OUTPUT;
72+
73+
# These are the special branch names that indicate the environment we are deploying to.
74+
reDev=${BRANCH_NAME_DEV}
75+
echo "Branch Name Dev = ${BRANCH_NAME_DEV}"
76+
reUat=${BRANCH_NAME_UAT}
77+
echo "Branch Name UAT = ${BRANCH_NAME_UAT}"
78+
reDemo=${BRANCH_NAME_DEMO}
79+
echo "Branch Name Demo = ${BRANCH_NAME_DEMO}"
80+
reProd=${BRANCH_NAME_PROD}
81+
echo "Branch Name Prod = ${BRANCH_NAME_PROD}"
82+
83+
echo "Setting Feature and Env Branch Flags to be false by default"
84+
echo "DEVOPS_IS_FEATURE_BRANCH=false" >> $GITHUB_OUTPUT;
85+
echo "DEVOPS_IS_ENV_DEV=false" >> $GITHUB_OUTPUT;
86+
echo "DEVOPS_IS_ENV_UAT=false" >> $GITHUB_OUTPUT;
87+
echo "DEVOPS_IS_ENV_DEMO=false" >> $GITHUB_OUTPUT;
88+
echo "DEVOPS_IS_ENV_PROD=false" >> $GITHUB_OUTPUT;
89+
90+
# Logic for Checking Deployment Env
91+
echo "Checking if branch name indicates a deployment to one of the four environments (dev, uat, demo, or prod)"
92+
if [[ $refname =~ $reProd ]]; then
93+
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to ${{ vars.DEVOPS_ENV_NAME_PROD }}";
94+
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_PROD }}" >> $GITHUB_OUTPUT;
95+
echo "DEVOPS_IS_ENV_PROD=true" >> $GITHUB_OUTPUT;
96+
elif [[ $refname =~ $reUat ]]; then
97+
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_UAT }}";
98+
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_UAT }}" >> $GITHUB_OUTPUT;
99+
echo "DEVOPS_IS_ENV_UAT=true" >> $GITHUB_OUTPUT;
100+
elif [[ $refname =~ $reDemo ]]; then
101+
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_DEMO }}";
102+
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_DEMO }}" >> $GITHUB_OUTPUT;
103+
echo "DEVOPS_IS_ENV_DEMO=true" >> $GITHUB_OUTPUT;
104+
elif [[ $refname =~ $reDev ]]; then
105+
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_DEV }}";
106+
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_DEV }}" >> $GITHUB_OUTPUT;
107+
echo "DEVOPS_IS_ENV_DEV=true" >> $GITHUB_OUTPUT;
108+
else
109+
# In case none of the above occurs
110+
echo "Setting DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME to be ${{ vars.DEVOPS_ENV_NAME_DEV }}";
111+
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ vars.DEVOPS_ENV_NAME_DEV }}" >> $GITHUB_OUTPUT;
112+
echo "Setting DEVOPS_IS_FEATURE_BRANCH to 'true' becuase this is not one of the four named environment branches.";
113+
echo "DEVOPS_IS_FEATURE_BRANCH=true" >> $GITHUB_OUTPUT;
114+
echo "DEVOPS_IS_ENV_DEV=true" >> $GITHUB_OUTPUT;
115+
fi;
116+
117+
- name: Echo Deployment Environment Vars
118+
id: echo-deployment-env-vars
119+
run: |
120+
echo "DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME=${{ steps.set-deployment-env-vars.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}"
121+
echo "DEVOPS_IS_FEATURE_BRANCH=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }}"
122+
echo "DEVOPS_IS_ENV_DEV=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEV }}"
123+
echo "DEVOPS_IS_ENV_UAT=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_UAT }}"
124+
echo "DEVOPS_IS_ENV_DEMO=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_DEMO }}"
125+
echo "DEVOPS_IS_ENV_PROD=${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_ENV_PROD }}"
126+
127+
- name: Determine value of DEVOPS_JIRA_TICKET_ID
128+
id: set-jira-ticket-id
129+
env:
130+
GITHUB_BRANCH_NAME: ${{ github.ref_name }}
131+
shell: bash
132+
run: |
133+
#!/bin/bash
134+
# Set to "N/A" if not a feature branch
135+
if [ ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }} = 'false' ]; then
136+
echo "DEVOPS_JIRA_TICKET_ID=N/A" >> $GITHUB_OUTPUT;
137+
else
138+
refname=$GITHUB_BRANCH_NAME
139+
re="[A-Z]+-[0-9]+"
140+
141+
echo "Checking if branch name contains a JIRA issue (format MID-1234, AN-1 or similar)"
142+
if [[ $refname =~ $re ]]; then
143+
echo "JIRA Ticket ID found within ${refname}";
144+
DEVOPS_JIRA_TICKET_ID_POSSIBLY_UPPERCASE=${BASH_REMATCH[0]}
145+
DEVOPS_JIRA_TICKET_ID_LOWERCASE=${DEVOPS_JIRA_TICKET_ID_POSSIBLY_UPPERCASE,,}
146+
echo "DEVOPS_JIRA_TICKET_ID=$(echo ${DEVOPS_JIRA_TICKET_ID_LOWERCASE})" >> $GITHUB_OUTPUT;
147+
else
148+
echo "Malformed Branch Name: ${refname} does not contain a JIRA Ticket ID and is not a known env specific branch.";
149+
exit 1;
150+
fi
151+
fi;
152+
153+
- name: Echo DEVOPS_JIRA_TICKET_ID
154+
id: echo-jira-ticket-id
155+
run: echo "DEVOPS_JIRA_TICKET_ID=${{ steps.set-jira-ticket-id.outputs.DEVOPS_JIRA_TICKET_ID }}"
156+
157+
- name: Determine DEVOPS_BRANCH_ENV_NAME based upon DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME and DEVOPS_IS_FEATURE_BRANCH
158+
id: set-branch-env-name
159+
shell: bash
160+
run: |
161+
#!/bin/bash
162+
if [ ${{ steps.set-deployment-env-vars.outputs.DEVOPS_IS_FEATURE_BRANCH }} = true ]; then
163+
echo "Setting DEVOPS_ENV_NAME to be equal to DEVOPS_JIRA_TICKET_ID";
164+
echo "DEVOPS_BRANCH_ENV_NAME=${{ steps.set-jira-ticket-id.outputs.DEVOPS_JIRA_TICKET_ID }}" >> $GITHUB_OUTPUT;
165+
else
166+
echo "Setting DEVOPS_ENV_NAME to be equal to DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME";
167+
echo "DEVOPS_BRANCH_ENV_NAME=${{ steps.set-deployment-env-vars.outputs.DEVOPS_CURRENT_DEPLOYMENT_ENV_NAME }}" >> $GITHUB_OUTPUT;
168+
fi;
169+
170+
- name: Echo DEVOPS_BRANCH_ENV_NAME
171+
id: echo-branch-env-name
172+
run: echo "DEVOPS_BRANCH_ENV_NAME=${{ steps.set-branch-env-name.outputs.DEVOPS_BRANCH_ENV_NAME }}"

.github/workflows/lint-cfn.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ on:
1010
required: false
1111
type: string
1212
default: ""
13+
cfn-lint-additional-command:
14+
description: "(Optional) Used to pass a space delimited set of rules to ignore. cfn-lint will only check rules whose ID do not match or prefix these values. For ex: `-i W3002`"
15+
required: false
16+
type: string
17+
default: ""
1318
secrets:
1419
env-github-token:
1520
description: "A valid GitHub token to be used by the action."
@@ -22,7 +27,7 @@ jobs:
2227
steps:
2328
- name: Echo Version
2429
run: |
25-
echo 'lint-cfn v1.1.0'
30+
echo 'lint-cfn v1.2.0'
2631
2732
- name: Checkout
2833
uses: actions/checkout@v3
@@ -52,7 +57,7 @@ jobs:
5257
steps:
5358
- name: Echo Version
5459
run: |
55-
echo 'lint-cfn v1.1.0'
60+
echo 'lint-cfn v1.2.0'
5661
5762
- name: Checkout
5863
uses: actions/checkout@v3
@@ -64,7 +69,7 @@ jobs:
6469
run: |
6570
cfn-lint --version
6671
echo 'Running CFN Linter on ${{ inputs.cfn-template-file-1 }} ${{ inputs.cfn-template-file-2 }}'
67-
cfn-lint -t ${{ inputs.cfn-template-file-1 }} ${{ inputs.cfn-template-file-2 }}
72+
cfn-lint -t ${{ inputs.cfn-template-file-1 }} ${{ inputs.cfn-template-file-2 }} ${{ inputs.cfn-lint-additional-command }}
6873
6974
- name: Advice for Addressing Action Failure - CloudFormation Linting
7075
if: failure()

0 commit comments

Comments
 (0)