GitHub Actions - Deploy to Heroku
Here’s how to deploy to Heroku using GitHub Actions. Without adding any new dependencies.
First, you need a Heroku auth token. You can generate one on your machine using the following:
heroku authorizations:create
Copy the Token value and add it as a secret to your repository (Go to your repository Settings -> Secrets. Name it HEROKU_API_TOKEN)
Next, add this to your workflow.
{% raw %}
- name: Deploy to Heroku
  env:
    HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }}
    HEROKU_APP_NAME: "your-app-name-here"
  if: github.ref == 'refs/heads/master' && job.status == 'success'
  run: git push https://heroku:$HEROKU_API_TOKEN@git.heroku.com/$HEROKU_APP_NAME.git origin/master:master
{% endraw %}
This will only run for builds on the Master branch and if previous steps have worked properly.
Here’s a full example for a Rails app. This runs your tests, and if successful, deploys to Heroku.
Important: notice how the actions/checkout step uses fetch-depth: 0. This checks out all commits in your repo, which is important when you need to push it to Heroku.
{% raw %}
name: Ruby Test and Deploy
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: 2.6.5
    - uses: actions/cache@v1
      with:
        path: vendor/bundle
        key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
        restore-keys: |
          ${{ runner.os }}-gem-
    - name: Install Bundler
      run: |
        gem install bundler
    - name: Install Gems
      run: bundle install --path vendor/bundle --jobs 4 --retry 3
    - name: Run Tests
      run: |
        bundle exec rake test
    - name: Deploy to Heroku
      env:
        HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }}
        HEROKU_APP_NAME: "your-app-name-here"
      if: github.ref == 'refs/heads/master' && job.status == 'success'
      run: git push https://heroku:$HEROKU_API_TOKEN@git.heroku.com/$HEROKU_APP_NAME.git origin/master:master
{% endraw %}