Arthur Denner
Arthur Denner

Arthur Denner

Update Heroku environment variable after GitHub release

Update Heroku environment variable after GitHub release

Subscribe to my newsletter and never miss my upcoming articles

Context

If we are using GitHub releases as part of our release workflow, we can use GitHub Actions to accomplish many tasks, such as notifying services about the new release.

This is very helpful as we can use a single step on our workflow to keep all integrated services in sync.

In this tutorial, we'll update an environment variable on Heroku. A real-world scenario for this is an API built with Node.js that has an endpoint for its current version running or uses the version on error monitoring clients like Sentry's.

Services

Heroku

Heroku is a container-based cloud Platform as a Service (PaaS) that supports several programming languages. It enables simple application development and deployment and it's very beginner-friendly.

GitHub Actions

GitHub Actions enables automation of our software workflows. It's possible to run workflows with many triggers and perform many tasks from them.

There are thousands of actions available on the marketplace and built by the community that enables us to lint, format, test, build, deploy our projects... The use cases are endless.

Setup

Heroku

In order to communicate with Heroku, we need an auth token. Generate one by running heroku authorizations:create on the Heroku CLI or through the dashboard.

Secrets

We need to setup 2 GitHub secrets on our repo. Go to Settings > Secrets and create the following:

  • HEROKU_API_KEY: Heroku auth token created before;
  • HEROKU_APP_NAME: Name of the project created on Heroku.

Workflow

With all the setup finished, create a YAML file under .github/workflows, e.g. create-releases.yml with the following content:

name: Create releases
on:
  release:
    types: [published]
jobs:
  update-heroku-env-variable:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@master
      - name: Trim tag name
        run: echo '::set-env name=API_VERSION::${{ github.ref }}'
      - name: Update API_VERSION on Heroku
        run: heroku config:set API_VERSION=${API_VERSION##*/} -a ${{ secrets.HEROKU_APP_NAME }}
        env:
          HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}

And that's it! Now, every time we publish a new release on GitHub, the API_VERSION environment variable on Heroku will be updated accordingly.

Note: The "Trim tag name" step will modify the tag name from refs/tags/x.x.x to only x.x.x.

Check out an example repo here. Check out the Actions tab to see details of the workflow.

Notes

The example above only updates the environment variable when our GitHub release is published. However, it's possible to run workflows on other events of a release - see GitHub's documentation.

It's possible to run other Heroku commands through the workflow. Check out their CLI documentation for more commands or check out this post for details on an entire deployment workflow.


I hope you enjoyed this post and follow me on any platform for more.

 
Share this