|
| 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 }}" |
0 commit comments