Skip to main content
vertracloud/github-action is the official GitHub Action that uploads your repository to an existing Vertra Cloud application and restarts it. It wraps the same CLI binary used locally (vertra deploy), pinned to a release and verified by SHA-256, and runs on Linux and macOS runners (x64 and ARM64).
The Action updates an existing application — it does not create one. Create the application first, either in the dashboard or with POST /v1/apps, then point the workflow at its ID.

Prerequisites

  • A Vertra Cloud application already created (any plan).
  • The application’s ID, shown in the dashboard or via GET /v1/apps/:id.
  • A GitHub repository you can add secrets and workflows to.

1. Create an API key with the minimum scopes

Deploying uploads files and, by default, restarts the application afterward. In Dashboard → Settings → API Keys, create a key with:
  • apps:files — required, covers the file upload.
  • apps:write — required unless you set restart: false in the workflow (see variations below); covers the restart.
See Scopes for the full catalog if the application also needs other automation (environment variables, network) from the same key.

2. Save the key and app ID as secrets

In the repository, go to Settings → Secrets and variables → Actions and add: Never write the key directly in the workflow file — the Action also masks it in the logs, but the source of truth should always be a secret.

3. Add the workflow

Save this as .github/workflows/deploy.yml:
.github/workflows/deploy.yml
Push to main and follow the run under the repository’s Actions tab. Files are merged: the upload overwrites matching paths, but files that only exist in the application (not in the repository) are left alone — deploying does not delete them.

Inputs

The Action has no outputs: the step succeeds when the deploy succeeds and fails otherwise.

Variations

Update an existing app only on push to main

This is the default behavior of the workflow above — on.push.branches: [main] is what limits runs to that branch. Pushes to any other branch don’t trigger the job, since GitHub Actions only runs jobs that match the event filter.

Monorepo — deploy a subfolder

Point path at the application’s directory inside the repository; only that directory is uploaded, so you don’t have to package the whole repo:
Add a .vertraignore file inside that directory for extra exclusion patterns — node_modules, .git, .github, .vscode, .venv, venv, vendor, target, .next and __pycache__ are already ignored by default.

Upload without restarting

Set restart: false to only sync files — useful when you want to trigger the restart separately (for example, from another step or on a schedule). With this set, the API key only needs the apps:files scope:

Deploy after your tests

Add the deploy step at the end of an existing job, after your test/build steps, so files are only sent when everything before it passed:

Alternative: the deploy webhook

Instead of running the CLI from a workflow, you can enable automatic deploy from GitHub directly on the application: Vertra Cloud registers a webhook on the repository itself and redeploys on every push to main/master, with no workflow file or secret needed. Use the Action instead when you want the deploy to run only after CI passes, need to deploy a subfolder, or want the upload to skip the restart.

Troubleshooting

See the full error code catalog for anything not listed here.