Skip to content

Add experimental manual deployment#14857

Merged
javivelasco merged 8 commits intomainfrom
add-manual-deploy
Feb 13, 2026
Merged

Add experimental manual deployment#14857
javivelasco merged 8 commits intomainfrom
add-manual-deploy

Conversation

@javivelasco
Copy link
Copy Markdown
Member

@javivelasco javivelasco commented Feb 4, 2026

Add experimental support for manual (two-phase) deployments via two new hidden subcommands on vercel deploy:

  • vercel deploy init — Creates a deployment in "manual" mode without uploading build outputs. The deployment is initialized on the server and returns a deployment ID.
  • vercel deploy continue --id dpl_xxx — Uploads the .vercel/output directory (from a local vercel build) to an existing manual deployment and triggers the server-side build/ready flow.

This enables workflows where the user controls the build step locally and then pushes outputs to an existing deployment, useful for CI pipelines and monorepo setups where build orchestration happens outside Vercel.

On the @vercel/client side, the uploadFiles function was extracted from the monolithic upload generator into a standalone reusable export, and a new continueDeployment async generator handles the continue flow (hash files, upload missing ones, POST to /deployments/:id/continue, poll for ready state). A missing semaphore release on abort was also fixed.

Both subcommands are hidden/experimental for now.

@javivelasco javivelasco self-assigned this Feb 4, 2026
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Feb 4, 2026

🦋 Changeset detected

Latest commit: 6226d0e

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

This PR includes changesets to release 2 packages
Name Type
vercel Patch
@vercel/client 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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 4, 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-7zewa8h8t.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-7zewa8h8t.vercel.sh/tarballs/vercel.tgz"
    }
  }
}

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 4, 2026

🧪 Unit Test Strategy

Comparing: ef1be641141270 (view diff)

Strategy: Code changed outside of a package - running all unit tests

⚠️ All unit tests will run because global code changes could impact all packages.

Affected packages - 40 (100%)
  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
  40. vercel

Results

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

This comment is automatically generated based on the affected testing strategy

Copy link
Copy Markdown
Member

@tknickman tknickman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude having a great time with oauth. Better review coming

@javivelasco javivelasco marked this pull request as ready for review February 12, 2026 15:28
@javivelasco javivelasco requested review from a team as code owners February 12, 2026 15:28
@javivelasco javivelasco enabled auto-merge (squash) February 13, 2026 17:58
@javivelasco javivelasco merged commit 93697ea into main Feb 13, 2026
12 of 14 checks passed
@javivelasco javivelasco deleted the add-manual-deploy branch February 13, 2026 18:05
mehulkar pushed a commit that referenced this pull request Feb 16, 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 publish to npm
yourself or [setup this action to publish
automatically](https://github.com/changesets/action#with-publishing). 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@50.18.0

### Minor Changes

- Support easier auth from cursor / claude
([#15050](#15050))

### Patch Changes

- non-interactive mode for link
([#14884](#14884))

- Add experimental manual deployment support
([#14857](#14857))

- Fix `integration remove`, `integration balance`, and `integration
open` commands failing to find integrations by explicitly passing
`teamId` to the configurations API
([#15054](#15054))

- Require slash syntax for multi-product integrations in non-TTY mode,
keep interactive product selector for TTY
([#15047](#15047))

- Move builders back into bundle
([#15059](#15059))

- Updated dependencies
\[[`463395162462988e7d3276781d2fdff0685e225b`](4633951),
[`6e58410ff849c281735c6acae59b3b0e86136f15`](6e58410)]:
    -   @vercel/go@3.4.1
    -   @vercel/ruby@2.3.1
    -   @vercel/python@6.13.0
    -   @vercel/static-build@2.8.37

## @vercel/python@6.13.0

### Minor Changes

- Add runtime dependency install to support larger Python functions
([#14976](#14976))

This adds logic to calculate the total size of a lambda at build time
and offload dependencies
to a \_runtime_requirements.txt file so they can be installed at runtime
by uv. This allows us to
    deploy functions up to the total size of the /tmp folder.

## @vercel/client@17.2.42

### Patch Changes

- Add experimental manual deployment support
([#14857](#14857))

## @vercel/fs-detectors@5.8.7

### Patch Changes

- [services] infer workspace from manifest: when workspace is not
explicitly configured, infer from nearest manifest to entrypoint
([#14986](#14986))

## @vercel/go@3.4.1

### Patch Changes

- Forward Go and Ruby dev server output through `startDevServer`
stdout/stderr callbacks so service logs are correctly prefixed in
multi-service `vercel dev`.
([#14989](#14989))

## @vercel/ruby@2.3.1

### Patch Changes

- Forward Go and Ruby dev server output through `startDevServer`
stdout/stderr callbacks so service logs are correctly prefixed in
multi-service `vercel dev`.
([#14989](#14989))

## @vercel/python-runtime@0.4.1

### Patch Changes

- fix PyPI publication integration in release flow
([#15033](#15033))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
ofhouse added a commit that referenced this pull request Mar 25, 2026
## Context

`vercel deploy continue` is missing the `--archive` flag even though it
shares the same semantics as deploy. Additionally,
`.vercel/output/provision.json` must be sent as a separate file (not
bundled into the tgz archive) so the API can inspect it before the build
starts.

## Changes

- Add `--archive` support to `deploy continue`, reuse shared tarball
packaging logic in the client, and add unit coverage. Deprecated
`split-tgz` remains only on the normal deploy path.
- When using `--archive=tgz` with `deploy continue`, `provision.json` is
excluded from the tarball and sent as a standalone file alongside the
archive chunks in the request body.
- Extract `createTgzFiles` into a shared `archive.ts` utility with an
optional `exclude` parameter, used by both `createDeployment` and
`continueDeployment`.

## References

- Related to #14857
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.

3 participants