Skip to content

fix(cli): add non-TTY guards and fix exit codes in marketplace commands#15158

Merged
tonypan2 merged 1 commit intomainfrom
tonypan/fix-non-tty-yes-guard
Feb 20, 2026
Merged

fix(cli): add non-TTY guards and fix exit codes in marketplace commands#15158
tonypan2 merged 1 commit intomainfrom
tonypan/fix-non-tty-yes-guard

Conversation

@tonypan2
Copy link
Copy Markdown
Contributor

@tonypan2 tonypan2 commented Feb 19, 2026

Summary

  • 4 commands had --yes flag but no isTTY guard, causing them to hang in non-TTY/CI without --yes
  • Now they error with guidance: "Confirmation required. Use --yes to skip the confirmation prompt."
  • Affected: integration remove, integration-resource remove, integration-resource disconnect, integration-resource create-threshold
  • 3 commands returned exit code 0 after printing an error when the target was not found — now correctly return 1
  • Added missing telemetry tracking for integration-resource --help

Test plan

Unit Tests

$ cd packages/cli && pnpm vitest run test/unit/commands/integration-resource/disconnect.test.ts test/unit/commands/integration-resource/remove.test.ts test/unit/commands/integration/remove.test.ts test/unit/commands/integration-resource/create-threshold.test.ts

 ✓ test/unit/commands/integration/remove.test.ts  (13 tests)
 ✓ test/unit/commands/integration-resource/remove.test.ts  (17 tests)
 ✓ test/unit/commands/integration-resource/create-threshold.test.ts  (27 tests)
 ✓ test/unit/commands/integration-resource/disconnect.test.ts  (17 tests)

 Test Files  4 passed (4)
      Tests  74 passed (74)

Manual Testing

Non-TTY guard (without --yes):

Command Result Exit
vc integration remove neon Error: Confirmation required. Use --yes to skip the confirmation prompt. 1
vc ir remove happy-test-install Error: Confirmation required. Use --yes to skip the confirmation prompt. 1
vc ir disconnect braintrust-blue-school cli-test Error: Confirmation required. Use --yes to skip the confirmation prompt. 1
vc ir disconnect braintrust-blue-school --all Error: Confirmation required. Use --yes to skip the confirmation prompt. 1

--yes bypass (non-TTY):

Command Result Exit
vc integration remove neon --yes Reached API call (403: has resources) 1
vc ir disconnect braintrust-blue-school cli-test --yes Success! Disconnected cli-test from braintrust-blue-school 0
vc ir remove braintrust-blue-school --yes Success! braintrust-blue-school successfully deleted. 0

Not-found exit code fix:

Command Result Exit
vc integration remove nonexistent Error: No integration nonexistent found. 1
vc ir remove nonexistent Error: No resource nonexistent found. 1
vc ir disconnect nonexistent Error: No resource nonexistent found. 1

Code Paths Covered

Path Tested by
Non-TTY + no --yes → error Manual + unit (all 4 commands)
Non-TTY + --yes → bypass guard Manual (3 commands) + unit (all 4)
Not-found → exit 1 Manual + unit (3 commands)
create-threshold non-TTY guard Unit only (no prepayment resources available)

🤖 Generated with Claude Code

Note

Low Risk Change

This PR adds defensive non-TTY guards that require explicit --yes flag for confirmation prompts and fixes exit codes to return 1 on errors instead of 0, all of which are bug fixes that tighten CLI behavior.

  • Adds isTTY guards requiring --yes flag in non-interactive environments
  • Fixes exit codes from 0 to 1 when resources not found
  • Adds missing telemetry tracking for integration-resource --help

Risk assessment for commit 4ab4792.

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Feb 19, 2026

🦋 Changeset detected

Latest commit: 4ab4792

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
vercel Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 19, 2026

📦 CLI Tarball Ready

The Vercel CLI tarball for this PR is now available!

Quick Test

You can test this PR's CLI directly by running:

npx https://vercel-5ydae1u77.vercel.sh/tarballs/vercel.tgz --help

Use in vercel.json

To use this CLI version in your project builds, add to your vercel.json:

{
  "build": {
    "env": {
      "VERCEL_CLI_VERSION": "vercel@https://vercel-5ydae1u77.vercel.sh/tarballs/vercel.tgz"
    }
  }
}

Python Runtime Wheel

A Python runtime wheel was also built for this PR.
To use in your Python project builds, also set this environment variable:

VERCEL_RUNTIME_PYTHON="vercel-runtime @ https://vercel-5ydae1u77.vercel.sh/tarballs/vercel_runtime-0.6.0.dev1771611395+4ab4792-py3-none-any.whl"

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 19, 2026

🧪 Unit Test Strategy

Comparing: 8d81bf94ab4792 (view diff)

Strategy: Affected packages only

✅ Only testing packages that have been modified or depend on modified packages.

Affected packages - 1 (3%)
  1. vercel
Unaffected packages - 39 (98%)
  1. @vercel-internals/get-package-json
  2. @vercel/backends
  3. @vercel/build-utils
  4. @vercel/cervel
  5. @vercel/cli-auth
  6. @vercel/client
  7. @vercel/config
  8. @vercel/detect-agent
  9. @vercel/edge
  10. @vercel/elysia
  11. @vercel/error-utils
  12. @vercel/express
  13. @vercel/fastify
  14. @vercel/firewall
  15. @vercel/frameworks
  16. @vercel/fs-detectors
  17. @vercel/functions
  18. @vercel/gatsby-plugin-vercel-builder
  19. @vercel/go
  20. @vercel/h3
  21. @vercel/hono
  22. @vercel/hydrogen
  23. @vercel/koa
  24. @vercel/nestjs
  25. @vercel/next
  26. @vercel/node
  27. @vercel/oidc
  28. @vercel/oidc-aws-credentials-provider
  29. @vercel/python
  30. @vercel/python-analysis
  31. @vercel/redwood
  32. @vercel/related-projects
  33. @vercel/remix-builder
  34. @vercel/routing-utils
  35. @vercel/ruby
  36. @vercel/rust
  37. @vercel/static-build
  38. @vercel/static-config
  39. examples

