How to reference the current branch in GitHub Actions

When building deploy pipelines, referencing the name of the branch that a GitHub Actions workflow is running with can be useful.

I recently gave a talk on how platforms like Netlify build and deploy web applications using changes to GitHub branches. P…


This content originally appeared on DEV Community and was authored by Brian Morrison II

When building deploy pipelines, referencing the name of the branch that a GitHub Actions workflow is running with can be useful.

I recently gave a talk on how platforms like Netlify build and deploy web applications using changes to GitHub branches. Part of the talk was a brief demonstration of how I built branch-based deployments into my SaaS.

The name of the current branch was passed into my deploy process using AWS SAM as a parameter to create resources in AWS unique to the name of the branch.

It’s rather straightforward with a simple bash step.

How to use the branch name in a job

Start by adding a step into the workflow that extracts the name of the branch from the workflow context and sets it on a job parameter:

- name: Extract branch name
  shell: bash
  # 👉 We're extracting the name of the branch and setting it to the
  # 'branch' variable in this step
  run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
  # 👉 The ID of the branch
  id: extract_branch

You can now reference the value throughout the remainder of the job like so:

- name: Build & deploy
  shell: bash
  working-directory: backend/stack
  env:
    GOOS: linux
    GOARCH: amd64
    CGO_ENABLED: 0
    # 👉 Notice how the ID of the previous step is referenced.
    SITE_ALIAS: ${{ steps.extract_branch.outputs.branch }}
  run: make deploy-branch

Here is the YAML for the entire workflow used in this example:

name: Deploy backend (QA)

on:
  workflow_dispatch:
  push:
    branches:
      - qa
    paths:
      - backend/**

env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  AWS_DEFAULT_REGION: 'us-west-1'

jobs:
  deploy-backend:
    environment: ${{ github.ref_name == 'main' && 'production' || github.ref_name }}
    name: Deploy backend
    runs-on: ubuntu-latest
    steps:
      - name: Extract branch name
        shell: bash
        run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
        id: extract_branch
      - name: Checkout
        uses: actions/checkout@v3
      - uses: aws-actions/setup-sam@v2
        with:
          use-installer: true
      - name: Sam version
        run: |
          sam --version
      - name: Write default params.json file
        shell: bash
        working-directory: backend/stack
        run: |
          echo "${{ secrets.PARAMS_JSON_ENCODED }}" >> params.encoded
          base64 -d -i params.encoded >> params.json
          cat params.json
      - name: Transform configs
        shell: bash
        working-directory: scripts/transform-json
        env:
          SITE_ALIAS: ${{ steps.extract_branch.outputs.branch }}
          BUNGIE_API_KEY: ${{ secrets.BUNGIE_API_KEY }}
          CERT_ARN: ${{ secrets.CERT_ARN }}
          DISCORD_FEEDBACK_WEBHOOK: ${{ secrets.DISCORD_FEEDBACK_WEBHOOK }}
          OAUTH_CLIENT_ID: ${{ secrets.OAUTH_CLIENT_ID }}
          OAUTH_CLIENT_SECRET: ${{ secrets.OAUTH_CLIENT_SECRET }}
          STRIPE_ERROR_CB: ${{ secrets.STRIPE_ERROR_CB }}
          STRIPE_KEY: ${{ secrets.STRIPE_KEY }}
          STRIPE_SUCCESS_CB: ${{ secrets.STRIPE_SUCCESS_CB }}
          STRIPE_WEBHOOK_KEY: ${{ secrets.STRIPE_WEBHOOK_KEY }}
        run: |
          go run main.go \
            --mapfile ../../backend/stack/transform_map.json \
            --configfile ../../backend/stack/params.json
          cat ../../backend/stack/params.json
      - name: Build & deploy
        shell: bash
        working-directory: backend/stack
        env:
          GOOS: linux
          GOARCH: amd64
          CGO_ENABLED: 0
          SITE_ALIAS: ${{ steps.extract_branch.outputs.branch }}
        run: make deploy-branch

All of this code is open source as well if you’d rather read it directly on GitHub: https://github.com/GuardianForge/guardianforge.net/blob/main/.github/workflows/deploy-backend-qa.yaml

🤗 If you are interested in more content like this and want to support me, consider joining my newsletter!


This content originally appeared on DEV Community and was authored by Brian Morrison II


Print Share Comment Cite Upload Translate Updates
APA

Brian Morrison II | Sciencx (2024-08-06T02:01:02+00:00) How to reference the current branch in GitHub Actions. Retrieved from https://www.scien.cx/2024/08/06/how-to-reference-the-current-branch-in-github-actions/

MLA
" » How to reference the current branch in GitHub Actions." Brian Morrison II | Sciencx - Tuesday August 6, 2024, https://www.scien.cx/2024/08/06/how-to-reference-the-current-branch-in-github-actions/
HARVARD
Brian Morrison II | Sciencx Tuesday August 6, 2024 » How to reference the current branch in GitHub Actions., viewed ,<https://www.scien.cx/2024/08/06/how-to-reference-the-current-branch-in-github-actions/>
VANCOUVER
Brian Morrison II | Sciencx - » How to reference the current branch in GitHub Actions. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/08/06/how-to-reference-the-current-branch-in-github-actions/
CHICAGO
" » How to reference the current branch in GitHub Actions." Brian Morrison II | Sciencx - Accessed . https://www.scien.cx/2024/08/06/how-to-reference-the-current-branch-in-github-actions/
IEEE
" » How to reference the current branch in GitHub Actions." Brian Morrison II | Sciencx [Online]. Available: https://www.scien.cx/2024/08/06/how-to-reference-the-current-branch-in-github-actions/. [Accessed: ]
rf:citation
» How to reference the current branch in GitHub Actions | Brian Morrison II | Sciencx | https://www.scien.cx/2024/08/06/how-to-reference-the-current-branch-in-github-actions/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.