heroku 11.3.0-beta.0 → 11.3.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -1
- package/bin/bats-test-runner.js +3 -3
- package/bin/run.js +1 -1
- package/dist/commands/access/add.js +1 -1
- package/dist/commands/access/index.js +1 -1
- package/dist/commands/access/update.js +2 -2
- package/dist/commands/addons/create.js +1 -1
- package/dist/commands/addons/destroy.js +3 -3
- package/dist/commands/addons/docs.js +1 -1
- package/dist/commands/addons/index.js +4 -4
- package/dist/commands/addons/info.js +1 -1
- package/dist/commands/addons/plans.d.ts +5 -5
- package/dist/commands/addons/plans.js +13 -11
- package/dist/commands/addons/wait.js +1 -1
- package/dist/commands/apps/create.js +1 -1
- package/dist/commands/apps/destroy.js +9 -7
- package/dist/commands/apps/diff.js +14 -14
- package/dist/commands/apps/errors.js +8 -8
- package/dist/commands/apps/info.js +3 -3
- package/dist/commands/apps/transfer.js +2 -2
- package/dist/commands/authorizations/info.d.ts +3 -3
- package/dist/commands/authorizations/info.js +4 -4
- package/dist/commands/authorizations/rotate.d.ts +1 -1
- package/dist/commands/authorizations/rotate.js +2 -2
- package/dist/commands/authorizations/update.d.ts +4 -4
- package/dist/commands/authorizations/update.js +6 -6
- package/dist/commands/autocomplete/create.d.ts +17 -17
- package/dist/commands/autocomplete/create.js +108 -107
- package/dist/commands/autocomplete/doctor.d.ts +2 -2
- package/dist/commands/autocomplete/doctor.js +10 -9
- package/dist/commands/autocomplete/index.js +1 -1
- package/dist/commands/autocomplete/options.d.ts +7 -7
- package/dist/commands/autocomplete/options.js +99 -99
- package/dist/commands/autocomplete/script.d.ts +3 -3
- package/dist/commands/autocomplete/script.js +6 -6
- package/dist/commands/buildpacks/add.d.ts +4 -4
- package/dist/commands/buildpacks/add.js +8 -8
- package/dist/commands/buildpacks/index.js +4 -7
- package/dist/commands/buildpacks/info.d.ts +1 -1
- package/dist/commands/buildpacks/info.js +8 -8
- package/dist/commands/buildpacks/search.d.ts +5 -5
- package/dist/commands/buildpacks/search.js +8 -8
- package/dist/commands/buildpacks/set.d.ts +4 -4
- package/dist/commands/buildpacks/set.js +8 -8
- package/dist/commands/buildpacks/versions.d.ts +1 -1
- package/dist/commands/buildpacks/versions.js +14 -12
- package/dist/commands/certs/add.d.ts +1 -1
- package/dist/commands/certs/add.js +7 -7
- package/dist/commands/certs/auto/disable.js +1 -1
- package/dist/commands/certs/auto/index.js +9 -7
- package/dist/commands/certs/generate.d.ts +13 -13
- package/dist/commands/certs/generate.js +57 -55
- package/dist/commands/certs/index.js +1 -1
- package/dist/commands/certs/info.js +1 -1
- package/dist/commands/certs/remove.js +1 -1
- package/dist/commands/certs/update.js +3 -3
- package/dist/commands/ci/config/index.js +4 -4
- package/dist/commands/ci/debug.d.ts +1 -1
- package/dist/commands/ci/debug.js +15 -15
- package/dist/commands/ci/open.js +1 -1
- package/dist/commands/clients/info.js +2 -2
- package/dist/commands/clients/rotate.js +1 -1
- package/dist/commands/config/get.js +2 -2
- package/dist/commands/config/index.js +2 -2
- package/dist/commands/console.d.ts +2 -2
- package/dist/commands/console.js +6 -7
- package/dist/commands/container/login.d.ts +4 -4
- package/dist/commands/container/login.js +26 -27
- package/dist/commands/container/logout.d.ts +3 -3
- package/dist/commands/container/logout.js +11 -12
- package/dist/commands/container/pull.d.ts +1 -1
- package/dist/commands/container/pull.js +3 -4
- package/dist/commands/container/push.d.ts +1 -1
- package/dist/commands/container/push.js +8 -12
- package/dist/commands/container/release.js +2 -3
- package/dist/commands/container/run.d.ts +1 -1
- package/dist/commands/container/run.js +3 -4
- package/dist/commands/dashboard.js +8 -10
- package/dist/commands/data/maintenances/history.d.ts +1 -1
- package/dist/commands/data/maintenances/history.js +5 -3
- package/dist/commands/data/maintenances/index.d.ts +1 -1
- package/dist/commands/data/maintenances/index.js +2 -2
- package/dist/commands/data/maintenances/info.d.ts +1 -1
- package/dist/commands/data/maintenances/info.js +4 -4
- package/dist/commands/data/maintenances/run.d.ts +1 -1
- package/dist/commands/data/maintenances/run.js +1 -1
- package/dist/commands/data/maintenances/schedule.d.ts +1 -1
- package/dist/commands/data/maintenances/schedule.js +2 -2
- package/dist/commands/data/maintenances/wait.d.ts +1 -1
- package/dist/commands/data/maintenances/wait.js +2 -2
- package/dist/commands/data/maintenances/window/index.d.ts +1 -1
- package/dist/commands/data/maintenances/window/index.js +2 -2
- package/dist/commands/data/maintenances/window/update.d.ts +1 -1
- package/dist/commands/data/maintenances/window/update.js +2 -2
- package/dist/commands/data/pg/attachments/create.d.ts +9 -1
- package/dist/commands/data/pg/attachments/create.js +135 -41
- package/dist/commands/data/pg/attachments/destroy.d.ts +1 -1
- package/dist/commands/data/pg/attachments/destroy.js +2 -2
- package/dist/commands/data/pg/attachments/index.d.ts +1 -1
- package/dist/commands/data/pg/attachments/index.js +8 -7
- package/dist/commands/data/pg/create.d.ts +1 -1
- package/dist/commands/data/pg/create.js +26 -30
- package/dist/commands/data/pg/credentials/create.d.ts +1 -1
- package/dist/commands/data/pg/credentials/create.js +1 -1
- package/dist/commands/data/pg/credentials/destroy.d.ts +1 -1
- package/dist/commands/data/pg/credentials/destroy.js +4 -8
- package/dist/commands/data/pg/credentials/index.d.ts +1 -1
- package/dist/commands/data/pg/credentials/index.js +14 -10
- package/dist/commands/data/pg/credentials/rotate.d.ts +1 -1
- package/dist/commands/data/pg/credentials/rotate.js +17 -12
- package/dist/commands/data/pg/credentials/url.d.ts +1 -1
- package/dist/commands/data/pg/credentials/url.js +3 -3
- package/dist/commands/data/pg/destroy.d.ts +1 -1
- package/dist/commands/data/pg/destroy.js +3 -3
- package/dist/commands/data/pg/docs.d.ts +1 -1
- package/dist/commands/data/pg/docs.js +2 -2
- package/dist/commands/data/pg/fork.d.ts +1 -1
- package/dist/commands/data/pg/fork.js +4 -4
- package/dist/commands/data/pg/info.d.ts +1 -1
- package/dist/commands/data/pg/info.js +14 -18
- package/dist/commands/data/pg/levels.d.ts +1 -1
- package/dist/commands/data/pg/levels.js +1 -1
- package/dist/commands/data/pg/psql.d.ts +0 -1
- package/dist/commands/data/pg/psql.js +4 -19
- package/dist/commands/data/pg/quotas/index.d.ts +1 -1
- package/dist/commands/data/pg/quotas/index.js +5 -5
- package/dist/commands/data/pg/quotas/update.d.ts +1 -1
- package/dist/commands/data/pg/quotas/update.js +3 -3
- package/dist/commands/data/pg/settings.d.ts +1 -1
- package/dist/commands/data/pg/settings.js +1 -1
- package/dist/commands/data/pg/update.d.ts +1 -1
- package/dist/commands/data/pg/update.js +53 -59
- package/dist/commands/data/pg/upgrade/run.d.ts +1 -1
- package/dist/commands/data/pg/upgrade/run.js +1 -1
- package/dist/commands/data/pg/wait.d.ts +1 -1
- package/dist/commands/data/pg/wait.js +1 -1
- package/dist/commands/domains/add.js +2 -2
- package/dist/commands/domains/index.js +4 -4
- package/dist/commands/domains/wait.d.ts +3 -3
- package/dist/commands/domains/wait.js +3 -3
- package/dist/commands/drains/index.js +2 -2
- package/dist/commands/features/index.d.ts +1 -1
- package/dist/commands/features/index.js +2 -2
- package/dist/commands/features/info.js +1 -1
- package/dist/commands/git/clone.js +4 -2
- package/dist/commands/git/credentials.d.ts +2 -2
- package/dist/commands/git/credentials.js +9 -8
- package/dist/commands/git/remote.js +4 -7
- package/dist/commands/keys/add.js +1 -1
- package/dist/commands/keys/index.js +2 -1
- package/dist/commands/labs/disable.js +6 -8
- package/dist/commands/labs/index.js +1 -1
- package/dist/commands/labs/info.js +1 -1
- package/dist/commands/local/index.js +1 -1
- package/dist/commands/mcp/start.d.ts +0 -1
- package/dist/commands/mcp/start.js +1 -1
- package/dist/commands/members/add.d.ts +4 -4
- package/dist/commands/members/add.js +13 -11
- package/dist/commands/members/remove.js +1 -6
- package/dist/commands/members/set.d.ts +2 -2
- package/dist/commands/members/set.js +6 -6
- package/dist/commands/orgs/index.d.ts +2 -2
- package/dist/commands/orgs/index.js +2 -2
- package/dist/commands/pg/backups/cancel.d.ts +4 -4
- package/dist/commands/pg/backups/cancel.js +6 -6
- package/dist/commands/pg/backups/capture.js +1 -1
- package/dist/commands/pg/backups/delete.js +2 -2
- package/dist/commands/pg/backups/info.js +1 -1
- package/dist/commands/pg/backups/restore.js +4 -4
- package/dist/commands/pg/backups/unschedule.js +1 -1
- package/dist/commands/pg/bloat.d.ts +2 -2
- package/dist/commands/pg/bloat.js +4 -4
- package/dist/commands/pg/blocking.d.ts +2 -2
- package/dist/commands/pg/blocking.js +4 -4
- package/dist/commands/pg/connection-pooling/attach.js +1 -1
- package/dist/commands/pg/copy.js +3 -3
- package/dist/commands/pg/credentials/destroy.js +2 -2
- package/dist/commands/pg/credentials/repair-default.js +2 -2
- package/dist/commands/pg/credentials/rotate.js +1 -1
- package/dist/commands/pg/credentials/url.js +2 -2
- package/dist/commands/pg/credentials.js +3 -8
- package/dist/commands/pg/diagnose.d.ts +6 -6
- package/dist/commands/pg/diagnose.js +21 -21
- package/dist/commands/pg/info.d.ts +5 -5
- package/dist/commands/pg/info.js +37 -40
- package/dist/commands/pg/kill.d.ts +6 -6
- package/dist/commands/pg/kill.js +11 -9
- package/dist/commands/pg/killall.d.ts +4 -4
- package/dist/commands/pg/killall.js +6 -6
- package/dist/commands/pg/links/create.js +2 -2
- package/dist/commands/pg/links/destroy.js +2 -2
- package/dist/commands/pg/links/index.js +8 -6
- package/dist/commands/pg/locks.d.ts +6 -6
- package/dist/commands/pg/locks.js +7 -7
- package/dist/commands/pg/outliers.d.ts +8 -8
- package/dist/commands/pg/outliers.js +39 -42
- package/dist/commands/pg/promote.d.ts +5 -5
- package/dist/commands/pg/promote.js +24 -31
- package/dist/commands/pg/ps.d.ts +4 -4
- package/dist/commands/pg/ps.js +7 -7
- package/dist/commands/pg/psql.d.ts +6 -6
- package/dist/commands/pg/psql.js +8 -8
- package/dist/commands/pg/pull.js +5 -5
- package/dist/commands/pg/push.js +3 -3
- package/dist/commands/pg/reset.js +2 -2
- package/dist/commands/pg/settings/auto-explain/log-analyze.d.ts +4 -4
- package/dist/commands/pg/settings/auto-explain/log-analyze.js +6 -6
- package/dist/commands/pg/settings/auto-explain/log-buffers.d.ts +2 -2
- package/dist/commands/pg/settings/auto-explain/log-buffers.js +6 -6
- package/dist/commands/pg/settings/auto-explain/log-format.d.ts +2 -2
- package/dist/commands/pg/settings/auto-explain/log-format.js +8 -8
- package/dist/commands/pg/settings/auto-explain/log-min-duration.d.ts +2 -2
- package/dist/commands/pg/settings/auto-explain/log-min-duration.js +6 -6
- package/dist/commands/pg/settings/auto-explain/log-nested-statements.d.ts +2 -2
- package/dist/commands/pg/settings/auto-explain/log-nested-statements.js +1 -1
- package/dist/commands/pg/settings/auto-explain/log-triggers.d.ts +4 -4
- package/dist/commands/pg/settings/auto-explain/log-triggers.js +6 -6
- package/dist/commands/pg/settings/auto-explain/log-verbose.d.ts +7 -7
- package/dist/commands/pg/settings/auto-explain/log-verbose.js +8 -8
- package/dist/commands/pg/settings/auto-explain.d.ts +6 -6
- package/dist/commands/pg/settings/auto-explain.js +5 -5
- package/dist/commands/pg/settings/data-connector-details-logs.d.ts +5 -5
- package/dist/commands/pg/settings/data-connector-details-logs.js +4 -4
- package/dist/commands/pg/settings/index.d.ts +4 -4
- package/dist/commands/pg/settings/index.js +9 -9
- package/dist/commands/pg/settings/log-connections.d.ts +6 -6
- package/dist/commands/pg/settings/log-connections.js +5 -5
- package/dist/commands/pg/settings/log-lock-waits.d.ts +3 -3
- package/dist/commands/pg/settings/log-lock-waits.js +5 -5
- package/dist/commands/pg/settings/log-min-duration-statement.d.ts +2 -2
- package/dist/commands/pg/settings/log-min-duration-statement.js +4 -4
- package/dist/commands/pg/settings/log-min-error-statement.d.ts +2 -2
- package/dist/commands/pg/settings/log-min-error-statement.js +4 -4
- package/dist/commands/pg/settings/log-statement.d.ts +2 -2
- package/dist/commands/pg/settings/log-statement.js +4 -4
- package/dist/commands/pg/settings/track-functions.d.ts +2 -2
- package/dist/commands/pg/settings/track-functions.js +4 -4
- package/dist/commands/pg/unfollow.d.ts +5 -5
- package/dist/commands/pg/unfollow.js +9 -9
- package/dist/commands/pg/upgrade/cancel.js +2 -2
- package/dist/commands/pg/upgrade/dryrun.js +2 -2
- package/dist/commands/pg/upgrade/prepare.js +3 -3
- package/dist/commands/pg/upgrade/run.js +3 -3
- package/dist/commands/pg/upgrade/wait.js +1 -1
- package/dist/commands/pg/vacuum-stats.d.ts +4 -4
- package/dist/commands/pg/vacuum-stats.js +6 -6
- package/dist/commands/pg/wait.d.ts +6 -6
- package/dist/commands/pg/wait.js +9 -9
- package/dist/commands/pipelines/diff.js +2 -2
- package/dist/commands/pipelines/info.js +1 -1
- package/dist/commands/pipelines/promote.js +4 -4
- package/dist/commands/pipelines/setup.js +2 -2
- package/dist/commands/pipelines/transfer.js +1 -1
- package/dist/commands/ps/copy.js +1 -1
- package/dist/commands/ps/exec.js +4 -6
- package/dist/commands/ps/forward.js +1 -1
- package/dist/commands/ps/index.js +10 -9
- package/dist/commands/ps/scale.js +4 -4
- package/dist/commands/ps/type.js +6 -6
- package/dist/commands/redis/cli.d.ts +3 -6
- package/dist/commands/redis/cli.js +22 -22
- package/dist/commands/redis/maxmemory.js +1 -1
- package/dist/commands/redis/stats-reset.js +1 -1
- package/dist/commands/redis/upgrade.js +1 -1
- package/dist/commands/regions.js +1 -1
- package/dist/commands/releases/index.js +6 -12
- package/dist/commands/releases/info.js +8 -8
- package/dist/commands/releases/output.d.ts +5 -5
- package/dist/commands/releases/output.js +6 -6
- package/dist/commands/reviewapps/disable.js +1 -0
- package/dist/commands/reviewapps/enable.js +1 -0
- package/dist/commands/run/inside.d.ts +1 -1
- package/dist/commands/run/inside.js +5 -5
- package/dist/commands/spaces/create.js +12 -3
- package/dist/commands/spaces/destroy.js +1 -1
- package/dist/commands/spaces/hosts.d.ts +6 -6
- package/dist/commands/spaces/hosts.js +8 -8
- package/dist/commands/spaces/peerings/destroy.js +2 -2
- package/dist/commands/spaces/peerings/index.d.ts +5 -5
- package/dist/commands/spaces/peerings/index.js +7 -7
- package/dist/commands/spaces/ps.js +8 -7
- package/dist/commands/spaces/topology.js +7 -7
- package/dist/commands/spaces/trusted-ips/index.d.ts +6 -6
- package/dist/commands/spaces/trusted-ips/index.js +8 -8
- package/dist/commands/spaces/vpn/config.js +1 -1
- package/dist/commands/spaces/vpn/connections.js +1 -1
- package/dist/commands/spaces/vpn/destroy.js +1 -1
- package/dist/commands/spaces/vpn/info.js +3 -3
- package/dist/commands/spaces/vpn/update.js +1 -1
- package/dist/commands/status.js +8 -8
- package/dist/commands/teams/index.js +1 -1
- package/dist/commands/telemetry/add.js +1 -3
- package/dist/commands/telemetry/remove.d.ts +3 -3
- package/dist/commands/telemetry/remove.js +11 -11
- package/dist/commands/usage/addons.js +3 -3
- package/dist/commands/webhooks/deliveries/index.d.ts +1 -1
- package/dist/commands/webhooks/deliveries/index.js +3 -1
- package/dist/commands/webhooks/deliveries/info.d.ts +4 -4
- package/dist/commands/webhooks/deliveries/info.js +8 -6
- package/dist/commands/webhooks/events/info.js +1 -1
- package/dist/commands/webhooks/info.d.ts +4 -4
- package/dist/commands/webhooks/info.js +8 -8
- package/dist/hooks/command_not_found/setup-otel-telemetry.js +2 -2
- package/dist/hooks/finally/send-otel-and-sentry-errors.js +1 -1
- package/dist/hooks/init/setup-otel-telemetry.js +2 -2
- package/dist/hooks/postrun/send-otel-telemetry.js +2 -2
- package/dist/hooks/prerun/collect-and-send-herokulytics.js +8 -6
- package/dist/hooks/preupdate/check-npm-auth.js +0 -1
- package/dist/hooks/update/brew.js +2 -2
- package/dist/hooks/update/tidy.js +1 -1
- package/dist/lib/accounts/accounts.d.ts +7 -7
- package/dist/lib/accounts/accounts.js +43 -41
- package/dist/lib/addons/addons-wait.d.ts +78 -0
- package/dist/lib/addons/{create_addon.d.ts → create-addon.d.ts} +1 -1
- package/dist/lib/addons/{create_addon.js → create-addon.js} +2 -2
- package/dist/lib/addons/destroy-addon.d.ts +3 -0
- package/dist/lib/addons/{destroy_addon.js → destroy-addon.js} +10 -14
- package/dist/lib/addons/resolve.d.ts +1 -1
- package/dist/lib/addons/resolve.js +2 -1
- package/dist/lib/addons/util.d.ts +3 -3
- package/dist/lib/addons/util.js +9 -9
- package/dist/lib/analytics-telemetry/backboard-herokulytics-client.js +1 -1
- package/dist/lib/analytics-telemetry/backboard-otel-client.js +1 -1
- package/dist/lib/analytics-telemetry/sentry-client.js +1 -1
- package/dist/lib/analytics-telemetry/telemetry-worker.js +2 -2
- package/dist/lib/analytics-telemetry/worker-client.js +8 -9
- package/dist/lib/api.d.ts +2 -2
- package/dist/lib/apps/app-transfer.js +7 -6
- package/dist/lib/apps/generation.d.ts +5 -5
- package/dist/lib/authorizations/authorizations.js +3 -2
- package/dist/lib/autocomplete/base.js +1 -1
- package/dist/lib/autocomplete/cache.js +1 -1
- package/dist/lib/autocomplete/completions.d.ts +1 -1
- package/dist/lib/autocomplete/completions.js +6 -6
- package/dist/lib/buildpacks/buildpacks.js +2 -2
- package/dist/lib/certs/{certificate_details.d.ts → certificate-details.d.ts} +1 -1
- package/dist/lib/certs/{certificate_details.js → certificate-details.js} +1 -1
- package/dist/lib/certs/display-table.d.ts +2 -0
- package/dist/lib/certs/{display_table.js → display-table.js} +6 -4
- package/dist/lib/certs/flags.d.ts +2 -2
- package/dist/lib/certs/flags.js +5 -4
- package/dist/lib/certs/format-date.d.ts +1 -0
- package/dist/lib/certs/{format_date.js → format-date.js} +1 -1
- package/dist/lib/certs/{get_cert_and_key.d.ts → get-cert-and-key.d.ts} +0 -1
- package/dist/lib/changelog-parser.d.ts +1 -1
- package/dist/lib/changelog-parser.js +4 -4
- package/dist/lib/ci/git.d.ts +9 -1
- package/dist/lib/ci/git.js +18 -4
- package/dist/lib/ci/interfaces/kolkrabbi.d.ts +75 -75
- package/dist/lib/ci/source.d.ts +0 -1
- package/dist/lib/ci/source.js +1 -1
- package/dist/lib/ci/test-run.js +16 -15
- package/dist/lib/ci/validate.d.ts +1 -1
- package/dist/lib/clients/clients.js +2 -3
- package/dist/lib/config/quote.js +5 -5
- package/dist/lib/config/util.js +1 -1
- package/dist/lib/container/{docker_helper.js → docker-helper.js} +7 -12
- package/dist/lib/data/{baseCommand.d.ts → base-command.d.ts} +1 -1
- package/dist/lib/data/{baseCommand.js → base-command.js} +2 -2
- package/dist/lib/data/credential-utils.d.ts +5 -0
- package/dist/lib/data/credential-utils.js +20 -0
- package/dist/lib/data/{displayQuota.js → display-quota.js} +3 -3
- package/dist/lib/data/parse-attachment-factors.d.ts +28 -0
- package/dist/lib/data/parse-attachment-factors.js +40 -0
- package/dist/lib/data/{poolConfig.js → pool-config.js} +16 -17
- package/dist/lib/data/types.d.ts +35 -29
- package/dist/lib/data/types.js +15 -1
- package/dist/lib/data/utils.js +2 -3
- package/dist/lib/data-scrubber/presets.js +2 -2
- package/dist/lib/data-scrubber/scrubber.d.ts +4 -4
- package/dist/lib/data-scrubber/scrubber.js +47 -47
- package/dist/lib/data-scrubber/types.d.ts +14 -14
- package/dist/lib/git/git.d.ts +9 -9
- package/dist/lib/git/git.js +51 -51
- package/dist/lib/local/env-file-validator.js +1 -1
- package/dist/lib/local/fork-foreman.js +4 -4
- package/dist/lib/local/load-foreman-procfile.js +6 -8
- package/dist/lib/local/run-foreman.cjs +58 -53
- package/dist/lib/notify.d.ts +1 -1
- package/dist/lib/notify.js +6 -8
- package/dist/lib/npm-auth.d.ts +0 -3
- package/dist/lib/npm-auth.js +1 -2
- package/dist/lib/pg/backups.js +17 -24
- package/dist/lib/pg/download.js +2 -2
- package/dist/lib/pg/psql.d.ts +1 -3
- package/dist/lib/pg/psql.js +5 -5
- package/dist/lib/pg/{push_pull.d.ts → push-pull.d.ts} +1 -3
- package/dist/lib/pg/setter.d.ts +6 -6
- package/dist/lib/pg/setter.js +16 -15
- package/dist/lib/pg/types.d.ts +81 -81
- package/dist/lib/pipelines/github-api.d.ts +2 -2
- package/dist/lib/pipelines/github-api.js +4 -4
- package/dist/lib/pipelines/kolkrabbi-api.d.ts +8 -8
- package/dist/lib/pipelines/kolkrabbi-api.js +33 -33
- package/dist/lib/pipelines/setup/get-name-and-repo.js +2 -2
- package/dist/lib/pipelines/setup/get-settings.d.ts +2 -2
- package/dist/lib/pipelines/setup/get-settings.js +4 -4
- package/dist/lib/pipelines/setup/validate.js +1 -1
- package/dist/lib/ps-exec/exec.js +4 -7
- package/dist/lib/ps-exec/ssh.d.ts +0 -2
- package/dist/lib/ps-exec/ssh.js +9 -9
- package/dist/lib/redis/api.d.ts +2 -2
- package/dist/lib/redis/api.js +2 -1
- package/dist/lib/releases/releases.js +2 -2
- package/dist/lib/releases/{status_helper.d.ts → status-helper.d.ts} +2 -2
- package/dist/lib/repl.d.ts +8 -10
- package/dist/lib/repl.js +16 -15
- package/dist/lib/run/colorize.js +30 -29
- package/dist/lib/run/dyno.d.ts +4 -8
- package/dist/lib/run/dyno.js +16 -19
- package/dist/lib/run/helpers.js +3 -3
- package/dist/lib/run/log-displayer.js +3 -1
- package/dist/lib/spaces/format.js +19 -17
- package/dist/lib/spaces/hosts.d.ts +3 -3
- package/dist/lib/spaces/hosts.js +3 -1
- package/dist/lib/spaces/peering.js +5 -1
- package/dist/lib/spaces/vpn-connections.js +4 -2
- package/dist/lib/telemetry/util.js +2 -2
- package/dist/lib/types/completion.d.ts +3 -4
- package/dist/lib/types/domain.d.ts +1 -1
- package/dist/lib/types/notifications.d.ts +7 -7
- package/dist/lib/utils/{tableUtils.js → table-utils.js} +5 -5
- package/dist/lib/webhooks/base.d.ts +1 -1
- package/dist/lib/webhooks/base.js +2 -2
- package/dist/nls-data.d.ts +2 -2
- package/dist/nls-data.js +2 -2
- package/dist/nls.d.ts +1 -1
- package/dist/nls.js +1 -1
- package/npm-shrinkwrap.json +5763 -5923
- package/oclif.manifest.json +1362 -1375
- package/package.json +20 -25
- package/dist/lib/addons/addons_wait.d.ts +0 -78
- package/dist/lib/addons/destroy_addon.d.ts +0 -3
- package/dist/lib/certs/display_table.d.ts +0 -2
- package/dist/lib/certs/format_date.d.ts +0 -1
- package/dist/lib/data/credentialUtils.d.ts +0 -3
- package/dist/lib/data/credentialUtils.js +0 -23
- package/dist/lib/addons/{addons_wait.js → addons-wait.js} +0 -0
- package/dist/lib/apps/{error_info.d.ts → error-info.d.ts} +1 -1
- package/dist/lib/apps/{error_info.js → error-info.js} +36 -36
- package/dist/lib/certs/{get_cert_and_key.js → get-cert-and-key.js} +0 -0
- package/dist/lib/{confirmCommand.d.ts → confirm-command.d.ts} +0 -0
- package/dist/lib/{confirmCommand.js → confirm-command.js} +0 -0
- package/dist/lib/container/{docker_helper.d.ts → docker-helper.d.ts} +0 -0
- package/dist/lib/data/{createPool.d.ts → create-pool.d.ts} +0 -0
- package/dist/lib/data/{createPool.js → create-pool.js} +0 -0
- package/dist/lib/data/{displayQuota.d.ts → display-quota.d.ts} +0 -0
- package/dist/lib/data/{parseProvisionOpts.d.ts → parse-provision-opts.d.ts} +0 -0
- package/dist/lib/data/{parseProvisionOpts.js → parse-provision-opts.js} +0 -0
- package/dist/lib/data/{poolConfig.d.ts → pool-config.d.ts} +0 -0
- package/dist/lib/pg/{push_pull.js → push-pull.js} +0 -0
- package/dist/lib/releases/{status_helper.js → status-helper.js} +8 -8
- package/dist/lib/{teamUtils.d.ts → team-utils.d.ts} +0 -0
- package/dist/lib/{teamUtils.js → team-utils.js} +0 -0
- package/dist/lib/types/{app_errors.d.ts → app-errors.d.ts} +2 -2
- /package/dist/lib/types/{app_errors.js → app-errors.js} +0 -0
- /package/dist/lib/types/{app_process_tier.d.ts → app-process-tier.d.ts} +0 -0
- /package/dist/lib/types/{app_process_tier.js → app-process-tier.js} +0 -0
- /package/dist/lib/utils/{keyValueParser.d.ts → key-value-parser.d.ts} +0 -0
- /package/dist/lib/utils/{keyValueParser.js → key-value-parser.js} +0 -0
- /package/dist/lib/utils/{tableUtils.d.ts → table-utils.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,7 +4,39 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
## [11.3.
|
|
7
|
+
## [11.3.1-beta.0](https://github.com/heroku/cli/compare/v11.3.0...v11.3.1-beta.0) (2026-05-13)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* multi-factor attachment support for Advanced dbs (W-21632630) ([#3655](https://github.com/heroku/cli/issues/3655)) ([87785e8](https://github.com/heroku/cli/commit/87785e809fae29cc23a9c29b44b3a6f285961861))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* align ps:type with customer-facing private/shield dyno names ([#3705](https://github.com/heroku/cli/issues/3705)) ([0b36a1f](https://github.com/heroku/cli/commit/0b36a1f3c0c5ab21b3a3887787f290f62135957f))
|
|
18
|
+
* prevent unhandled promise rejection in apps:destroy ([#3679](https://github.com/heroku/cli/issues/3679)) ([3e4c838](https://github.com/heroku/cli/commit/3e4c838ec28276ed3b3e01dd76d5f6cb78c58f19)), closes [#3677](https://github.com/heroku/cli/issues/3677) [#3677](https://github.com/heroku/cli/issues/3677) [#3677](https://github.com/heroku/cli/issues/3677)
|
|
19
|
+
* updates @heroku-cli/command to address 2FA token prompting bug ([#3690](https://github.com/heroku/cli/issues/3690)) ([eda4459](https://github.com/heroku/cli/commit/eda4459fb8b98442d0650c1612d215c74eb2250b))
|
|
20
|
+
* validate HEROKU_HOST for container registry commands ([#3704](https://github.com/heroku/cli/issues/3704)) ([04df827](https://github.com/heroku/cli/commit/04df8275f933c2f055a384d7deaccd524bfa5220))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Documentation
|
|
24
|
+
|
|
25
|
+
* add AGENTS.md with CLI design patterns for AI agents ([#3676](https://github.com/heroku/cli/issues/3676)) ([d547ed5](https://github.com/heroku/cli/commit/d547ed5fe25e49180c41fba51b761815af6d5b3f))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Code Refactoring
|
|
29
|
+
|
|
30
|
+
* apply lint fixes to lib files ([#3668](https://github.com/heroku/cli/issues/3668)) ([eb9b040](https://github.com/heroku/cli/commit/eb9b04021ac902c196a0c216f442c7ce756179bc))
|
|
31
|
+
* apply lint formatting to auth through features commands ([#3665](https://github.com/heroku/cli/issues/3665)) ([7e84cbf](https://github.com/heroku/cli/commit/7e84cbf2706f8edcbc0566255b71b22be64b5c32))
|
|
32
|
+
* apply lint formatting to git through pg commands ([#3666](https://github.com/heroku/cli/issues/3666)) ([fd4c8c0](https://github.com/heroku/cli/commit/fd4c8c0eb178b76479e6ded1e8e99bc14b633af5))
|
|
33
|
+
* apply lint formatting to remaining commands ([#3667](https://github.com/heroku/cli/issues/3667)) ([b3f11bd](https://github.com/heroku/cli/commit/b3f11bd34e8256da3b6a1198ec4845d5e03253c9))
|
|
34
|
+
* apply lint formatting to scripts and hooks folders ([#3669](https://github.com/heroku/cli/issues/3669)) ([8a56a67](https://github.com/heroku/cli/commit/8a56a67f96e6e81603d76955ea78dbc2e1ed4433))
|
|
35
|
+
* apply linting fixes to test helpers, fixtures, and integration tests ([#3671](https://github.com/heroku/cli/issues/3671)) ([6b96cb9](https://github.com/heroku/cli/commit/6b96cb9ed43604db8b21ff4d191dee9fed4dddb8))
|
|
36
|
+
* migrate from qqjs to execa with custom wrapper ([#3678](https://github.com/heroku/cli/issues/3678)) ([ad81615](https://github.com/heroku/cli/commit/ad81615b2d4e6bd470be5ef10b3d35f94d8bed40))
|
|
37
|
+
* migrate to shared eslint config and testing functions ([#3661](https://github.com/heroku/cli/issues/3661)) ([d5ad9ac](https://github.com/heroku/cli/commit/d5ad9acf0f22028475c47fb1e189022cf0374989))
|
|
38
|
+
|
|
39
|
+
## [11.3.0](https://github.com/heroku/cli/compare/v11.2.0...v11.3.0) (2026-04-15)
|
|
8
40
|
|
|
9
41
|
|
|
10
42
|
### Features
|
|
@@ -21,6 +53,12 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
21
53
|
|
|
22
54
|
* remove @oclif/plugin-legacy dependency ([#3659](https://github.com/heroku/cli/issues/3659)) ([2523d48](https://github.com/heroku/cli/commit/2523d481a79f0d26ab8b6897c6b49d3e5713a218))
|
|
23
55
|
|
|
56
|
+
|
|
57
|
+
### Code Refactoring
|
|
58
|
+
|
|
59
|
+
* apply lint formatting to access, accounts, addons, and apps commands ([#3664](https://github.com/heroku/cli/issues/3664)) ([5568483](https://github.com/heroku/cli/commit/5568483130be2eb90bae4096b89c164dcd1d8742))
|
|
60
|
+
* rename lib and script files to kebab-case ([#3663](https://github.com/heroku/cli/issues/3663)) ([c6a101f](https://github.com/heroku/cli/commit/c6a101f4295425ccd362d315f8d2733d88bc6278))
|
|
61
|
+
|
|
24
62
|
## [11.2.0](https://github.com/heroku/cli/compare/v11.1.1...v11.2.0) (2026-04-08)
|
|
25
63
|
|
|
26
64
|
|
package/bin/bats-test-runner.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import {spawn} from 'node:child_process'
|
|
4
|
+
import os from 'node:os'
|
|
5
5
|
|
|
6
6
|
if (os.platform() === 'win32' || os.platform() === 'windows') console.log('skipping on windows')
|
|
7
|
-
else spawn('npx bats test/acceptance/*.bats', {stdio: 'inherit'
|
|
7
|
+
else spawn('npx bats test/acceptance/*.bats', {shell: true, stdio: 'inherit'})
|
package/bin/run.js
CHANGED
|
@@ -12,7 +12,7 @@ process.env.HEROKU_UPDATE_INSTRUCTIONS = process.env.HEROKU_UPDATE_INSTRUCTIONS
|
|
|
12
12
|
const now = new Date()
|
|
13
13
|
const cliStartTime = now.getTime()
|
|
14
14
|
|
|
15
|
-
const {
|
|
15
|
+
const {getTelemetryDisabledReason, isTelemetryEnabled, telemetryDebug} = await import('../dist/lib/analytics-telemetry/telemetry-utils.js')
|
|
16
16
|
const enableTelemetry = isTelemetryEnabled()
|
|
17
17
|
|
|
18
18
|
if (enableTelemetry) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
2
|
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
|
-
import { getOwner, isTeamApp } from '../../lib/
|
|
4
|
+
import { getOwner, isTeamApp } from '../../lib/team-utils.js';
|
|
5
5
|
export default class AccessAdd extends Command {
|
|
6
6
|
static args = {
|
|
7
7
|
email: Args.string({ description: 'email address of the team member', required: true }),
|
|
@@ -3,7 +3,7 @@ import { HerokuAPIError } from '@heroku-cli/command/lib/api-client.js';
|
|
|
3
3
|
import { color, hux } from '@heroku/heroku-cli-util';
|
|
4
4
|
import { ux } from '@oclif/core/ux';
|
|
5
5
|
import { lazyModuleLoader } from '../../lib/lazy-module-loader.js';
|
|
6
|
-
import { getOwner, isTeamApp } from '../../lib/
|
|
6
|
+
import { getOwner, isTeamApp } from '../../lib/team-utils.js';
|
|
7
7
|
export default class AccessIndex extends Command {
|
|
8
8
|
static description = 'list who has access to an app';
|
|
9
9
|
static flags = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
2
|
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
|
-
import { isTeamApp } from '../../lib/
|
|
4
|
+
import { isTeamApp } from '../../lib/team-utils.js';
|
|
5
5
|
export default class Update extends Command {
|
|
6
6
|
static args = {
|
|
7
7
|
email: Args.string({ description: 'email address of the team member', required: true }),
|
|
@@ -25,7 +25,7 @@ export default class Update extends Command {
|
|
|
25
25
|
if (!isTeamApp(appInfo?.owner?.email))
|
|
26
26
|
this.error(`Error: cannot update permissions. The app ${color.app(appName)} is not owned by a team`);
|
|
27
27
|
permissions.push('view');
|
|
28
|
-
permissions =
|
|
28
|
+
permissions = [...new Set(permissions.sort())];
|
|
29
29
|
ux.action.start(`Updating ${color.user(args.email)} in application ${color.app(appName)} with ${permissions} permissions`);
|
|
30
30
|
await this.heroku.patch(`/teams/apps/${appName}/collaborators/${args.email}`, {
|
|
31
31
|
body: { permissions },
|
|
@@ -2,7 +2,7 @@ import { Command, flags } from '@heroku-cli/command';
|
|
|
2
2
|
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import tsheredoc from 'tsheredoc';
|
|
5
|
-
import createAddon from '../../lib/addons/
|
|
5
|
+
import createAddon from '../../lib/addons/create-addon.js';
|
|
6
6
|
import notify from '../../lib/notify.js';
|
|
7
7
|
const heredoc = tsheredoc.default;
|
|
8
8
|
export default class Create extends Command {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { color, utils } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import { color, utils } from '@heroku/heroku-cli-util';
|
|
3
3
|
import { Args } from '@oclif/core';
|
|
4
4
|
import _ from 'lodash';
|
|
5
|
-
import destroyAddon from '../../lib/addons/
|
|
6
|
-
import ConfirmCommand from '../../lib/
|
|
5
|
+
import destroyAddon from '../../lib/addons/destroy-addon.js';
|
|
6
|
+
import ConfirmCommand from '../../lib/confirm-command.js';
|
|
7
7
|
import notify from '../../lib/notify.js';
|
|
8
8
|
export default class Destroy extends Command {
|
|
9
9
|
static args = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as color from '@heroku/heroku-cli-util/color';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import open from 'open';
|
|
5
5
|
import { resolveAddon } from '../../lib/addons/resolve.js';
|
|
@@ -3,7 +3,7 @@ import { color, hux } from '@heroku/heroku-cli-util';
|
|
|
3
3
|
import { ux } from '@oclif/core/ux';
|
|
4
4
|
import _ from 'lodash';
|
|
5
5
|
import { formatPrice, formatState, grandfatheredPrice } from '../../lib/addons/util.js';
|
|
6
|
-
import { huxTableNoWrapOptions } from '../../lib/utils/
|
|
6
|
+
import { huxTableNoWrapOptions } from '../../lib/utils/table-utils.js';
|
|
7
7
|
const topic = 'addons';
|
|
8
8
|
export default class Addons extends Command {
|
|
9
9
|
static description = `Lists your add-ons and attachments.
|
|
@@ -61,6 +61,7 @@ async function addonGetter(api, app) {
|
|
|
61
61
|
},
|
|
62
62
|
});
|
|
63
63
|
const sudoHeaders = JSON.parse(process.env.HEROKU_HEADERS || '{}');
|
|
64
|
+
// eslint-disable-next-line unicorn/prefer-ternary
|
|
64
65
|
if (sudoHeaders['X-Heroku-Sudo'] && !sudoHeaders['X-Heroku-Sudo-User']) {
|
|
65
66
|
// because the root /addon-attachments endpoint won't include relevant
|
|
66
67
|
// attachments when sudo-ing for another app, we will use the more
|
|
@@ -102,15 +103,14 @@ async function addonGetter(api, app) {
|
|
|
102
103
|
// This is probably normal (because we are asking API for all attachments)
|
|
103
104
|
// but it could also be due to certain types of permissions issues, so check
|
|
104
105
|
// if the attachment looks relevant to the app, and then render whatever
|
|
105
|
-
_.values(groupedAttachments)
|
|
106
|
-
.forEach(atts => {
|
|
106
|
+
for (const atts of _.values(groupedAttachments)) {
|
|
107
107
|
const inaccessibleAddon = {
|
|
108
108
|
addon_service: {}, app: atts[0].addon.app, attachments: atts, name: atts[0].addon.name, plan: {},
|
|
109
109
|
};
|
|
110
110
|
if (isRelevantToApp(inaccessibleAddon)) {
|
|
111
111
|
addons.push(inaccessibleAddon);
|
|
112
112
|
}
|
|
113
|
-
}
|
|
113
|
+
}
|
|
114
114
|
return addons;
|
|
115
115
|
}
|
|
116
116
|
function displayAll(addons, noWrap = false) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color, hux } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import { color, hux } from '@heroku/heroku-cli-util';
|
|
3
3
|
import { Args } from '@oclif/core';
|
|
4
4
|
import { resolveAddon } from '../../lib/addons/resolve.js';
|
|
5
5
|
import { formatPrice, formatState, grandfatheredPrice } from '../../lib/addons/util.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
2
|
export default class Plans extends Command {
|
|
3
|
-
static
|
|
3
|
+
static args: {
|
|
4
|
+
service: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
5
|
+
};
|
|
4
6
|
static description: string;
|
|
5
7
|
static flags: {
|
|
6
8
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
9
|
};
|
|
8
|
-
static
|
|
9
|
-
service: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
10
|
-
};
|
|
11
|
-
private printMeteredPricingURL;
|
|
10
|
+
static topic: string;
|
|
12
11
|
run(): Promise<void>;
|
|
12
|
+
private printMeteredPricingURL;
|
|
13
13
|
}
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
-
import { Args } from '@oclif/core';
|
|
3
2
|
import { hux } from '@heroku/heroku-cli-util';
|
|
4
|
-
import {
|
|
3
|
+
import { Args } from '@oclif/core';
|
|
5
4
|
import _ from 'lodash';
|
|
6
5
|
import printf from 'printf';
|
|
6
|
+
import { formatPrice } from '../../lib/addons/util.js';
|
|
7
7
|
export default class Plans extends Command {
|
|
8
|
-
static
|
|
8
|
+
static args = {
|
|
9
|
+
service: Args.string({ description: 'unique identifier or globally unique name of the add-on', required: true }),
|
|
10
|
+
};
|
|
9
11
|
static description = 'list all available plans for an add-on service';
|
|
10
12
|
static flags = {
|
|
11
13
|
json: flags.boolean({ description: 'output in json format' }),
|
|
12
14
|
};
|
|
13
|
-
static
|
|
14
|
-
service: Args.string({ required: true, description: 'unique identifier or globally unique name of the add-on' }),
|
|
15
|
-
};
|
|
16
|
-
printMeteredPricingURL(service) {
|
|
17
|
-
return printf(`https://elements.heroku.com/addons/${service}#pricing`);
|
|
18
|
-
}
|
|
15
|
+
static topic = 'addons';
|
|
19
16
|
async run() {
|
|
20
|
-
const {
|
|
17
|
+
const { args, flags } = await this.parse(Plans);
|
|
21
18
|
const { service } = args;
|
|
22
19
|
let { body: plans } = await this.heroku.get(`/addon-services/${service}/plans`, {
|
|
23
20
|
headers: {
|
|
@@ -29,9 +26,10 @@ export default class Plans extends Command {
|
|
|
29
26
|
hux.styledJSON(plans);
|
|
30
27
|
}
|
|
31
28
|
else {
|
|
29
|
+
/* eslint-disable perfectionist/sort-objects */
|
|
32
30
|
hux.table(plans, {
|
|
33
31
|
default: {
|
|
34
|
-
header: ' ',
|
|
32
|
+
header: ' ', // <- This space is necessary to prevent the table header from rendering as "default"
|
|
35
33
|
get: (plan) => plan.default ? 'default' : '',
|
|
36
34
|
},
|
|
37
35
|
name: {
|
|
@@ -49,6 +47,10 @@ export default class Plans extends Command {
|
|
|
49
47
|
get: (plan) => plan.price.metered ? this.printMeteredPricingURL(service) : formatPrice({ price: plan.price, hourly: false }),
|
|
50
48
|
},
|
|
51
49
|
});
|
|
50
|
+
/* eslint-enable perfectionist/sort-objects */
|
|
52
51
|
}
|
|
53
52
|
}
|
|
53
|
+
printMeteredPricingURL(service) {
|
|
54
|
+
return printf(`https://elements.heroku.com/addons/${service}#pricing`);
|
|
55
|
+
}
|
|
54
56
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
2
|
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
|
-
import { waitForAddonDeprovisioning, waitForAddonProvisioning } from '../../lib/addons/
|
|
4
|
+
import { waitForAddonDeprovisioning, waitForAddonProvisioning } from '../../lib/addons/addons-wait.js';
|
|
5
5
|
import { resolveAddon } from '../../lib/addons/resolve.js';
|
|
6
6
|
import notify from '../../lib/notify.js';
|
|
7
7
|
export default class Wait extends Command {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { color, hux } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
3
2
|
import { BuildpackCompletion, RegionCompletion, SpaceCompletion, StackCompletion, } from '@heroku-cli/command/lib/completions.js';
|
|
3
|
+
import { color, hux } from '@heroku/heroku-cli-util';
|
|
4
4
|
import { Args, ux } from '@oclif/core';
|
|
5
5
|
import fs from 'fs-extra';
|
|
6
6
|
import Git from '../../lib/git/git.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
2
|
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
|
-
import
|
|
5
|
-
import ConfirmCommand from '../../lib/
|
|
4
|
+
import { gitService } from '../../lib/ci/git.js';
|
|
5
|
+
import ConfirmCommand from '../../lib/confirm-command.js';
|
|
6
6
|
export default class Destroy extends Command {
|
|
7
7
|
static args = {
|
|
8
8
|
app: Args.string({ hidden: true }),
|
|
@@ -30,13 +30,15 @@ export default class Destroy extends Command {
|
|
|
30
30
|
* you want, and they can all point to the same url.
|
|
31
31
|
* The only requirement is that the "name" is unique.
|
|
32
32
|
*/
|
|
33
|
-
if (
|
|
33
|
+
if (gitService.inGitRepo()) {
|
|
34
34
|
// delete git remotes pointing to this app
|
|
35
|
-
const remotes = await
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
remotes.get(
|
|
35
|
+
const remotes = await gitService.listRemotes();
|
|
36
|
+
// Deduplicate remote names (same name appears for fetch and push)
|
|
37
|
+
const names = new Set([
|
|
38
|
+
...(remotes.get(gitService.gitUrl(app))?.map(({ name }) => name) ?? []),
|
|
39
|
+
...(remotes.get(gitService.sshGitUrl(app))?.map(({ name }) => name) ?? []),
|
|
39
40
|
]);
|
|
41
|
+
await Promise.all([...names].map(name => gitService.rmRemote(name)));
|
|
40
42
|
}
|
|
41
43
|
ux.action.stop();
|
|
42
44
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
|
-
import { Args, ux } from '@oclif/core';
|
|
3
2
|
import { hux } from '@heroku/heroku-cli-util';
|
|
3
|
+
import { Args, ux } from '@oclif/core';
|
|
4
4
|
function trunc(val) {
|
|
5
5
|
const v = (val ?? '').toString();
|
|
6
6
|
return v.length > 56 ? v.slice(0, 56) + '...' : v;
|
|
@@ -8,8 +8,8 @@ function trunc(val) {
|
|
|
8
8
|
async function checksum(heroku, app) {
|
|
9
9
|
try {
|
|
10
10
|
const { body: releases } = await heroku.request(`/apps/${app}/releases`, {
|
|
11
|
-
partial: true,
|
|
12
11
|
headers: { Range: 'version ..; max=1, order=desc' },
|
|
12
|
+
partial: true,
|
|
13
13
|
});
|
|
14
14
|
if (releases?.[0]?.slug) {
|
|
15
15
|
const slugId = releases[0].slug.id;
|
|
@@ -29,7 +29,7 @@ async function checksum(heroku, app) {
|
|
|
29
29
|
}
|
|
30
30
|
async function diffFiles(heroku, app1, app2) {
|
|
31
31
|
const sums = await Promise.all([checksum(heroku, app1), checksum(heroku, app2)]);
|
|
32
|
-
return sums[0] === sums[1] ? [] : [{
|
|
32
|
+
return sums[0] === sums[1] ? [] : [{ app1: sums[0] ?? undefined, app2: sums[1] ?? undefined, prop: 'slug (checksum)' }];
|
|
33
33
|
}
|
|
34
34
|
async function diffEnv(heroku, app1, app2) {
|
|
35
35
|
const [res1, res2] = await Promise.all([
|
|
@@ -41,7 +41,7 @@ async function diffEnv(heroku, app1, app2) {
|
|
|
41
41
|
const keys = new Set([...Object.keys(vars1), ...Object.keys(vars2)]);
|
|
42
42
|
return [...keys]
|
|
43
43
|
.filter(k => vars1[k] !== vars2[k])
|
|
44
|
-
.map(k => ({
|
|
44
|
+
.map(k => ({ app1: vars1[k], app2: vars2[k], prop: `config (${k})` }));
|
|
45
45
|
}
|
|
46
46
|
async function diffStack(heroku, app1, app2) {
|
|
47
47
|
const [res1, res2] = await Promise.all([
|
|
@@ -50,7 +50,7 @@ async function diffStack(heroku, app1, app2) {
|
|
|
50
50
|
]);
|
|
51
51
|
const a = res1.body?.stack?.name;
|
|
52
52
|
const b = res2.body?.stack?.name;
|
|
53
|
-
return a === b ? [] : [{
|
|
53
|
+
return a === b ? [] : [{ app1: a, app2: b, prop: 'stack' }];
|
|
54
54
|
}
|
|
55
55
|
async function diffBuildpacks(heroku, app1, app2) {
|
|
56
56
|
const [res1, res2] = await Promise.all([
|
|
@@ -63,9 +63,9 @@ async function diffBuildpacks(heroku, app1, app2) {
|
|
|
63
63
|
const urls2 = bps2.map(obj => obj.buildpack?.url ?? '');
|
|
64
64
|
const longest = urls1.length >= urls2.length ? urls1 : urls2;
|
|
65
65
|
const pairs = longest.map((_, k) => ({
|
|
66
|
-
prop: `buildpack (${k})`,
|
|
67
66
|
app1: urls1[k],
|
|
68
67
|
app2: urls2[k],
|
|
68
|
+
prop: `buildpack (${k})`,
|
|
69
69
|
}));
|
|
70
70
|
return pairs.filter(pair => pair.app1 !== pair.app2);
|
|
71
71
|
}
|
|
@@ -78,8 +78,8 @@ async function diffAddons(heroku, app1, app2) {
|
|
|
78
78
|
const addons2 = res2.body ?? [];
|
|
79
79
|
const names1 = new Set(addons1.map(addon => addon.addon_service?.name ?? '').filter(Boolean));
|
|
80
80
|
const names2 = new Set(addons2.map(addon => addon.addon_service?.name ?? '').filter(Boolean));
|
|
81
|
-
const only1 = [...names1].filter(name => !names2.has(name)).map(name => ({
|
|
82
|
-
const only2 = [...names2].filter(name => !names1.has(name)).map(name => ({
|
|
81
|
+
const only1 = [...names1].filter(name => !names2.has(name)).map(name => ({ app1: 'true', app2: 'false', prop: `add-on (${name})` }));
|
|
82
|
+
const only2 = [...names2].filter(name => !names1.has(name)).map(name => ({ app1: 'false', app2: 'true', prop: `add-on (${name})` }));
|
|
83
83
|
return [...only1, ...only2];
|
|
84
84
|
}
|
|
85
85
|
async function diffFeatures(heroku, app1, app2) {
|
|
@@ -91,8 +91,8 @@ async function diffFeatures(heroku, app1, app2) {
|
|
|
91
91
|
const features2 = res2.body ?? [];
|
|
92
92
|
const names1 = new Set(features1.map(f => (f.enabled ? f.name : null)).filter(Boolean));
|
|
93
93
|
const names2 = new Set(features2.map(f => (f.enabled ? f.name : null)).filter(Boolean));
|
|
94
|
-
const only1 = [...names1].filter(name => !names2.has(name)).map(name => ({
|
|
95
|
-
const only2 = [...names2].filter(name => !names1.has(name)).map(name => ({
|
|
94
|
+
const only1 = [...names1].filter(name => !names2.has(name)).map(name => ({ app1: 'enabled', app2: 'disabled', prop: `feature (${name})` }));
|
|
95
|
+
const only2 = [...names2].filter(name => !names1.has(name)).map(name => ({ app1: 'disabled', app2: 'enabled', prop: `feature (${name})` }));
|
|
96
96
|
return [...only1, ...only2];
|
|
97
97
|
}
|
|
98
98
|
export default class AppsDiff extends Command {
|
|
@@ -116,15 +116,15 @@ export default class AppsDiff extends Command {
|
|
|
116
116
|
]);
|
|
117
117
|
const list = [...files, ...env, ...stack, ...bp, ...addons, ...features];
|
|
118
118
|
const truncated = list.map(entry => ({
|
|
119
|
-
prop: entry.prop,
|
|
120
119
|
app1: trunc(entry.app1),
|
|
121
120
|
app2: trunc(entry.app2),
|
|
121
|
+
prop: entry.prop,
|
|
122
122
|
}));
|
|
123
123
|
ux.stdout('\n');
|
|
124
124
|
hux.table(truncated, {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
secondApp: {
|
|
125
|
+
firstApp: { get: (row) => row.app1, header: app1 },
|
|
126
|
+
property: { get: (row) => row.prop, header: 'property' },
|
|
127
|
+
secondApp: { get: (row) => row.app2, header: app2 },
|
|
128
128
|
});
|
|
129
129
|
ux.stdout('\n');
|
|
130
130
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
2
|
import { color, hux } from '@heroku/heroku-cli-util';
|
|
3
3
|
import { ux } from '@oclif/core/ux';
|
|
4
|
-
import errorInfo from '../../lib/apps/
|
|
4
|
+
import errorInfo from '../../lib/apps/error-info.js';
|
|
5
5
|
const colorize = (level, s) => {
|
|
6
6
|
switch (level) {
|
|
7
7
|
case 'critical': {
|
|
8
8
|
return color.failure(s);
|
|
9
9
|
}
|
|
10
|
-
case 'warning': {
|
|
11
|
-
return color.warning(s);
|
|
12
|
-
}
|
|
13
10
|
case 'info': {
|
|
14
11
|
return color.info(s);
|
|
15
12
|
}
|
|
13
|
+
case 'warning': {
|
|
14
|
+
return color.warning(s);
|
|
15
|
+
}
|
|
16
16
|
default: {
|
|
17
17
|
return s;
|
|
18
18
|
}
|
|
@@ -42,9 +42,9 @@ function buildErrorTable(errors, source) {
|
|
|
42
42
|
}
|
|
43
43
|
const sumErrors = (errors) => {
|
|
44
44
|
const summed = {};
|
|
45
|
-
Object.keys(errors.data)
|
|
45
|
+
for (const key of Object.keys(errors.data)) {
|
|
46
46
|
summed[key] = errors.data[key].reduce((a, b) => a + b, 0);
|
|
47
|
-
}
|
|
47
|
+
}
|
|
48
48
|
return summed;
|
|
49
49
|
};
|
|
50
50
|
export default class Errors extends Command {
|
|
@@ -66,9 +66,9 @@ export default class Errors extends Command {
|
|
|
66
66
|
async function getAllDynoErrors(types) {
|
|
67
67
|
const values = await Promise.all(types.map(dynoErrors));
|
|
68
68
|
const memo = {};
|
|
69
|
-
types.
|
|
69
|
+
for (const [index, key] of types.entries()) {
|
|
70
70
|
memo[key] = values[index];
|
|
71
|
-
}
|
|
71
|
+
}
|
|
72
72
|
return memo;
|
|
73
73
|
}
|
|
74
74
|
const routerErrors = () => this.heroku.get(`/apps/${flags.app}/router-metrics/errors?${DATE_QUERY}&process_type=web`, {
|
|
@@ -2,7 +2,7 @@ import { Command, flags } from '@heroku-cli/command';
|
|
|
2
2
|
import { color, hux } from '@heroku/heroku-cli-util';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import { filesize } from 'filesize';
|
|
5
|
-
import
|
|
5
|
+
import { inspect } from 'node:util';
|
|
6
6
|
import { getGeneration } from '../../lib/apps/generation.js';
|
|
7
7
|
import { lazyModuleLoader } from '../../lib/lazy-module-loader.js';
|
|
8
8
|
export default class AppsInfo extends Command {
|
|
@@ -70,7 +70,7 @@ repo_size=5000000
|
|
|
70
70
|
print('slug_size', filesize(info.app.slug_size, { round: 0, standard: 'jedec' }));
|
|
71
71
|
print('owner', info.app.owner.email);
|
|
72
72
|
print('region', info.app.region.name);
|
|
73
|
-
print('dynos',
|
|
73
|
+
print('dynos', inspect(_.countBy(info.dynos, 'type')));
|
|
74
74
|
print('stack', info.app.stack.name);
|
|
75
75
|
}
|
|
76
76
|
if (flags.shell) {
|
|
@@ -157,7 +157,7 @@ function print(info, addons, collaborators, extended, _) {
|
|
|
157
157
|
if (extended) {
|
|
158
158
|
ux.stdout('\n\n--- Extended Information ---\n\n');
|
|
159
159
|
if (info.app.extended) {
|
|
160
|
-
ux.stdout(
|
|
160
|
+
ux.stdout(inspect(info.app.extended));
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
}
|
|
@@ -3,9 +3,9 @@ import * as color from '@heroku/heroku-cli-util/color';
|
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import tsheredoc from 'tsheredoc';
|
|
5
5
|
import { appTransfer } from '../../lib/apps/app-transfer.js';
|
|
6
|
+
import ConfirmCommand from '../../lib/confirm-command.js';
|
|
6
7
|
import { lazyModuleLoader } from '../../lib/lazy-module-loader.js';
|
|
7
|
-
import
|
|
8
|
-
import { getOwner, isTeamApp, isValidEmail } from '../../lib/teamUtils.js';
|
|
8
|
+
import { getOwner, isTeamApp, isValidEmail } from '../../lib/team-utils.js';
|
|
9
9
|
import AppsLock from './lock.js';
|
|
10
10
|
const heredoc = tsheredoc.default;
|
|
11
11
|
export default class AppsTransfer extends Command {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
2
|
export default class AuthorizationsInfo extends Command {
|
|
3
|
+
static args: {
|
|
4
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
5
|
+
};
|
|
3
6
|
static description: string;
|
|
4
7
|
static flags: {
|
|
5
8
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
9
|
};
|
|
7
|
-
static args: {
|
|
8
|
-
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
9
|
-
};
|
|
10
10
|
run(): Promise<void>;
|
|
11
11
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
-
import { Args } from '@oclif/core';
|
|
3
2
|
import { hux } from '@heroku/heroku-cli-util';
|
|
3
|
+
import { Args } from '@oclif/core';
|
|
4
4
|
import { display } from '../../lib/authorizations/authorizations.js';
|
|
5
5
|
export default class AuthorizationsInfo extends Command {
|
|
6
|
+
static args = {
|
|
7
|
+
id: Args.string({ description: 'ID of the authorization', required: true }),
|
|
8
|
+
};
|
|
6
9
|
static description = 'show an existing OAuth authorization';
|
|
7
10
|
static flags = {
|
|
8
11
|
json: flags.boolean({ char: 'j', description: 'output in json format' }),
|
|
9
12
|
};
|
|
10
|
-
static args = {
|
|
11
|
-
id: Args.string({ required: true, description: 'ID of the authorization' }),
|
|
12
|
-
};
|
|
13
13
|
async run() {
|
|
14
14
|
const { args, flags } = await this.parse(AuthorizationsInfo);
|
|
15
15
|
const { body: authentication } = await this.heroku.get(`/oauth/authorizations/${args.id}`);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
2
|
export default class AuthorizationsRotate extends Command {
|
|
3
|
-
static description: string;
|
|
4
3
|
static args: {
|
|
5
4
|
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
5
|
};
|
|
6
|
+
static description: string;
|
|
7
7
|
run(): Promise<void>;
|
|
8
8
|
}
|
|
@@ -2,10 +2,10 @@ import { Command } from '@heroku-cli/command';
|
|
|
2
2
|
import { Args, ux } from '@oclif/core';
|
|
3
3
|
import { display } from '../../lib/authorizations/authorizations.js';
|
|
4
4
|
export default class AuthorizationsRotate extends Command {
|
|
5
|
-
static description = 'updates an OAuth authorization token';
|
|
6
5
|
static args = {
|
|
7
|
-
id: Args.string({
|
|
6
|
+
id: Args.string({ description: 'ID of the authorization', required: true }),
|
|
8
7
|
};
|
|
8
|
+
static description = 'updates an OAuth authorization token';
|
|
9
9
|
async run() {
|
|
10
10
|
const { args } = await this.parse(AuthorizationsRotate);
|
|
11
11
|
ux.action.start('Rotating OAuth Authorization');
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
2
|
export default class AuthorizationsUpdate extends Command {
|
|
3
|
+
static args: {
|
|
4
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
5
|
+
};
|
|
3
6
|
static description: string;
|
|
4
7
|
static flags: {
|
|
5
|
-
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
8
|
'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
9
|
'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
|
|
9
|
-
static args: {
|
|
10
|
-
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
10
|
+
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
};
|
|
12
12
|
run(): Promise<void>;
|
|
13
13
|
}
|
|
@@ -2,14 +2,14 @@ import { Command, flags } from '@heroku-cli/command';
|
|
|
2
2
|
import { Args, ux } from '@oclif/core';
|
|
3
3
|
import { display } from '../../lib/authorizations/authorizations.js';
|
|
4
4
|
export default class AuthorizationsUpdate extends Command {
|
|
5
|
+
static args = {
|
|
6
|
+
id: Args.string({ description: 'ID of the authorization', required: true }),
|
|
7
|
+
};
|
|
5
8
|
static description = 'updates an OAuth authorization';
|
|
6
9
|
static flags = {
|
|
10
|
+
'client-id': flags.string({ dependsOn: ['client-secret'], description: 'identifier of OAuth client to set' }),
|
|
11
|
+
'client-secret': flags.string({ dependsOn: ['client-id'], description: 'secret of OAuth client to set' }),
|
|
7
12
|
description: flags.string({ char: 'd', description: 'set a custom authorization description' }),
|
|
8
|
-
'client-id': flags.string({ description: 'identifier of OAuth client to set', dependsOn: ['client-secret'] }),
|
|
9
|
-
'client-secret': flags.string({ description: 'secret of OAuth client to set', dependsOn: ['client-id'] }),
|
|
10
|
-
};
|
|
11
|
-
static args = {
|
|
12
|
-
id: Args.string({ required: true, description: 'ID of the authorization' }),
|
|
13
13
|
};
|
|
14
14
|
async run() {
|
|
15
15
|
const { args, flags } = await this.parse(AuthorizationsUpdate);
|
|
@@ -23,8 +23,8 @@ export default class AuthorizationsUpdate extends Command {
|
|
|
23
23
|
}
|
|
24
24
|
const { body: authentication } = await this.heroku.patch(`/oauth/authorizations/${args.id}`, {
|
|
25
25
|
body: {
|
|
26
|
-
description: flags.description,
|
|
27
26
|
client,
|
|
27
|
+
description: flags.description,
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
30
|
ux.action.stop();
|