Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Heroku deployment step

Deploy your code to Heroku. This step requires that you deploy to a Heroku deploy target. By default this will create a new ssh-key for each deploy, see Using wercker SSH key pair.


These dependencies are required for this step. Make sure they are installed, and available in $PATH before running this step:

  • git
  • mktemp

The following dependencies are only required when using temporary keys (see: Using wercker SSH key pair):

  • curl
  • ssh-keygen

What's new

  • Remove some changing of directories.
  • Mark source_dir as deprecated. In a future version this will be replaced with cwd, currently they however are not compatible.


  • key (required) API key used to create a new SSH key. Alternatively you can use the global environment variable $HEROKU_KEY.
  • user (required) User used to create a new SSH key. Alternatively you can use the global environment variable $HEROKU_USER.
  • app-name (required) The name of the app that you are deploying. Alternatively you can use $HEROKU_APP_NAME.
  • key-name (optional) Specify the name of the key that should be used for this deployment. If left empty, a temporary key will be created for the deployment.
  • retry (optional) When a deploy to Heroku fails, a new deploy is automatically performed after 5 seconds. If you want to disable this behavior, set retry to false.
  • run (optional) Run a command on heroku after the code is deployed succesfully. This option can be used to migrate the database for example.
  • install-toolbelt (optional). If set to 'true', the toolbelt will be installed. Note: specifying a run command will also install the toolbelt.
  • keep-repository (optional) This will allow a user to keep the original history of the repository, speeding up deployment. Important: changes made during the build will not be deployed. Also keep in mind that deploying an already up to date repo will not result in an application restart. Use the run parameter to forcibly reload to achieve this. This feature is considered beta, expect issues. If you find one, please contact us.


        - heroku-deploy:
            key-name: MY_DEPLOY_KEY

Using wercker SSH key pair

To push to Heroku we need to have an ssh key. We can dynamically generate a key, add the key to your repository and then remove it, during each build. But this results in an e-mail from Heroku on each deploy.

To prevent this you can generate a private/public key pair on wercker and manually add the public key to Heroku.

  • Generate a new key in wercker in the Key management section (application - settings).
  • Copy the public key and add it on Heroku to the SSH Keys section section (account).
  • In wercker edit the Heroku deploy target to which you would like to deploy, and add an environment variable:
    • Give the environment variable a name (remember this name, you will need it in the last step).
    • Select SSH Key pair as the type and select the key pair which you created earlier.
  • In the heroku-deploy step in your wercker.yml add the key-name property with the value you used earlier:
        - heroku-deploy:
            key-name: MY_DEPLOY_KEY

In the above example the MY_DEPLOY_KEY should match the environment variable name you used in wercker. Note: you should not prefix it with a dollar sign or post fix it with _PRIVATE or _PUBLIC.

Special thanks

  • wernerb for fixing submodule support and allowing the repository to be reused.


The MIT License (MIT)



  • Fix sending randomly generating SSH keys to Heroku


  • Refactor


  • fixed: ssh: connect to host port 22: Connection timed out


  • Remove some changing of directories
  • Mark source_dir as deprecated. In a future version this will be replaced with cwd, currently they however are not compatible.


  • Check if API key is still valid.
  • Check if app exists on Heroku.
  • Suppress output of curl.


  • fix: allow step to be run multiple times in a single deploy


  • add install_toolbelt option


  • Major refactor:
  • Only install toolbelt if needed (currently only required for running a command).
  • Fix security issue, where the host key was ignored.
  • now uses functions.


  • Add keep-repository parameter.


  • Fix pushing submodules to heroku by flattening submodules if found.


  • Make sure git-core is installed when heroku toolbelt.


  • Fix bugs related to the run parameter.


  • Update README, to clearify using a SSH Key pair.


  • Fixed release that also works on ruby based boxes (always installs ruby 1.9.1)


  • fix for apt-get bug: deb files are now included [broken]


  • Bug fixes


  • Adds run option.


  • Retry on failure.


  • Only call heroku keys:remove if a ephemeral key was used (wercker/step-heroku-deploy#2).
  • Update README.


  • Fix wrong option check.


  • Added validation to key-name option.


  • Added key-name option.


  • Initial release.
You can’t perform that action at this time.