Results

  • Unit tests: Only affected packages will run unit tests
  • E2E tests: Running in parallel via E2E Tests workflow
  • Type checks: Only affected packages will run type checks

This comment is automatically generated based on the affected testing strategy

@tonypan2 tonypan2 force-pushed the tonypan/fix-non-tty-yes-guard branch from b16d962 to 7e8cc7a Compare February 19, 2026 23:51
@tonypan2 tonypan2 changed the title fix(cli): add non-TTY guard for confirmation prompts in marketplace commands fix(cli): add non-TTY guards and fix exit codes in marketplace commands Feb 20, 2026
…ommands

Commands with --yes flag now error with guidance instead of hanging
when stdin is not a TTY and --yes is not passed.
@tonypan2 tonypan2 force-pushed the tonypan/fix-non-tty-yes-guard branch from 7e8cc7a to 4ab4792 Compare February 20, 2026 18:16
@tonypan2 tonypan2 marked this pull request as ready for review February 20, 2026 18:21
@tonypan2 tonypan2 requested review from a team as code owners February 20, 2026 18:21
@tonypan2 tonypan2 merged commit eb1779d into main Feb 20, 2026
225 of 227 checks passed
@tonypan2 tonypan2 deleted the tonypan/fix-non-tty-yes-guard branch February 20, 2026 23:28
brookemosby pushed a commit that referenced this pull request Feb 23, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @vercel/build-utils@13.5.0

### Minor Changes

- Add django experimental framework.
([#15196](#15196))

### Patch Changes

- Updated dependencies
\[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/python-analysis@0.7.0

## @vercel/frameworks@3.19.0

### Minor Changes

- Add django experimental framework.
([#15196](#15196))

## @vercel/python@6.16.0

### Minor Changes

- [python] add support for running generic ASGI/WSGI applications to vc
dev ([#15174](#15174))

### Patch Changes

- Updated dependencies
\[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/python-analysis@0.7.0

## @vercel/python-analysis@0.7.0

### Minor Changes

- Add django experimental framework.
([#15196](#15196))

## @vercel/backends@0.0.37

### Patch Changes

- Updated dependencies
\[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/build-utils@13.5.0

## @vercel/cervel@0.0.24

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/backends@0.0.37

## vercel@50.22.2

### Patch Changes

- fix(cli): add `integration-resource` command to `vc --help` output
([#15191](#15191))

- fix(cli): filter empty strings from trailing commas in array metadata
([#15163](#15163))

- fix(cli): add non-TTY guards and fix exit codes in marketplace
commands ([#15158](#15158))

- Adding in a non-interactive flag for env command
([#14912](#14912))

- fix(cli): unify teamId scoping for all marketplace integration
commands ([#15183](#15183))

- Updated dependencies
\[[`3c4aff4acbfa603705556d145236b8a9ef106331`](3c4aff4),
[`984d44875f959058f5d13fea27373785b1d66b6f`](984d448),
[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/next@4.15.32
    -   @vercel/python@6.16.0
    -   @vercel/build-utils@13.5.0
    -   @vercel/backends@0.0.37
    -   @vercel/elysia@0.1.40
    -   @vercel/express@0.1.49
    -   @vercel/fastify@0.1.43
    -   @vercel/go@3.4.1
    -   @vercel/h3@0.1.49
    -   @vercel/hono@0.2.43
    -   @vercel/hydrogen@1.3.5
    -   @vercel/koa@0.1.23
    -   @vercel/nestjs@0.2.44
    -   @vercel/node@5.6.7
    -   @vercel/redwood@2.4.9
    -   @vercel/remix-builder@5.5.10
    -   @vercel/ruby@2.3.1
    -   @vercel/rust@1.0.5
    -   @vercel/static-build@2.8.41

## @vercel/client@17.2.46

### Patch Changes

- Updated dependencies
\[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/build-utils@13.5.0

## @vercel/elysia@0.1.40

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.7

## @vercel/express@0.1.49

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.7
    -   @vercel/cervel@0.0.24

## @vercel/fastify@0.1.43

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.7

## @vercel/fs-detectors@5.8.10

### Patch Changes

- Updated dependencies
\[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/frameworks@3.19.0

## @vercel/gatsby-plugin-vercel-builder@2.0.139

### Patch Changes

- Updated dependencies
\[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/build-utils@13.5.0

## @vercel/h3@0.1.49

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.7

## @vercel/hono@0.2.43

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.7

## @vercel/koa@0.1.23

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.7

## @vercel/nestjs@0.2.44

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.7

## @vercel/next@4.15.32

### Patch Changes

- Revert per function builder support
([#15209](#15209))

## @vercel/node@5.6.7

### Patch Changes

- Updated dependencies
\[[`cb79f6f8080fddd3673a8911566085e0265b060b`](cb79f6f)]:
    -   @vercel/build-utils@13.5.0

## @vercel/static-build@2.8.41

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.139

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant