Skip to content

feat: add reviewapps:create and reviewapps:wait commands#3816

Open
chap wants to merge 4 commits into
mainfrom
chap/reviewapps-create-wait
Open

feat: add reviewapps:create and reviewapps:wait commands#3816
chap wants to merge 4 commits into
mainfrom
chap/reviewapps-create-wait

Conversation

@chap

@chap chap commented Jul 20, 2026

Copy link
Copy Markdown

Summary

Adds Review Apps create and wait commands.

  • heroku reviewapps:create -p <pipeline> -b <branch> [--wait] — creates a review app for a pipeline branch. The backend resolves the connected repo and source blob (the CLI sends a resolve source URL), so no client-side repo/archive resolution happens. Mirrors addons:create async handling: --wait/--wait-interval poll to completion with a spinner and desktop notification, otherwise it prints how to follow along in the background.
  • heroku reviewapps:wait [app] — polls provisioning status to completion, surfacing errored review apps. Like addons:wait.

Help Text

$ heroku reviewapps:create --help
create a review app from a pipeline's connected repository

USAGE
  $ heroku reviewapps:create -b <value> -p <value> [--prompt] [--wait] [--wait-interval <value>]

FLAGS
  -b, --branch=<value>         (required) the branch to create the review app from
  -p, --pipeline=<value>       (required) name of pipeline
      --wait                   watch review app creation status and exit when complete
      --wait-interval=<value>  how frequently to poll in seconds (to use with --wait)

GLOBAL FLAGS
  --prompt  interactively prompt for command arguments and flags

DESCRIPTION
  create a review app from a pipeline's connected repository

EXAMPLES
   $ heroku reviewapps:create -p my-pipeline -b my-branch --wait 
$ heroku reviewapps:wait --help  
wait for a review app to be created

USAGE
  $ heroku reviewapps:wait APP [--prompt] [--wait-interval <value>]

ARGUMENTS
  APP  unique identifier or name of the app

FLAGS
  --wait-interval=<value>  how frequently to poll in seconds

GLOBAL FLAGS
  --prompt  interactively prompt for command arguments and flags

DESCRIPTION
  wait for a review app to be created

EXAMPLES
   $ heroku reviewapps:create -p my-pipeline -b my-branch --wait 

Type of Change

Breaking Changes (major semver update)

  • Add a ! after your change type to denote a change that breaks current behavior

Feature Additions (minor semver update)

  • feat: Introduces a new feature to the codebase

Patch Updates (patch semver update)

  • fix: Bug fix
  • deps: Dependency upgrade
  • revert: Revert a previous commit
  • chore: Change that does not affect production code
  • refactor: Refactoring existing code without changing behavior
  • test: Add/update/remove tests

Testing

Notes:
The create call uses the flat POST /review-apps endpoint (pipeline in the body) with a resolve source blob URL; the backend resolves the actual source.

Steps:

  1. Passing CI suffices.
  2. Manual: heroku reviewapps:create -p <pipeline> -b <branch> --wait provisions a review app and exits when complete; without --wait it returns immediately and prints the reviewapps:wait follow-up command.

Screenshots (if applicable)

Related Issues

https://gus.lightning.force.com/lightning/r/ADM_Work__c/a07EE00002fHK5HYAW/view

@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:33 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:33 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:33 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:33 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:47 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:47 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:47 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 14:47 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 21:05 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 21:05 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 21:05 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 20, 2026 21:05 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 21, 2026 21:53 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 21, 2026 21:53 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 21, 2026 21:53 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 21, 2026 21:53 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 12:59 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 12:59 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 12:59 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 12:59 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:36 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:36 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:36 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:36 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:55 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 13:55 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 15:55 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 15:55 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 15:55 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 15:58 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 15:58 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 15:58 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 15:58 — with GitHub Actions Inactive
Adds Review Apps `create` and `wait` commands.

- `heroku reviewapps:create -p <pipeline> -b <branch> [--wait]` creates a
  review app for a pipeline branch. The backend resolves the connected repo
  and source blob (the CLI sends a `resolve` source URL), so no client-side
  repo/archive resolution happens. The branch is validated against the
  pipeline's connected repository before creating (404 -> "Branch not found").
  Mirrors `addons:create` async handling: `--wait`/`--wait-interval` poll to
  completion with a spinner and desktop notification, otherwise it prints how
  to follow along in the background.
- `heroku reviewapps:wait <app> [--wait-interval]` polls provisioning status
  to completion, surfacing errored review apps. Only in-progress statuses
  (pending/creating/deleting) are polled; terminal statuses return
  immediately. Notifications fire only when at least one poll interval elapsed.
@chap
chap force-pushed the chap/reviewapps-create-wait branch from ab721a8 to ff070bb Compare July 22, 2026 16:23
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 16:23 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 16:23 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 16:23 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 16:23 — with GitHub Actions Inactive
@chap
chap marked this pull request as ready for review July 22, 2026 16:23
@chap
chap requested a review from a team as a code owner July 22, 2026 16:23
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 18:07 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 18:07 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 18:07 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 22, 2026 18:07 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:04 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:09 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:09 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:09 — with GitHub Actions Inactive
@chap
chap temporarily deployed to AcceptanceTests July 23, 2026 14:09 — with GitHub Actions Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant