Skip to content

Running a release task

A release task is a command that must run once before a new version of your app is deployed. It's commonly used for:

  • database schema migrations
  • uploading static assets to S3
  • clearing CDN or internal Redis caches

Defining a release task

To define a release task, add the command to your Procfile under the key, release or in apppack.toml under deploy.release_command. For example, to apply database schema migrations for a Django application, you might add the following:

release: python manage.py migrate --noinput
[deploy]

release_command = "python manage.py migrate --noinput"

Unlike other commands in your Procfile, the release command will not create a new always-running service. It is a special task that only runs once during the deployment process.

Release task pipeline

Build → Test (optional) → Finalize → Release → Deploy

If the release task completes successfully, AppPack will update the web service and any others defined in your Procfile.

If the release task fails, the deployment pipeline will stop and no services will be updated.

A Note on backwards compatibility

The previous version of your app will be running at the same time as your release task runs. To prevent downtime or unexpected errors, your release task should never break compatibility with the currently running version. The best practice for deploying breaking changes is to use a two-phase deployment technique.