Skip to content

[ci:release] Integrate Python runtime release properly#15033

Merged
elprans merged 1 commit intomainfrom
elprans/integrate-python-runtime-publication-better
Feb 13, 2026
Merged

[ci:release] Integrate Python runtime release properly#15033
elprans merged 1 commit intomainfrom
elprans/integrate-python-runtime-publication-better

Conversation

@elprans
Copy link
Copy Markdown
Contributor

@elprans elprans commented Feb 12, 2026

Currently the vercel-runtime Python package gets pushed to PyPI after
all e2e and npm publishing was done via workflow dispatch to
release-python-runtime.yml. This is problematic because the Python
builder pins the runtime version exactly and would fail to find the
yet-unreleased package version on PyPI when running e2e tests.

A simple fix would be to publish to PyPI before e2e, but that defeats
the purpose of pre-release testing. Instead, here we follow the
JavaScript package procedure where we push artifacts to Vercel and test
on those. For Python this means that we inject VERCEL_RUNTIME_PYTHON
pointing to vercel-runtime @ ${{ dplUrl }}/tarballs/vercel-runtime.whl
alongside VERCEL_CLI_VERSION.

The remaining issue is to make sure that PyPI publication succeeds
before we proceed with the main CLI publication, otherwise we will
release a broken build. Achieve this by moving the PyPI publication step
into ci:publish so it runs before pnpm publish.

Specific changes:

  • Add python/vercel-runtime/publish.mjs (version check, build, smoke
    test, publish)
  • Add utils/publish-runtimes.mjs which gets called from ci:publish
    for dispatch (mostly just generalizing non-JS publication here).
  • Remove async workflow_dispatch trigger and push trigger from
    release-python-runtime.yml (workflow_dispatch kept for now for
    manual publication if we need it).
  • api/_lib/script/build.ts learns to scan and copy
    python/**/dist/*.whl so they are accessible in pre-release e2e.

Warning

High Risk Change

This PR modifies CI/CD release workflows and publishing scripts to integrate Python runtime publication before npm publish, which is infrastructure/deployment configuration affecting the release process.

  • Modifies ci:publish script to run Python runtime publish before npm publish
  • Changes release workflow to add environment: release and Python setup steps
  • Adds new publish scripts for PyPI publication with version validation

Risk assessment for commit 478d73d.

@elprans elprans requested review from a team and ijjk as code owners February 12, 2026 19:17
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Feb 12, 2026

🦋 Changeset detected

Latest commit: 478d73d

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

This PR includes changesets to release 1 package
Name Type
@vercel/python-runtime 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 12, 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-ppgufls2o.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-ppgufls2o.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-ppgufls2o.vercel.sh/tarballs/vercel_runtime-0.5.0.dev1771009293+478d73d-py3-none-any.whl"

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 12, 2026

🧪 Unit Test Strategy

Comparing: 93697ea478d73d (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

Currently the vercel-runtime Python package gets pushed to PyPI _after_
all e2e and npm publishing was done via workflow dispatch to
`release-python-runtime.yml`.  This is problematic because the Python
builder pins the runtime version _exactly_ and would fail to find the
yet-unreleased package version on PyPI when running e2e tests.

A simple fix would be to publish to PyPI before e2e, but that defeats
the purpose of pre-release testing.  Instead, here we follow the
JavaScript package procedure where we push artifacts to Vercel and test
on those.  For Python this means that we inject `VERCEL_RUNTIME_PYTHON`
pointing to `vercel-runtime @ ${{ dplUrl }}/tarballs/vercel-runtime.whl`
alongside `VERCEL_CLI_VERSION`.

The remaining issue is to make sure that PyPI publication succeeds
_before_ we proceed with the main CLI publication, otherwise we will
release a broken build.  Achieve this by moving the PyPI publication step
into `ci:publish` so it runs before `pnpm publish`.

Specific changes:

  - Add `python/vercel-runtime/publish.mjs` (version check, build, smoke
    test, publish)
  - Add `utils/publish-runtimes.mjs` which gets called from `ci:publish`
    for dispatch (mostly just generalizing non-JS publication here).
  - Remove async `workflow_dispatch` trigger and `push` trigger from
    `release-python-runtime.yml` (`workflow_dispatch` kept for now for
    manual publication if we need it).
  - `api/_lib/script/build.ts` learns to scan and copy
    `python/**/dist/*.whl` so they are accessible in pre-release e2e.
  - tarball comment amended to include `VERCEL_RUNTIME_PYTHON` if
    Python runtime changed since last release.
@elprans elprans force-pushed the elprans/integrate-python-runtime-publication-better branch from 2ced398 to 478d73d Compare February 13, 2026 19:01
@elprans elprans enabled auto-merge (squash) February 13, 2026 19:39
@elprans elprans merged commit 331328d into main Feb 13, 2026
526 of 534 checks passed
@elprans elprans deleted the elprans/integrate-python-runtime-publication-better branch February 13, 2026 20:03
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>
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