heroku 9.0.0-dev.0 → 9.1.0-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/README.md +6 -11
- package/lib/commands/access/add.d.ts +14 -0
- package/lib/commands/access/add.js +55 -0
- package/lib/commands/access/index.d.ts +11 -0
- package/lib/commands/access/index.js +86 -0
- package/lib/commands/access/remove.d.ts +12 -0
- package/lib/commands/access/remove.js +25 -0
- package/lib/commands/access/update.d.ts +14 -0
- package/lib/commands/access/update.js +39 -0
- package/lib/commands/addons/attach.d.ts +16 -0
- package/lib/commands/addons/attach.js +51 -0
- package/lib/commands/addons/create.d.ts +20 -0
- package/lib/commands/addons/create.js +96 -0
- package/lib/commands/addons/destroy.d.ts +19 -0
- package/lib/commands/addons/destroy.js +61 -0
- package/lib/commands/addons/detach.d.ts +13 -0
- package/lib/commands/addons/detach.js +31 -0
- package/lib/commands/addons/docs.d.ts +14 -0
- package/lib/commands/addons/docs.js +36 -0
- package/lib/commands/addons/index.d.ts +16 -0
- package/lib/commands/addons/index.js +246 -0
- package/lib/commands/addons/info.d.ts +14 -0
- package/lib/commands/addons/info.js +44 -0
- package/lib/commands/addons/open.d.ts +75 -0
- package/lib/commands/addons/open.js +87 -0
- package/lib/commands/addons/plans.d.ts +12 -0
- package/lib/commands/addons/plans.js +47 -0
- package/lib/commands/addons/rename.d.ts +10 -0
- package/lib/commands/addons/rename.js +20 -0
- package/lib/commands/addons/services.d.ts +9 -0
- package/lib/commands/addons/services.js +34 -0
- package/lib/commands/addons/upgrade.d.ts +28 -0
- package/lib/commands/addons/upgrade.js +145 -0
- package/lib/commands/addons/wait.d.ts +14 -0
- package/lib/commands/addons/wait.js +70 -0
- package/lib/commands/apps/create.d.ts +28 -0
- package/lib/commands/apps/create.js +201 -0
- package/lib/commands/apps/destroy.d.ts +15 -0
- package/lib/commands/apps/destroy.js +47 -0
- package/lib/commands/apps/errors.d.ts +13 -0
- package/lib/commands/apps/errors.js +120 -0
- package/lib/commands/apps/favorites/add.d.ts +2 -1
- package/lib/commands/apps/favorites/add.js +1 -0
- package/lib/commands/apps/favorites/remove.d.ts +2 -1
- package/lib/commands/apps/favorites/remove.js +1 -0
- package/lib/commands/apps/index.d.ts +16 -0
- package/lib/commands/apps/index.js +119 -0
- package/lib/commands/apps/info.d.ts +19 -0
- package/lib/commands/apps/info.js +162 -0
- package/lib/commands/apps/join.d.ts +11 -0
- package/lib/commands/apps/join.js +25 -0
- package/lib/commands/apps/leave.d.ts +12 -0
- package/lib/commands/apps/leave.js +25 -0
- package/lib/commands/apps/lock.d.ts +11 -0
- package/lib/commands/apps/lock.js +30 -0
- package/lib/commands/apps/open.d.ts +15 -0
- package/lib/commands/apps/open.js +30 -0
- package/lib/commands/apps/rename.d.ts +16 -0
- package/lib/commands/apps/rename.js +51 -0
- package/lib/commands/apps/stacks/index.d.ts +3 -2
- package/lib/commands/apps/stacks/index.js +2 -1
- package/lib/commands/apps/stacks/set.d.ts +4 -4
- package/lib/commands/apps/stacks/set.js +1 -1
- package/lib/commands/apps/transfer.d.ts +17 -0
- package/lib/commands/apps/transfer.js +91 -0
- package/lib/commands/apps/unlock.d.ts +11 -0
- package/lib/commands/apps/unlock.js +30 -0
- package/lib/commands/auth/token.js +2 -1
- package/lib/commands/authorizations/create.d.ts +3 -3
- package/lib/commands/authorizations/create.js +5 -1
- package/lib/commands/authorizations/info.d.ts +1 -1
- package/lib/commands/authorizations/info.js +5 -1
- package/lib/commands/authorizations/revoke.d.ts +1 -1
- package/lib/commands/authorizations/revoke.js +5 -1
- package/lib/commands/authorizations/rotate.d.ts +1 -1
- package/lib/commands/authorizations/rotate.js +5 -1
- package/lib/commands/authorizations/update.d.ts +4 -4
- package/lib/commands/authorizations/update.js +5 -1
- package/lib/commands/autocomplete/doctor.js +2 -2
- package/lib/commands/autocomplete/options.d.ts +2 -2
- package/lib/commands/autocomplete/options.js +2 -2
- package/lib/commands/autocomplete/script.d.ts +1 -1
- package/lib/commands/buildpacks/add.d.ts +4 -4
- package/lib/commands/buildpacks/clear.d.ts +2 -2
- package/lib/commands/buildpacks/index.d.ts +2 -2
- package/lib/commands/buildpacks/info.d.ts +1 -1
- package/lib/commands/buildpacks/remove.d.ts +4 -4
- package/lib/commands/buildpacks/search.d.ts +4 -4
- package/lib/commands/buildpacks/set.d.ts +4 -4
- package/lib/commands/buildpacks/versions.d.ts +1 -1
- package/lib/commands/certs/add.d.ts +16 -0
- package/lib/commands/certs/add.js +98 -0
- package/lib/commands/certs/auto/disable.d.ts +11 -0
- package/lib/commands/certs/auto/disable.js +34 -0
- package/lib/commands/certs/auto/enable.d.ts +11 -0
- package/lib/commands/certs/auto/enable.js +51 -0
- package/lib/commands/certs/auto/index.d.ts +12 -0
- package/lib/commands/certs/auto/index.js +94 -0
- package/lib/commands/certs/auto/refresh.d.ts +10 -0
- package/lib/commands/certs/auto/refresh.js +19 -0
- package/lib/commands/certs/generate.d.ts +26 -0
- package/lib/commands/certs/generate.js +111 -0
- package/lib/commands/certs/index.d.ts +10 -0
- package/lib/commands/certs/index.js +26 -0
- package/lib/commands/certs/info.d.ts +13 -0
- package/lib/commands/certs/info.js +43 -0
- package/lib/commands/certs/remove.d.ts +13 -0
- package/lib/commands/certs/remove.js +32 -0
- package/lib/commands/certs/update.d.ts +18 -0
- package/lib/commands/certs/update.js +54 -0
- package/lib/commands/ci/config/get.d.ts +4 -3
- package/lib/commands/ci/config/get.js +3 -2
- package/lib/commands/ci/config/index.d.ts +3 -2
- package/lib/commands/ci/config/index.js +3 -2
- package/lib/commands/ci/config/set.d.ts +3 -2
- package/lib/commands/ci/config/set.js +2 -1
- package/lib/commands/ci/config/unset.d.ts +3 -3
- package/lib/commands/ci/config/unset.js +3 -3
- package/lib/commands/ci/debug.d.ts +2 -2
- package/lib/commands/ci/index.d.ts +3 -2
- package/lib/commands/ci/index.js +1 -0
- package/lib/commands/ci/info.d.ts +5 -4
- package/lib/commands/ci/info.js +1 -0
- package/lib/commands/ci/last.d.ts +4 -3
- package/lib/commands/ci/last.js +1 -0
- package/lib/commands/ci/open.d.ts +3 -2
- package/lib/commands/ci/open.js +1 -0
- package/lib/commands/ci/rerun.d.ts +4 -3
- package/lib/commands/ci/rerun.js +1 -0
- package/lib/commands/ci/run.d.ts +2 -2
- package/lib/commands/clients/create.d.ts +2 -2
- package/lib/commands/clients/destroy.d.ts +1 -1
- package/lib/commands/clients/info.d.ts +1 -1
- package/lib/commands/clients/rotate.d.ts +1 -1
- package/lib/commands/clients/update.d.ts +3 -3
- package/lib/commands/config/edit.d.ts +3 -3
- package/lib/commands/config/get.d.ts +3 -3
- package/lib/commands/config/index.d.ts +2 -2
- package/lib/commands/config/set.d.ts +12 -0
- package/lib/commands/config/set.js +60 -0
- package/lib/commands/config/unset.d.ts +2 -2
- package/lib/commands/console.d.ts +4 -4
- package/lib/commands/container/index.d.ts +6 -0
- package/lib/commands/container/index.js +13 -0
- package/lib/commands/container/login.d.ts +9 -0
- package/lib/commands/container/login.js +57 -0
- package/lib/commands/container/logout.d.ts +9 -0
- package/lib/commands/container/logout.js +37 -0
- package/lib/commands/container/pull.d.ts +14 -0
- package/lib/commands/container/pull.js +43 -0
- package/lib/commands/container/push.d.ts +16 -0
- package/lib/commands/container/push.js +103 -0
- package/lib/commands/container/release.d.ts +14 -0
- package/lib/commands/container/release.js +91 -0
- package/lib/commands/container/rm.d.ts +13 -0
- package/lib/commands/container/rm.js +39 -0
- package/lib/commands/container/run.d.ts +15 -0
- package/lib/commands/container/run.js +66 -0
- package/lib/commands/dashboard.d.ts +7 -0
- package/lib/commands/dashboard.js +164 -0
- package/lib/commands/domains/add.d.ts +4 -4
- package/lib/commands/domains/clear.d.ts +2 -2
- package/lib/commands/domains/index.d.ts +14 -10
- package/lib/commands/domains/index.js +47 -3
- package/lib/commands/domains/info.d.ts +3 -3
- package/lib/commands/domains/remove.d.ts +3 -3
- package/lib/commands/domains/update.d.ts +4 -4
- package/lib/commands/domains/wait.d.ts +3 -3
- package/lib/commands/drains/add.d.ts +12 -0
- package/lib/commands/drains/add.js +23 -0
- package/lib/commands/drains/index.d.ts +11 -0
- package/lib/commands/drains/index.js +50 -0
- package/lib/commands/drains/remove.d.ts +13 -0
- package/lib/commands/drains/remove.js +22 -0
- package/lib/commands/features/disable.d.ts +12 -0
- package/lib/commands/features/disable.js +30 -0
- package/lib/commands/features/enable.d.ts +12 -0
- package/lib/commands/features/enable.js +29 -0
- package/lib/commands/features/index.d.ts +10 -0
- package/lib/commands/features/index.js +37 -0
- package/lib/commands/features/info.d.ts +13 -0
- package/lib/commands/features/info.js +33 -0
- package/lib/commands/git/clone.d.ts +3 -3
- package/lib/commands/git/credentials.d.ts +1 -1
- package/lib/commands/git/remote.d.ts +2 -2
- package/lib/commands/keys/add.d.ts +14 -0
- package/lib/commands/keys/add.js +101 -0
- package/lib/commands/keys/clear.d.ts +5 -0
- package/lib/commands/keys/clear.js +17 -0
- package/lib/commands/keys/index.d.ts +9 -0
- package/lib/commands/keys/index.js +36 -0
- package/lib/commands/keys/remove.d.ts +9 -0
- package/lib/commands/keys/remove.js +29 -0
- package/lib/commands/labs/enable.d.ts +13 -0
- package/lib/commands/labs/enable.js +47 -0
- package/lib/commands/labs/index.d.ts +11 -0
- package/lib/commands/labs/index.js +71 -0
- package/lib/commands/labs/info.d.ts +14 -0
- package/lib/commands/labs/info.js +49 -0
- package/lib/commands/local/index.d.ts +5 -5
- package/lib/commands/local/index.js +8 -3
- package/lib/commands/local/run.d.ts +2 -2
- package/lib/commands/local/run.js +8 -3
- package/lib/commands/logs.d.ts +6 -6
- package/lib/commands/maintenance/index.d.ts +10 -0
- package/lib/commands/maintenance/index.js +19 -0
- package/lib/commands/maintenance/off.d.ts +10 -0
- package/lib/commands/maintenance/off.js +20 -0
- package/lib/commands/maintenance/on.d.ts +10 -0
- package/lib/commands/maintenance/on.js +20 -0
- package/lib/commands/members/add.d.ts +13 -0
- package/lib/commands/members/add.js +33 -0
- package/lib/commands/members/index.d.ts +12 -0
- package/lib/commands/members/index.js +76 -0
- package/lib/commands/members/remove.d.ts +10 -0
- package/lib/commands/members/remove.js +58 -0
- package/lib/commands/members/set.d.ts +11 -0
- package/lib/commands/members/set.js +21 -0
- package/lib/commands/notifications/index.d.ts +13 -0
- package/lib/commands/notifications/index.js +62 -0
- package/lib/commands/orgs/index.d.ts +11 -0
- package/lib/commands/orgs/index.js +27 -0
- package/lib/commands/orgs/open.d.ts +10 -0
- package/lib/commands/orgs/open.js +24 -0
- package/lib/commands/pg/backups/cancel.d.ts +15 -0
- package/lib/commands/pg/backups/cancel.js +49 -0
- package/lib/commands/pg/backups/capture.d.ts +15 -0
- package/lib/commands/pg/backups/capture.js +65 -0
- package/lib/commands/pg/backups/delete.d.ts +15 -0
- package/lib/commands/pg/backups/delete.js +38 -0
- package/lib/commands/pg/backups/download.d.ts +14 -0
- package/lib/commands/pg/backups/download.js +58 -0
- package/lib/commands/pg/backups/index.d.ts +20 -0
- package/lib/commands/pg/backups/index.js +129 -0
- package/lib/commands/pg/backups/info.d.ts +17 -0
- package/lib/commands/pg/backups/info.js +92 -0
- package/lib/commands/pg/backups/restore.d.ts +19 -0
- package/lib/commands/pg/backups/restore.js +107 -0
- package/lib/commands/pg/backups/schedule.d.ts +21 -0
- package/lib/commands/pg/backups/schedule.js +82 -0
- package/lib/commands/pg/backups/schedules.d.ts +10 -0
- package/lib/commands/pg/backups/schedules.js +31 -0
- package/lib/commands/pg/backups/unschedule.d.ts +13 -0
- package/lib/commands/pg/backups/unschedule.js +44 -0
- package/lib/commands/pg/backups/url.d.ts +13 -0
- package/lib/commands/pg/backups/url.js +41 -0
- package/lib/commands/pg/bloat.d.ts +13 -0
- package/lib/commands/pg/bloat.js +87 -0
- package/lib/commands/pg/blocking.d.ts +13 -0
- package/lib/commands/pg/blocking.js +42 -0
- package/lib/commands/pg/connection-pooling/attach.d.ts +15 -0
- package/lib/commands/pg/connection-pooling/attach.js +41 -0
- package/lib/commands/pg/copy.d.ts +18 -0
- package/lib/commands/pg/copy.js +86 -0
- package/lib/commands/pg/credentials/create.d.ts +14 -0
- package/lib/commands/pg/credentials/create.js +40 -0
- package/lib/commands/pg/credentials/destroy.d.ts +16 -0
- package/lib/commands/pg/credentials/destroy.js +48 -0
- package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
- package/lib/commands/pg/credentials/repair-default.js +39 -0
- package/lib/commands/pg/credentials/rotate.d.ts +16 -0
- package/lib/commands/pg/credentials/rotate.js +82 -0
- package/lib/commands/pg/credentials/url.d.ts +14 -0
- package/lib/commands/pg/credentials/url.js +64 -0
- package/lib/commands/pg/credentials.d.ts +16 -0
- package/lib/commands/pg/credentials.js +61 -0
- package/lib/commands/pg/diagnose.d.ts +18 -0
- package/lib/commands/pg/diagnose.js +109 -0
- package/lib/commands/pg/info.d.ts +14 -0
- package/lib/commands/pg/info.js +92 -0
- package/lib/commands/pg/kill.d.ts +15 -0
- package/lib/commands/pg/kill.js +32 -0
- package/lib/commands/pg/killall.d.ts +13 -0
- package/lib/commands/pg/killall.js +26 -0
- package/lib/commands/pg/links/create.d.ts +15 -0
- package/lib/commands/pg/links/create.js +58 -0
- package/lib/commands/pg/links/destroy.d.ts +16 -0
- package/lib/commands/pg/links/destroy.js +42 -0
- package/lib/commands/pg/links/index.d.ts +13 -0
- package/lib/commands/pg/links/index.js +59 -0
- package/lib/commands/pg/locks.d.ts +15 -0
- package/lib/commands/pg/locks.js +53 -0
- package/lib/commands/pg/maintenance/index.d.ts +13 -0
- package/lib/commands/pg/maintenance/index.js +29 -0
- package/lib/commands/pg/maintenance/run.d.ts +14 -0
- package/lib/commands/pg/maintenance/run.js +37 -0
- package/lib/commands/pg/maintenance/window.d.ts +15 -0
- package/lib/commands/pg/maintenance/window.js +41 -0
- package/lib/commands/pg/outliers.d.ts +19 -0
- package/lib/commands/pg/outliers.js +97 -0
- package/lib/commands/pg/promote.d.ts +14 -0
- package/lib/commands/pg/promote.js +169 -0
- package/lib/commands/pg/ps.d.ts +14 -0
- package/lib/commands/pg/ps.js +52 -0
- package/lib/commands/pg/psql.d.ts +16 -0
- package/lib/commands/pg/psql.js +49 -0
- package/lib/commands/pg/pull.d.ts +18 -0
- package/lib/commands/pg/pull.js +87 -0
- package/lib/commands/pg/push.d.ts +18 -0
- package/lib/commands/pg/push.js +84 -0
- package/lib/commands/pg/reset.d.ts +15 -0
- package/lib/commands/pg/reset.js +44 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.js +32 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +16 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.js +33 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.d.ts +12 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.js +25 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.js +33 -0
- package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
- package/lib/commands/pg/settings/auto-explain.js +38 -0
- package/lib/commands/pg/settings/index.d.ts +13 -0
- package/lib/commands/pg/settings/index.js +34 -0
- package/lib/commands/pg/settings/log-connections.d.ts +17 -0
- package/lib/commands/pg/settings/log-connections.js +34 -0
- package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
- package/lib/commands/pg/settings/log-lock-waits.js +31 -0
- package/lib/commands/pg/settings/log-min-duration-statement.d.ts +15 -0
- package/lib/commands/pg/settings/log-min-duration-statement.js +33 -0
- package/lib/commands/pg/settings/log-statement.d.ts +12 -0
- package/lib/commands/pg/settings/log-statement.js +30 -0
- package/lib/commands/pg/settings/track-functions.d.ts +12 -0
- package/lib/commands/pg/settings/track-functions.js +29 -0
- package/lib/commands/pg/unfollow.d.ts +14 -0
- package/lib/commands/pg/unfollow.js +40 -0
- package/lib/commands/pg/upgrade.d.ts +15 -0
- package/lib/commands/pg/upgrade.js +58 -0
- package/lib/commands/pg/vacuum-stats.d.ts +13 -0
- package/lib/commands/pg/vacuum-stats.js +65 -0
- package/lib/commands/pg/wait.d.ts +15 -0
- package/lib/commands/pg/wait.js +79 -0
- package/lib/commands/pipelines/add.d.ts +4 -4
- package/lib/commands/pipelines/connect.d.ts +2 -2
- package/lib/commands/pipelines/connect.js +1 -1
- package/lib/commands/pipelines/create.d.ts +5 -5
- package/lib/commands/pipelines/destroy.d.ts +1 -1
- package/lib/commands/pipelines/diff.d.ts +2 -2
- package/lib/commands/pipelines/diff.js +1 -1
- package/lib/commands/pipelines/info.d.ts +1 -1
- package/lib/commands/pipelines/open.d.ts +1 -1
- package/lib/commands/pipelines/promote.d.ts +3 -3
- package/lib/commands/pipelines/remove.d.ts +2 -2
- package/lib/commands/pipelines/rename.d.ts +2 -2
- package/lib/commands/pipelines/setup.d.ts +3 -3
- package/lib/commands/pipelines/transfer.d.ts +3 -3
- package/lib/commands/pipelines/update.d.ts +3 -3
- package/lib/commands/ps/autoscale/disable.d.ts +2 -2
- package/lib/commands/ps/autoscale/enable.d.ts +5 -5
- package/lib/commands/ps/index.d.ts +15 -0
- package/lib/commands/ps/index.js +195 -0
- package/lib/commands/ps/restart.d.ts +17 -0
- package/lib/commands/ps/restart.js +38 -0
- package/lib/commands/ps/scale.d.ts +13 -0
- package/lib/commands/ps/scale.js +108 -0
- package/lib/commands/ps/stop.d.ts +17 -0
- package/lib/commands/ps/stop.js +33 -0
- package/lib/commands/ps/type.d.ts +12 -0
- package/lib/commands/ps/type.js +163 -0
- package/lib/commands/ps/wait.d.ts +4 -4
- package/lib/commands/rake.d.ts +4 -4
- package/lib/commands/redis/cli.d.ts +15 -0
- package/lib/commands/redis/cli.js +204 -0
- package/lib/commands/redis/credentials.d.ts +14 -0
- package/lib/commands/redis/credentials.js +32 -0
- package/lib/commands/redis/info.d.ts +15 -0
- package/lib/commands/redis/info.js +25 -0
- package/lib/commands/redis/keyspace-notifications.d.ts +14 -0
- package/lib/commands/redis/keyspace-notifications.js +47 -0
- package/lib/commands/redis/maintenance.d.ts +16 -0
- package/lib/commands/redis/maintenance.js +63 -0
- package/lib/commands/redis/maxmemory.d.ts +14 -0
- package/lib/commands/redis/maxmemory.js +40 -0
- package/lib/commands/redis/promote.d.ts +13 -0
- package/lib/commands/redis/promote.js +39 -0
- package/lib/commands/redis/stats-reset.d.ts +14 -0
- package/lib/commands/redis/stats-reset.js +36 -0
- package/lib/commands/redis/timeout.d.ts +14 -0
- package/lib/commands/redis/timeout.js +35 -0
- package/lib/commands/redis/upgrade.d.ts +15 -0
- package/lib/commands/redis/upgrade.js +37 -0
- package/lib/commands/redis/wait.d.ts +14 -0
- package/lib/commands/redis/wait.js +60 -0
- package/lib/commands/releases/index.d.ts +14 -0
- package/lib/commands/releases/index.js +124 -0
- package/lib/commands/releases/info.d.ts +15 -0
- package/lib/commands/releases/info.js +56 -0
- package/lib/commands/releases/output.d.ts +13 -0
- package/lib/commands/releases/output.js +37 -0
- package/lib/commands/releases/rollback.d.ts +14 -0
- package/lib/commands/releases/rollback.js +48 -0
- package/lib/commands/reviewapps/disable.d.ts +3 -3
- package/lib/commands/reviewapps/enable.d.ts +3 -3
- package/lib/commands/run/detached.d.ts +7 -8
- package/lib/commands/run/detached.js +16 -20
- package/lib/commands/run/index.d.ts +10 -11
- package/lib/commands/run/index.js +16 -17
- package/lib/commands/run/inside.d.ts +5 -7
- package/lib/commands/run/inside.js +10 -14
- package/lib/commands/sessions/destroy.d.ts +1 -1
- package/lib/commands/spaces/create.d.ts +22 -0
- package/lib/commands/spaces/create.js +73 -0
- package/lib/commands/spaces/destroy.d.ts +14 -0
- package/lib/commands/spaces/destroy.js +49 -0
- package/lib/commands/spaces/drains/get.d.ts +12 -0
- package/lib/commands/spaces/drains/get.js +27 -0
- package/lib/commands/spaces/drains/set.d.ts +14 -0
- package/lib/commands/spaces/drains/set.js +29 -0
- package/lib/commands/spaces/hosts.d.ts +14 -0
- package/lib/commands/spaces/hosts.js +37 -0
- package/lib/commands/spaces/index.d.ts +16 -0
- package/lib/commands/spaces/index.js +55 -0
- package/lib/commands/spaces/info.d.ts +14 -0
- package/lib/commands/spaces/info.js +47 -0
- package/lib/commands/spaces/peerings/accept.d.ts +15 -0
- package/lib/commands/spaces/peerings/accept.js +36 -0
- package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
- package/lib/commands/spaces/peerings/destroy.js +45 -0
- package/lib/commands/spaces/peerings/index.d.ts +13 -0
- package/lib/commands/spaces/peerings/index.js +33 -0
- package/lib/commands/spaces/peerings/info.d.ts +15 -0
- package/lib/commands/spaces/peerings/info.js +59 -0
- package/lib/commands/spaces/ps.d.ts +15 -0
- package/lib/commands/spaces/ps.js +82 -0
- package/lib/commands/spaces/rename.d.ts +11 -0
- package/lib/commands/spaces/rename.js +26 -0
- package/lib/commands/spaces/topology.d.ts +32 -0
- package/lib/commands/spaces/topology.js +89 -0
- package/lib/commands/spaces/transfer.d.ts +11 -0
- package/lib/commands/spaces/transfer.js +35 -0
- package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
- package/lib/commands/spaces/trusted-ips/add.js +43 -0
- package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/index.js +52 -0
- package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/remove.js +44 -0
- package/lib/commands/spaces/vpn/config.d.ts +14 -0
- package/lib/commands/spaces/vpn/config.js +54 -0
- package/lib/commands/spaces/vpn/connect.d.ts +15 -0
- package/lib/commands/spaces/vpn/connect.js +48 -0
- package/lib/commands/spaces/vpn/connections.d.ts +17 -0
- package/lib/commands/spaces/vpn/connections.js +57 -0
- package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
- package/lib/commands/spaces/vpn/destroy.js +38 -0
- package/lib/commands/spaces/vpn/info.d.ts +16 -0
- package/lib/commands/spaces/vpn/info.js +82 -0
- package/lib/commands/spaces/vpn/update.d.ts +14 -0
- package/lib/commands/spaces/vpn/update.js +39 -0
- package/lib/commands/spaces/vpn/wait.d.ts +16 -0
- package/lib/commands/spaces/vpn/wait.js +70 -0
- package/lib/commands/spaces/wait.d.ts +17 -0
- package/lib/commands/spaces/wait.js +89 -0
- package/lib/commands/status.js +4 -4
- package/lib/commands/teams/index.d.ts +9 -0
- package/lib/commands/teams/index.js +29 -0
- package/lib/commands/webhooks/add.d.ts +8 -8
- package/lib/commands/webhooks/deliveries/index.d.ts +4 -4
- package/lib/commands/webhooks/deliveries/info.d.ts +4 -4
- package/lib/commands/webhooks/events/index.d.ts +3 -3
- package/lib/commands/webhooks/events/info.d.ts +4 -4
- package/lib/commands/webhooks/index.d.ts +3 -3
- package/lib/commands/webhooks/info.d.ts +4 -4
- package/lib/commands/webhooks/remove.d.ts +4 -4
- package/lib/commands/webhooks/update.d.ts +9 -9
- package/lib/global_telemetry.js +10 -4
- package/lib/hooks/postrun/performance_analytics.js +5 -4
- package/lib/hooks/prerun/analytics.js +3 -0
- package/lib/lib/addons/addons_wait.d.ts +78 -0
- package/lib/lib/addons/addons_wait.js +56 -0
- package/lib/lib/addons/create_addon.d.ts +7 -0
- package/lib/lib/addons/create_addon.js +59 -0
- package/lib/lib/addons/destroy_addon.d.ts +3 -0
- package/lib/lib/addons/destroy_addon.js +48 -0
- package/lib/lib/addons/resolve.d.ts +39 -0
- package/lib/lib/addons/resolve.js +180 -0
- package/lib/lib/addons/util.d.ts +9 -0
- package/lib/lib/addons/util.js +72 -0
- package/lib/lib/apps/app-transfer.d.ts +10 -0
- package/lib/lib/apps/app-transfer.js +35 -0
- package/lib/lib/apps/error_info.d.ts +7 -0
- package/lib/lib/apps/error_info.js +185 -0
- package/lib/lib/autocomplete/base.d.ts +1 -1
- package/lib/lib/autocomplete/completions.d.ts +5 -1
- package/lib/lib/autocomplete/completions.js +6 -1
- package/lib/lib/certs/certificate_details.d.ts +2 -0
- package/lib/lib/certs/certificate_details.js +37 -0
- package/lib/lib/certs/display_table.d.ts +2 -0
- package/lib/lib/certs/display_table.js +51 -0
- package/lib/lib/certs/domains.d.ts +3 -0
- package/lib/lib/certs/domains.js +45 -0
- package/lib/lib/certs/flags.d.ts +7 -0
- package/lib/lib/certs/flags.js +42 -0
- package/lib/lib/certs/format_date.d.ts +1 -0
- package/lib/lib/certs/format_date.js +11 -0
- package/lib/lib/certs/get_cert_and_key.d.ts +9 -0
- package/lib/lib/certs/get_cert_and_key.js +11 -0
- package/lib/lib/ci/git.d.ts +7 -1
- package/lib/lib/ci/git.js +44 -1
- package/lib/lib/ci/interfaces/kolkrabbi.d.ts +1 -1
- package/lib/lib/ci/source.js +3 -3
- package/lib/lib/ci/test-run.js +2 -2
- package/lib/lib/config/quote.js +1 -1
- package/lib/lib/confirmCommand.d.ts +1 -0
- package/lib/lib/confirmCommand.js +23 -0
- package/lib/lib/container/debug.d.ts +2 -0
- package/lib/lib/container/debug.js +5 -0
- package/lib/lib/container/docker_helper.d.ts +24 -0
- package/lib/lib/container/docker_helper.js +168 -0
- package/lib/lib/container/helpers.d.ts +8 -0
- package/lib/lib/container/helpers.js +29 -0
- package/lib/lib/container/streamer.d.ts +1 -0
- package/lib/lib/container/streamer.js +31 -0
- package/lib/lib/domains/domains.d.ts +6 -0
- package/lib/lib/domains/domains.js +104 -0
- package/lib/lib/git/git.d.ts +3 -0
- package/lib/lib/git/git.js +22 -3
- package/lib/lib/local/run-foreman.d.ts +1 -0
- package/lib/lib/local/run-foreman.js +229 -1
- package/lib/lib/members/util.d.ts +3 -0
- package/lib/lib/members/util.js +25 -0
- package/lib/lib/members/utils.d.ts +2 -0
- package/lib/lib/members/utils.js +14 -0
- package/lib/lib/notify.d.ts +1 -0
- package/lib/lib/notify.js +23 -0
- package/lib/lib/orgs/utils.d.ts +5 -0
- package/lib/lib/orgs/utils.js +24 -0
- package/lib/lib/pg/backups.d.ts +17 -0
- package/lib/lib/pg/backups.js +164 -0
- package/lib/lib/pg/bastion.d.ts +29 -0
- package/lib/lib/pg/bastion.js +121 -0
- package/lib/lib/pg/config.d.ts +2 -0
- package/lib/lib/pg/config.js +13 -0
- package/lib/lib/pg/download.d.ts +5 -0
- package/lib/lib/pg/download.js +34 -0
- package/lib/lib/pg/fetcher.d.ts +39 -0
- package/lib/lib/pg/fetcher.js +137 -0
- package/lib/lib/pg/host.d.ts +1 -0
- package/lib/lib/pg/host.js +7 -0
- package/lib/lib/pg/psql.d.ts +48 -0
- package/lib/lib/pg/psql.js +252 -0
- package/lib/lib/pg/push_pull.d.ts +13 -0
- package/lib/lib/pg/push_pull.js +118 -0
- package/lib/lib/pg/setter.d.ts +16 -0
- package/lib/lib/pg/setter.js +65 -0
- package/lib/lib/pg/types.d.ts +230 -0
- package/lib/lib/pg/types.js +2 -0
- package/lib/lib/pg/util.d.ts +36 -0
- package/lib/lib/pg/util.js +183 -0
- package/lib/lib/redis/api.d.ts +65 -0
- package/lib/lib/redis/api.js +122 -0
- package/lib/lib/releases/output.d.ts +1 -0
- package/lib/lib/releases/output.js +14 -0
- package/lib/lib/releases/releases.d.ts +6 -0
- package/lib/lib/releases/releases.js +32 -0
- package/lib/lib/releases/status_helper.d.ts +5 -0
- package/lib/lib/releases/status_helper.js +25 -0
- package/lib/lib/run/dyno.js +2 -2
- package/lib/lib/run/log-displayer.d.ts +1 -1
- package/lib/lib/spaces/format.d.ts +4 -0
- package/lib/lib/spaces/format.js +60 -0
- package/lib/lib/spaces/hosts.d.ts +9 -0
- package/lib/lib/spaces/hosts.js +34 -0
- package/lib/lib/spaces/outbound-rules.d.ts +4 -0
- package/lib/lib/spaces/outbound-rules.js +78 -0
- package/lib/lib/spaces/parsers.d.ts +8 -0
- package/lib/lib/spaces/parsers.js +17 -0
- package/lib/lib/spaces/peering.d.ts +4 -0
- package/lib/lib/spaces/peering.js +53 -0
- package/lib/lib/spaces/spaces.d.ts +4 -0
- package/lib/lib/spaces/spaces.js +37 -0
- package/lib/lib/spaces/vpn-connections.d.ts +2 -0
- package/lib/lib/spaces/vpn-connections.js +22 -0
- package/lib/lib/teamUtils.d.ts +3 -0
- package/lib/lib/teamUtils.js +18 -0
- package/lib/lib/time.d.ts +2 -0
- package/lib/lib/time.js +29 -0
- package/lib/lib/types/app_errors.d.ts +6 -0
- package/lib/lib/types/app_errors.js +2 -0
- package/lib/lib/types/domain.d.ts +61 -0
- package/lib/lib/types/domain.js +5 -0
- package/lib/lib/types/notifications.d.ts +20 -0
- package/lib/lib/types/notifications.js +2 -0
- package/lib/lib/utils/keyValueParser.d.ts +4 -0
- package/lib/lib/utils/keyValueParser.js +9 -0
- package/lib/lib/utils/multisort.d.ts +32 -0
- package/lib/lib/utils/multisort.js +66 -0
- package/lib/lib/utils/paginator.d.ts +2 -0
- package/lib/lib/utils/paginator.js +29 -0
- package/lib/lib/utils/uuid-validate.d.ts +1 -0
- package/lib/lib/utils/uuid-validate.js +7 -0
- package/lib/user-config.js +2 -2
- package/oclif.manifest.json +12684 -2674
- package/package.json +116 -65
package/README.md
CHANGED
|
@@ -36,15 +36,15 @@ For other issues, [submit a support ticket](https://help.heroku.com/).
|
|
|
36
36
|
* [`heroku access`](docs/access.md) - manage user access to apps
|
|
37
37
|
* [`heroku addons`](docs/addons.md) - tools and services for developing, extending, and operating your app
|
|
38
38
|
* [`heroku apps`](docs/apps.md) - manage apps on Heroku
|
|
39
|
-
* [`heroku auth`](docs/auth.md) -
|
|
39
|
+
* [`heroku auth`](docs/auth.md) - manage authentication for your Heroku account
|
|
40
40
|
* [`heroku authorizations`](docs/authorizations.md) - OAuth authorizations
|
|
41
41
|
* [`heroku autocomplete`](docs/autocomplete.md) - display autocomplete installation instructions
|
|
42
42
|
* [`heroku buildpacks`](docs/buildpacks.md) - scripts used to compile apps
|
|
43
|
-
* [`heroku certs`](docs/certs.md) -
|
|
43
|
+
* [`heroku certs`](docs/certs.md) - SSL certificates
|
|
44
44
|
* [`heroku ci`](docs/ci.md) - test runner for Heroku Pipelines
|
|
45
45
|
* [`heroku clients`](docs/clients.md) - OAuth clients on the platform
|
|
46
46
|
* [`heroku config`](docs/config.md) - environment variables of apps
|
|
47
|
-
* [`heroku container`](docs/container.md) -
|
|
47
|
+
* [`heroku container`](docs/container.md) - deploy your Docker-based app to Heroku
|
|
48
48
|
* [`heroku domains`](docs/domains.md) - custom domains for apps
|
|
49
49
|
* [`heroku drains`](docs/drains.md) - forward logs to syslog or HTTPS
|
|
50
50
|
* [`heroku features`](docs/features.md) - add/remove app features
|
|
@@ -62,14 +62,13 @@ For other issues, [submit a support ticket](https://help.heroku.com/).
|
|
|
62
62
|
* [`heroku pipelines`](docs/pipelines.md) - manage pipelines
|
|
63
63
|
* [`heroku plugins`](docs/plugins.md) - List installed plugins.
|
|
64
64
|
* [`heroku ps`](docs/ps.md) - Client tools for Heroku Exec
|
|
65
|
-
* [`heroku psql`](docs/psql.md) - open a psql shell to the database
|
|
66
65
|
* [`heroku redis`](docs/redis.md) - manage heroku redis instances
|
|
67
66
|
* [`heroku regions`](docs/regions.md) - list available regions for deployment
|
|
68
67
|
* [`heroku releases`](docs/releases.md) - display the releases for an app
|
|
69
68
|
* [`heroku reviewapps`](docs/reviewapps.md) - manage reviewapps in pipelines
|
|
70
69
|
* [`heroku run`](docs/run.md) - run a one-off process inside a Heroku dyno
|
|
71
70
|
* [`heroku sessions`](docs/sessions.md) - OAuth sessions
|
|
72
|
-
* [`heroku spaces`](docs/spaces.md) -
|
|
71
|
+
* [`heroku spaces`](docs/spaces.md) - list available spaces
|
|
73
72
|
* [`heroku status`](docs/status.md) - display current status of the Heroku platform
|
|
74
73
|
* [`heroku teams`](docs/teams.md) - manage teams
|
|
75
74
|
* [`heroku update`](docs/update.md) - update the Heroku CLI
|
|
@@ -85,17 +84,14 @@ This project is built with [lerna](https://lerna.js.org/). The core plugins are
|
|
|
85
84
|
|
|
86
85
|
After cloning the repo
|
|
87
86
|
1. Run `yarn` to install dependencies
|
|
88
|
-
2. Run `yarn
|
|
89
|
-
- This repo currently uses an older version of Lerna. We recommend using the version specified in the package.json instead of a newer version that you may have installed globally.
|
|
87
|
+
2. Run `yarn build` to build the CLI. This will need to be re-run any time you make changes and want to test them locally.
|
|
90
88
|
|
|
91
89
|
To execute Heroku CLI commands locally, use `./bin/run <command>`. For example, to run the `heroku apps` command with your local code, run `./bin/run apps` from the root directory.
|
|
92
90
|
|
|
93
91
|
Testing
|
|
94
92
|
=======
|
|
95
93
|
|
|
96
|
-
Run all tests with `yarn
|
|
97
|
-
|
|
98
|
-
Run one test, in this case plugin-certs-v5, with `yarn lerna run --scope @heroku-cli/plugin-certs-v5 test`.
|
|
94
|
+
Run all tests with `yarn test`.
|
|
99
95
|
|
|
100
96
|
## Debugging
|
|
101
97
|
|
|
@@ -103,7 +99,6 @@ Using WebStorm (from Jetbrains / IntelliJ), you can run/debug an individual test
|
|
|
103
99
|
|
|
104
100
|
- Create a new run/debug configuration
|
|
105
101
|
- Select the 'Mocha' type
|
|
106
|
-
- Set the working directory to the directory of the package you are using. (i.e. ~/Heroku/Repos/cli/packages/certs-v5)
|
|
107
102
|
|
|
108
103
|
Releasing
|
|
109
104
|
=========
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class AccessAdd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
6
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
permissions: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static args: {
|
|
11
|
+
email: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const teamUtils_1 = require("../../lib/teamUtils");
|
|
7
|
+
const _ = require("lodash");
|
|
8
|
+
class AccessAdd extends command_1.Command {
|
|
9
|
+
async run() {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
const { flags, args } = await this.parse(AccessAdd);
|
|
12
|
+
const { email } = args;
|
|
13
|
+
const { app: appName, permissions } = flags;
|
|
14
|
+
const { body: appInfo } = await this.heroku.get(`/apps/${appName}`);
|
|
15
|
+
let output = `Adding ${color_1.default.cyan(email)} access to the app ${color_1.default.magenta(appName)}`;
|
|
16
|
+
let teamFeatures = [];
|
|
17
|
+
if ((0, teamUtils_1.isTeamApp)((_a = appInfo === null || appInfo === void 0 ? void 0 : appInfo.owner) === null || _a === void 0 ? void 0 : _a.email)) {
|
|
18
|
+
const teamName = (0, teamUtils_1.getOwner)((_b = appInfo === null || appInfo === void 0 ? void 0 : appInfo.owner) === null || _b === void 0 ? void 0 : _b.email);
|
|
19
|
+
const teamFeaturesRequest = await this.heroku.get(`/teams/${teamName}/features`);
|
|
20
|
+
teamFeatures = teamFeaturesRequest.body;
|
|
21
|
+
}
|
|
22
|
+
if (teamFeatures.some(feature => feature.name === 'org-access-controls')) {
|
|
23
|
+
if (!permissions)
|
|
24
|
+
this.error('Missing argument: permissions', { exit: 1 });
|
|
25
|
+
const permissionsArray = permissions ? permissions.split(',') : [];
|
|
26
|
+
permissionsArray.push('view');
|
|
27
|
+
const permissionsArraySorted = _.uniq(permissionsArray.sort());
|
|
28
|
+
output += ` with ${color_1.default.green(permissionsArraySorted.join(', '))} permissions`;
|
|
29
|
+
core_1.ux.action.start(output);
|
|
30
|
+
await this.heroku.post(`/teams/apps/${appName}/collaborators`, {
|
|
31
|
+
body: { user: email, permissions: permissionsArraySorted },
|
|
32
|
+
});
|
|
33
|
+
core_1.ux.action.stop();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
core_1.ux.action.start(output);
|
|
37
|
+
await this.heroku.post(`/apps/${appName}/collaborators`, { body: { user: email } });
|
|
38
|
+
core_1.ux.action.stop();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.default = AccessAdd;
|
|
43
|
+
AccessAdd.description = 'add new users to your app';
|
|
44
|
+
AccessAdd.flags = {
|
|
45
|
+
app: command_1.flags.app({ required: true }),
|
|
46
|
+
remote: command_1.flags.remote({ char: 'r' }),
|
|
47
|
+
permissions: command_1.flags.string({ char: 'p', description: 'list of permissions comma separated' }),
|
|
48
|
+
};
|
|
49
|
+
AccessAdd.examples = [
|
|
50
|
+
'$ heroku access:add user@email.com --app APP # add a collaborator to your app',
|
|
51
|
+
'$ heroku access:add user@email.com --app APP --permissions deploy,manage,operate # permissions must be comma separated',
|
|
52
|
+
];
|
|
53
|
+
AccessAdd.args = {
|
|
54
|
+
email: core_1.Args.string({ required: true }),
|
|
55
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class AccessIndex extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static topic: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const _ = require("lodash");
|
|
7
|
+
const teamUtils_1 = require("../../lib/teamUtils");
|
|
8
|
+
function printJSON(collaborators) {
|
|
9
|
+
core_1.ux.log(JSON.stringify(collaborators, null, 2));
|
|
10
|
+
}
|
|
11
|
+
function buildTableColumns(showPermissions) {
|
|
12
|
+
const baseColumns = {
|
|
13
|
+
email: {
|
|
14
|
+
get: ({ email }) => color_1.default.cyan(email),
|
|
15
|
+
},
|
|
16
|
+
role: {
|
|
17
|
+
get: ({ role }) => color_1.default.green(role),
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
if (showPermissions) {
|
|
21
|
+
return Object.assign(Object.assign({}, baseColumns), { permissions: {} });
|
|
22
|
+
}
|
|
23
|
+
return baseColumns;
|
|
24
|
+
}
|
|
25
|
+
function printAccess(app, collaborators) {
|
|
26
|
+
var _a;
|
|
27
|
+
const showPermissions = (0, teamUtils_1.isTeamApp)((_a = app.owner) === null || _a === void 0 ? void 0 : _a.email);
|
|
28
|
+
collaborators = _.chain(collaborators)
|
|
29
|
+
.sortBy(c => c.email || c.user.email)
|
|
30
|
+
.reject(c => /herokumanager\.com$/.test(c.user.email))
|
|
31
|
+
.map(collab => {
|
|
32
|
+
const email = collab.user.email;
|
|
33
|
+
const role = collab.role;
|
|
34
|
+
const data = { email: email, role: role || 'collaborator' };
|
|
35
|
+
if (showPermissions) {
|
|
36
|
+
data.permissions = _.map(_.sortBy(collab.permissions, 'name'), 'name').join(', ');
|
|
37
|
+
}
|
|
38
|
+
return data;
|
|
39
|
+
})
|
|
40
|
+
.value();
|
|
41
|
+
const tableColumns = buildTableColumns(showPermissions);
|
|
42
|
+
core_1.ux.table(collaborators, tableColumns);
|
|
43
|
+
}
|
|
44
|
+
function buildCollaboratorsArray(collaboratorsRaw, admins) {
|
|
45
|
+
const collaboratorsNoAdmins = _.reject(collaboratorsRaw, { role: 'admin' });
|
|
46
|
+
return _.union(collaboratorsNoAdmins, admins);
|
|
47
|
+
}
|
|
48
|
+
class AccessIndex extends command_1.Command {
|
|
49
|
+
async run() {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
const { flags, argv, args } = await this.parse(AccessIndex);
|
|
52
|
+
const { app: appName, json } = flags;
|
|
53
|
+
const { body: app } = await this.heroku.get(`/apps/${appName}`);
|
|
54
|
+
let { body: collaborators } = await this.heroku.get(`/apps/${appName}/collaborators`);
|
|
55
|
+
if ((0, teamUtils_1.isTeamApp)((_a = app.owner) === null || _a === void 0 ? void 0 : _a.email)) {
|
|
56
|
+
const teamName = (0, teamUtils_1.getOwner)((_b = app.owner) === null || _b === void 0 ? void 0 : _b.email);
|
|
57
|
+
try {
|
|
58
|
+
const { body: members } = await this.heroku.get(`/teams/${teamName}/members`);
|
|
59
|
+
let admins = members.filter(member => member.role === 'admin');
|
|
60
|
+
const { body: adminPermissions } = await this.heroku.get('/teams/permissions');
|
|
61
|
+
admins = _.forEach(admins, function (admin) {
|
|
62
|
+
admin.user = { email: admin.email };
|
|
63
|
+
admin.permissions = adminPermissions;
|
|
64
|
+
return admin;
|
|
65
|
+
});
|
|
66
|
+
collaborators = buildCollaboratorsArray(collaborators, admins);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error.statusCode !== 403)
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (json)
|
|
74
|
+
printJSON(collaborators);
|
|
75
|
+
else
|
|
76
|
+
printAccess(app, collaborators);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.default = AccessIndex;
|
|
80
|
+
AccessIndex.description = 'list who has access to an app';
|
|
81
|
+
AccessIndex.topic = 'access';
|
|
82
|
+
AccessIndex.flags = {
|
|
83
|
+
app: command_1.flags.app({ required: true }),
|
|
84
|
+
remote: command_1.flags.remote({ char: 'r' }),
|
|
85
|
+
json: command_1.flags.boolean({ description: 'output in json format' }),
|
|
86
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class AccessRemove extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static example: string;
|
|
5
|
+
static topic: string;
|
|
6
|
+
static flags: {
|
|
7
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static strict: boolean;
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
class AccessRemove extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const { flags, argv } = await this.parse(AccessRemove);
|
|
9
|
+
const { app } = flags;
|
|
10
|
+
const email = argv[0];
|
|
11
|
+
const appName = app;
|
|
12
|
+
core_1.ux.action.start(`Removing ${color_1.default.cyan(email)} access from the app ${color_1.default.magenta(appName)}`);
|
|
13
|
+
await this.heroku.delete(`/apps/${appName}/collaborators/${email}`);
|
|
14
|
+
core_1.ux.action.stop();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.default = AccessRemove;
|
|
18
|
+
AccessRemove.description = 'remove users from a team app';
|
|
19
|
+
AccessRemove.example = '$ heroku access:remove user@email.com --app APP';
|
|
20
|
+
AccessRemove.topic = 'access';
|
|
21
|
+
AccessRemove.flags = {
|
|
22
|
+
app: command_1.flags.app({ required: true }),
|
|
23
|
+
remote: command_1.flags.remote({ char: 'r' }),
|
|
24
|
+
};
|
|
25
|
+
AccessRemove.strict = false;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Update extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
permissions: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
email: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const teamUtils_1 = require("../../lib/teamUtils");
|
|
7
|
+
class Update extends command_1.Command {
|
|
8
|
+
async run() {
|
|
9
|
+
var _a;
|
|
10
|
+
const { flags, args } = await this.parse(Update);
|
|
11
|
+
const appName = flags.app;
|
|
12
|
+
let permissions = flags.permissions.split(',');
|
|
13
|
+
const { body: appInfo } = await this.heroku.get(`/apps/${appName}`);
|
|
14
|
+
if (!(0, teamUtils_1.isTeamApp)((_a = appInfo === null || appInfo === void 0 ? void 0 : appInfo.owner) === null || _a === void 0 ? void 0 : _a.email))
|
|
15
|
+
this.error(`Error: cannot update permissions. The app ${color_1.default.cyan(appName)} is not owned by a team`);
|
|
16
|
+
permissions.push('view');
|
|
17
|
+
permissions = Array.from(new Set(permissions.sort()));
|
|
18
|
+
core_1.ux.action.start(`Updating ${args.email} in application ${color_1.default.cyan(appName)} with ${permissions} permissions`);
|
|
19
|
+
await this.heroku.patch(`/teams/apps/${appName}/collaborators/${args.email}`, {
|
|
20
|
+
body: { permissions: permissions },
|
|
21
|
+
});
|
|
22
|
+
core_1.ux.action.stop();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.default = Update;
|
|
26
|
+
Update.topic = 'access';
|
|
27
|
+
Update.description = 'update existing collaborators on an team app';
|
|
28
|
+
Update.flags = {
|
|
29
|
+
permissions: command_1.flags.string({
|
|
30
|
+
char: 'p',
|
|
31
|
+
description: 'comma-delimited list of permissions to update (deploy,manage,operate)',
|
|
32
|
+
required: true,
|
|
33
|
+
}),
|
|
34
|
+
app: command_1.flags.app({ required: true }),
|
|
35
|
+
remote: command_1.flags.remote(),
|
|
36
|
+
};
|
|
37
|
+
Update.args = {
|
|
38
|
+
email: core_1.Args.string({ required: true }),
|
|
39
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Attach extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
as: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
credential: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
static args: {
|
|
13
|
+
addon_name: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const util_1 = require("../../lib/addons/util");
|
|
7
|
+
class Attach extends command_1.Command {
|
|
8
|
+
async run() {
|
|
9
|
+
const { flags, args } = await this.parse(Attach);
|
|
10
|
+
const { app, credential, as, confirm } = flags;
|
|
11
|
+
const { body: addon } = await this.heroku.get(`/addons/${encodeURIComponent(args.addon_name)}`);
|
|
12
|
+
const createAttachment = async (confirmed) => {
|
|
13
|
+
let namespace;
|
|
14
|
+
if (credential && credential !== 'default') {
|
|
15
|
+
namespace = 'credential:' + credential;
|
|
16
|
+
}
|
|
17
|
+
const body = {
|
|
18
|
+
name: as, app: { name: app }, addon: { name: addon.name }, confirm: confirmed, namespace,
|
|
19
|
+
};
|
|
20
|
+
core_1.ux.action.start(`Attaching ${credential ? color_1.default.yellow(credential) + ' of ' : ''}${color_1.default.yellow(addon.name || '')}${as ? ' as ' + color_1.default.cyan(as) : ''} to ${color_1.default.magenta(app)}`);
|
|
21
|
+
const { body: attachments } = await this.heroku.post('/addon-attachments', { body });
|
|
22
|
+
core_1.ux.action.stop();
|
|
23
|
+
return attachments;
|
|
24
|
+
};
|
|
25
|
+
if (credential && credential !== 'default') {
|
|
26
|
+
const { body: credentialConfig } = await this.heroku.get(`/addons/${addon.name}/config/credential:${encodeURIComponent(credential)}`);
|
|
27
|
+
if (credentialConfig.length === 0) {
|
|
28
|
+
throw new Error(`Could not find credential ${credential} for database ${addon.name}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const attachment = await (0, util_1.trapConfirmationRequired)(app, confirm, (confirmed) => createAttachment(confirmed));
|
|
32
|
+
core_1.ux.action.start(`Setting ${color_1.default.cyan(attachment.name || '')} config vars and restarting ${color_1.default.magenta(app)}`);
|
|
33
|
+
const { body: releases } = await this.heroku.get(`/apps/${app}/releases`, {
|
|
34
|
+
partial: true, headers: { Range: 'version ..; max=1, order=desc' },
|
|
35
|
+
});
|
|
36
|
+
core_1.ux.action.stop(`done, v${releases[0].version}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = Attach;
|
|
40
|
+
Attach.topic = 'addons';
|
|
41
|
+
Attach.description = 'attach an existing add-on resource to an app';
|
|
42
|
+
Attach.flags = {
|
|
43
|
+
as: command_1.flags.string({ description: 'name for add-on attachment' }),
|
|
44
|
+
credential: command_1.flags.string({ description: 'credential name for scoped access to Heroku Postgres' }),
|
|
45
|
+
confirm: command_1.flags.string({ description: 'overwrite existing add-on attachment with same name' }),
|
|
46
|
+
app: command_1.flags.app({ required: true }),
|
|
47
|
+
remote: command_1.flags.remote(),
|
|
48
|
+
};
|
|
49
|
+
Attach.args = {
|
|
50
|
+
addon_name: core_1.Args.string({ required: true }),
|
|
51
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Create extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static example: string;
|
|
6
|
+
static strict: boolean;
|
|
7
|
+
static hiddenAliases: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
as: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
12
|
+
wait: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
14
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
15
|
+
};
|
|
16
|
+
static args: {
|
|
17
|
+
'service:plan': import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const color_1 = require("@heroku-cli/color");
|
|
5
|
+
const command_1 = require("@heroku-cli/command");
|
|
6
|
+
const core_1 = require("@oclif/core");
|
|
7
|
+
const notify_1 = require("../../lib/notify");
|
|
8
|
+
const create_addon_1 = require("../../lib/addons/create_addon");
|
|
9
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
10
|
+
function parseConfig(args) {
|
|
11
|
+
const config = {};
|
|
12
|
+
while (args.length > 0) {
|
|
13
|
+
let key = args.shift();
|
|
14
|
+
if (!key.startsWith('--'))
|
|
15
|
+
throw new Error(`Unexpected argument ${key}`);
|
|
16
|
+
key = key.replace(/^--/, '');
|
|
17
|
+
let val;
|
|
18
|
+
if (key.includes('=')) {
|
|
19
|
+
[key, ...val] = key.split('=');
|
|
20
|
+
val = val.join('=');
|
|
21
|
+
if (val === 'true') {
|
|
22
|
+
val = true;
|
|
23
|
+
}
|
|
24
|
+
config[key] = val;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
val = args.shift();
|
|
28
|
+
if (!val) {
|
|
29
|
+
config[key] = true;
|
|
30
|
+
}
|
|
31
|
+
else if (val.startsWith('--')) {
|
|
32
|
+
config[key] = true;
|
|
33
|
+
args.unshift(val);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
config[key] = val;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return config;
|
|
41
|
+
}
|
|
42
|
+
class Create extends command_1.Command {
|
|
43
|
+
async run() {
|
|
44
|
+
var _a;
|
|
45
|
+
const _b = await this.parse(Create), { flags, args } = _b, restParse = tslib_1.__rest(_b, ["flags", "args"]);
|
|
46
|
+
const { app, name, as, wait, confirm } = flags;
|
|
47
|
+
const servicePlan = args['service:plan'];
|
|
48
|
+
const argv = restParse.argv
|
|
49
|
+
// oclif duplicates specified args in argv
|
|
50
|
+
.filter(arg => arg !== servicePlan);
|
|
51
|
+
const config = parseConfig(argv);
|
|
52
|
+
let addon;
|
|
53
|
+
try {
|
|
54
|
+
addon = await (0, create_addon_1.default)(this.heroku, app, servicePlan, confirm, wait, { config, name, as });
|
|
55
|
+
if (wait) {
|
|
56
|
+
(0, notify_1.default)(`heroku addons:create ${addon.name}`, 'Add-on successfully provisioned');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (wait) {
|
|
61
|
+
(0, notify_1.default)(`heroku addons:create ${servicePlan}`, 'Add-on failed to provision', false);
|
|
62
|
+
}
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
await this.config.runHook('recache', { type: 'addon', app, addon });
|
|
66
|
+
// eslint-disable-next-line no-unsafe-optional-chaining
|
|
67
|
+
core_1.ux.log(`Use ${color_1.default.cyan.bold('heroku addons:docs ' + ((_a = addon === null || addon === void 0 ? void 0 : addon.addon_service) === null || _a === void 0 ? void 0 : _a.name) || '')} to view documentation`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.default = Create;
|
|
71
|
+
Create.topic = 'addons';
|
|
72
|
+
Create.description = (0, tsheredoc_1.default) `
|
|
73
|
+
Create a new add-on resource.
|
|
74
|
+
|
|
75
|
+
In order to add additional config items, please place them at the end of the command after a double-dash (--).
|
|
76
|
+
`;
|
|
77
|
+
Create.example = (0, tsheredoc_1.default) `
|
|
78
|
+
Create an add-on resource:
|
|
79
|
+
$heroku addons:create heroku-redis --app my-app
|
|
80
|
+
|
|
81
|
+
Create an add-on resource with additional config items:
|
|
82
|
+
$heroku addons:create heroku-postgresql:standard-0 --app my-app -- --fork DATABASE
|
|
83
|
+
`;
|
|
84
|
+
Create.strict = false;
|
|
85
|
+
Create.hiddenAliases = ['addons:add'];
|
|
86
|
+
Create.flags = {
|
|
87
|
+
name: command_1.flags.string({ description: 'name for the add-on resource' }),
|
|
88
|
+
as: command_1.flags.string({ description: 'name for the initial add-on attachment' }),
|
|
89
|
+
confirm: command_1.flags.string({ description: 'overwrite existing config vars or existing add-on attachments' }),
|
|
90
|
+
wait: command_1.flags.boolean({ description: 'watch add-on creation status and exit when complete' }),
|
|
91
|
+
app: command_1.flags.app({ required: true }),
|
|
92
|
+
remote: command_1.flags.remote(),
|
|
93
|
+
};
|
|
94
|
+
Create.args = {
|
|
95
|
+
'service:plan': core_1.Args.string({ required: true }),
|
|
96
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Destroy extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static strict: boolean;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static hiddenAliases: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
wait: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
13
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
static args: {
|
|
16
|
+
addonName: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const notify_1 = require("../../lib/notify");
|
|
7
|
+
const confirmCommand_1 = require("../../lib/confirmCommand");
|
|
8
|
+
const destroy_addon_1 = require("../../lib/addons/destroy_addon");
|
|
9
|
+
const resolve_1 = require("../../lib/addons/resolve");
|
|
10
|
+
const lodash_1 = require("lodash");
|
|
11
|
+
class Destroy extends command_1.Command {
|
|
12
|
+
async run() {
|
|
13
|
+
var _a, _b;
|
|
14
|
+
const { flags, argv } = await this.parse(Destroy);
|
|
15
|
+
const { app, wait, confirm } = flags;
|
|
16
|
+
const force = flags.force || process.env.HEROKU_FORCE === '1';
|
|
17
|
+
const addons = await Promise.all(argv.map(name => (0, resolve_1.resolveAddon)(this.heroku, app, name)));
|
|
18
|
+
for (const addon of addons) {
|
|
19
|
+
// prevent deletion of add-on when context.app is set but the addon is attached to a different app
|
|
20
|
+
const addonApp = (_a = addon.app) === null || _a === void 0 ? void 0 : _a.name;
|
|
21
|
+
if (app && addonApp !== app) {
|
|
22
|
+
throw new Error(`${color_1.default.yellow((_b = addon.name) !== null && _b !== void 0 ? _b : '')} is on ${color_1.default.magenta(addonApp !== null && addonApp !== void 0 ? addonApp : '')} not ${color_1.default.magenta(app)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
for (const addonApps of Object.entries((0, lodash_1.groupBy)(addons, 'app.name'))) {
|
|
26
|
+
const currentAddons = addonApps[1];
|
|
27
|
+
const appName = addonApps[0];
|
|
28
|
+
await (0, confirmCommand_1.default)(appName, confirm);
|
|
29
|
+
for (const addon of currentAddons) {
|
|
30
|
+
try {
|
|
31
|
+
await (0, destroy_addon_1.default)(this.heroku, addon, force, wait);
|
|
32
|
+
if (wait) {
|
|
33
|
+
(0, notify_1.default)(`heroku addons:destroy ${addon.name}`, 'Add-on successfully deprovisioned');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (wait) {
|
|
38
|
+
(0, notify_1.default)(`heroku addons:destroy ${addon.name}`, 'Add-on failed to deprovision', false);
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.default = Destroy;
|
|
47
|
+
Destroy.topic = 'addons';
|
|
48
|
+
Destroy.description = 'permanently destroy an add-on resource';
|
|
49
|
+
Destroy.strict = false;
|
|
50
|
+
Destroy.examples = ['addons:destroy [ADDON]... [flags]'];
|
|
51
|
+
Destroy.hiddenAliases = ['addons:remove'];
|
|
52
|
+
Destroy.flags = {
|
|
53
|
+
force: command_1.flags.boolean({ char: 'f', description: 'allow destruction even if connected to other apps' }),
|
|
54
|
+
confirm: command_1.flags.string({ char: 'c' }),
|
|
55
|
+
wait: command_1.flags.boolean({ description: 'watch add-on destruction status and exit when complete' }),
|
|
56
|
+
app: command_1.flags.app(),
|
|
57
|
+
remote: command_1.flags.remote(),
|
|
58
|
+
};
|
|
59
|
+
Destroy.args = {
|
|
60
|
+
addonName: core_1.Args.string({ required: true }),
|
|
61
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Detach extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
static args: {
|
|
10
|
+
attachment_name: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
class Detach extends command_1.Command {
|
|
7
|
+
async run() {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const { flags, args } = await this.parse(Detach);
|
|
10
|
+
const app = flags.app;
|
|
11
|
+
const { body: attachment } = await this.heroku.get(`/apps/${app}/addon-attachments/${args.attachment_name}`);
|
|
12
|
+
core_1.ux.action.start(`Detaching ${color_1.default.cyan(attachment.name || '')} to ${color_1.default.yellow(((_a = attachment.addon) === null || _a === void 0 ? void 0 : _a.name) || '')} from ${color_1.default.magenta(app)}`);
|
|
13
|
+
await this.heroku.delete(`/addon-attachments/${attachment.id}`);
|
|
14
|
+
core_1.ux.action.stop();
|
|
15
|
+
core_1.ux.action.start(`Unsetting ${color_1.default.cyan(attachment.name || '')} config vars and restarting ${color_1.default.magenta(app)}`);
|
|
16
|
+
const { body: releases } = await this.heroku.get(`/apps/${app}/releases`, {
|
|
17
|
+
partial: true, headers: { Range: 'version ..; max=1, order=desc' },
|
|
18
|
+
});
|
|
19
|
+
core_1.ux.action.stop(`done, v${((_b = releases[0]) === null || _b === void 0 ? void 0 : _b.version) || ''}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.default = Detach;
|
|
23
|
+
Detach.topic = 'addons';
|
|
24
|
+
Detach.description = 'detach an existing add-on resource from an app';
|
|
25
|
+
Detach.flags = {
|
|
26
|
+
app: command_1.flags.app({ required: true }),
|
|
27
|
+
remote: command_1.flags.remote(),
|
|
28
|
+
};
|
|
29
|
+
Detach.args = {
|
|
30
|
+
attachment_name: core_1.Args.string({ required: true }),
|
|
31
|
+
};
|