by gregsadetsky

GitHub Readme.md


Get a Heroku CI badge for your repo's README file.

example badge



1. Deploy this app to your account


During the setup, you will be asked to fill out two environment variables:


Generate a token using

heroku authorizations:create -s "read" -S -d "heroku-ci-badge"


This should be the UUID of the pipeline to which Heroku CI is attached (9478101b-...) rather than the name of the pipeline (myapp-pipeline).

2. Once the app has been deployed, click the "View" button to see it.

You will be redirected to /last.svg, the URL for the dynamic badge.

3. Insert the badge into your README.md

[![Heroku CI Status](https://{deployed app name}.herokuapp.com/last.svg)](https://dashboard.heroku.com/pipelines/{pipeline ID}/tests)


Change how frequently the build result badge refreshes by setting the CACHE_TIMEOUT environment var (in seconds). The default value is 15 minutes.

heroku config:set CACHE_TIMEOUT="300" -a {deployed app name}

Note that a shorter cache period will result in more calls to the Heroku API, which may lead to elevated errors.

Setting CACHE_TIMEOUT to 0 is strongly discouraged.


If you're seeing...

error badge

... instead of a pass/fail mark, it means that the heroku-ci-badge app could not retrieve the build status.

  • Check that you've set the HEROKU_AUTH_TOKEN environment variable on your app
  • Check that your auth token is valid by running heroku authorizations . Note that token IDs (shown in the list) and the token values are not the same. Do you see the "heroku-ci-badge" token generated previously? If you run heroku authorizations:info {token id} is the Token: {token value} value the same as the one you set as the HEROKU_AUTH_TOKEN environment variable?
  • Check that you've set the PIPELINE_ID environment variable on your app
  • Check that the PIPELINE_ID value is valid by checking the pipeline URL https://dashboard.heroku.com/pipelines/{pipeline ID}
  • Check the app's log outputs for errors: heroku log -a {deployed app name}

If you're seeing...

image not found

... it means that:

  • the image URL might be wrong (check the public URL to your deployed app, and that you're referencing /last.svg)
  • your heroku-ci-badge app might be sleeping if you're using a Free Dyno. See here: "If an app has a Free web dyno, and that dyno receives no web traffic in a 30-minute period, it will sleep". Upgrade the dyno type to hobby (7$/month) to remedy.

Updating the app

Updating the app's code once it's deployed is not as easy as doing the initial deployment (i.e., it's not a single click). Based on the instructions here, here are the steps to update deployed heroku-ci-badge apps:

# instructions for the first update only (see below for further updates)
cd {some directory}
git init
heroku git:remote -a {deployed app name}
git remote add origin https://github.com/gregsadetsky/heroku-ci-badge
git pull origin master
git push heroku master

For further updates:

git pull origin master
git push heroku master


  • Support more than 1 pipeline (use /pipelines/{ID}/x.svg ?)
  • Support master and other branches (use /{branch}.svg and /pipelines/{branch}.svg ?)
  • Dogfood: use Heroku CI & show badge for this app



  • This software is provided as is.
  • This project has no affiliation with Heroku.