Skip to content

ci: attach a PEP 751 pylock.toml to each release - #1467

Merged
Aaron ("AJ") Steers (aaronsteers) merged 1 commit into
release-candidate/v1from
devin/1794504582-release-pylock
Nov 12, 2026
Merged

Aaron ("AJ") Steers (aaronsteers) merged 1 commit into
release-candidate/v1from
devin/1794504582-release-pylock

Conversation

@aaronsteers

@aaronsteers Aaron ("AJ") Steers (aaronsteers) commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

Overview

TL;DR: Every PyAirbyte release now carries a PEP 751 pylock.toml asset, exported from uv.lock, so the Cloud MCP image can install exactly the dependency set CI tested instead of resolving one at build time.

Follow-up from the Cloud MCP sign-in outage postmortem: the production image resolved FastMCP 4.2.0a3 because it resolved dependencies fresh with --prerelease=allow. The image side (installing this lock plus the wheel with --no-deps) is in the companion platform PR, linked below.

Changes

  • release_drafter.yml: after uv build, exports dist/pylock.toml and attaches it to the draft release next to the wheel and sdist:
    uv export --locked --format pylock.toml --no-dev --no-emit-project --extra datadog --output-file dist/pylock.toml
    --locked fails the release if uv.lock is out of date with pyproject.toml. --extra datadog includes ddtrace, which the image runs under. --no-emit-project leaves PyAirbyte itself out, since the image installs the released wheel separately.
  • pypi_publish.yml: removes pylock.toml from dist/ after downloading release assets, because the PyPI upload rejects files that are not distributions.

Review Spotlight

  • The lock is generated at the release commit by the same job that builds the wheel, so the attached wheel and the attached lock always describe the same commit.

Risks

  • Prerelease builds from workflow_dispatch in pypi_publish.yml build from source and do not create a GitHub release, so they have no pylock.toml. Production deploys only run for published releases, so they are not affected.

Test plan

  • Ran the export command against release-candidate/v1: it produced a valid lock-version = "1.0" file, including fastmcp 4.1.6 and ddtrace 4.15.2.
  • Built the Cloud MCP image from the companion PR with that file and airbyte==1.0.0-rc.43: the lock installed all 177 packages, the --no-deps wheel install resolved nothing else, and airbyte.mcp.http_main imports.
  • actionlint passes on both workflows.

Link to Devin session: https://app.devin.ai/sessions/6e2ae2a988f74dd9af69b2e8eaadd141
Link to Bot: https://app.devin.ai/org/airbytehq/bots/9b3f0480dd6148c9aba17702f8349056
Open in Devin Desktop: https://app.devin.ai/desktop/session/6e2ae2a988f74dd9af69b2e8eaadd141?variant=devin

Implemented in “Pin Cloud MCP image to release pylock.toml”Devin Review

Co-Authored-By: AJ Steers <aj@airbyte.io>
@devin-ai-integration

Copy link
Copy Markdown
Contributor

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@github-actions

Copy link
Copy Markdown

👋 Greetings, Airbyte Team Member!

Here are some helpful tips and reminders for your convenience.

💡 Show Tips and Tricks

Testing This PyAirbyte Version

You can test this version of PyAirbyte using the following:

# Run PyAirbyte CLI from this branch:
uvx --from 'git+https://github.com/airbytehq/PyAirbyte.git@devin/1794504582-release-pylock' pyairbyte --help

# Install PyAirbyte from this branch for development:
pip install 'git+https://github.com/airbytehq/PyAirbyte.git@devin/1794504582-release-pylock'

PR Slash Commands

Airbyte Maintainers can execute the following slash commands on your PR:

  • /fix-pr - Fixes most formatting and linting issues
  • /uv-lock - Updates uv.lock file
  • /test-pr - Runs tests with the updated PyAirbyte
  • /prerelease - Builds and publishes a prerelease version to PyPI
  • /evals - Runs the Cloud MCP evals that use the MCP tools this PR changed (/evals full=true runs the full suite)
📚 Show Repo Guidance

Helpful Resources

Community Support

Questions? Join the #pyairbyte channel in our Slack workspace.

📝 Edit this welcome message.

@aaronsteers
Aaron ("AJ") Steers (aaronsteers) marked this pull request as ready for review November 12, 2026 17:32
Copilot AI balanced review requested due to automatic review settings November 12, 2026 17:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

No active review issues are reported for the release-lock-file changes.

No open issues 🎉

What changed in this PR

Adds a PEP 751 dependency lock file to PyAirbyte releases so the Cloud MCP image can install release-pinned dependencies instead of resolving them at build time.

Changes:

  • Exports dist/pylock.toml from uv.lock, including the datadog extra and excluding PyAirbyte itself, with stale-lock validation.
  • Attaches the lock file alongside the release wheel and source distribution.
  • Removes the downloaded lock file before uploading distributions to PyPI.
File Description
.github/​workflows/​release_drafter.yml Exports and attaches pylock.toml to the draft release.
.github/​workflows/​pypi_publish.yml Removes pylock.toml from release assets staged for PyPI upload.

Review effort: Balanced

@github-code-quality

github-code-quality Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Code coverage overview

Languages: Python

Python / code-coverage/pytest-no-creds

release-candidate/v1 d9f652f devin/1794504582-rel... d0986c7 +/-
65% 81% +16%
View coverage of the 10 most impacted files.
File release-candidate/v1 d9f652f devin/1794504582-rel... d0986c7 +/-
airbyte/_util/api_util.py 36% 68% +32%
airbyte/mcp/cloud.py 52% 87% +35%
airbyte/cloud/connectors.py 34% 81% +47%
airbyte/cloud/connections.py 26% 76% +50%
airbyte/mcp/_datadog.py 0% 50% +50%
airbyte/mcp/_telemetry.py 0% 94% +94%
airbyte/cloud/c...lder/project.py 0% 94% +94%
airbyte/_direct...ctors/models.py 0% 95% +95%
airbyte/mcp/_sso_auth.py 0% 96% +96%
airbyte/cloud/models.py 0% 96% +96%

Python / code-coverage/pytest

release-candidate/v1 d9f652f devin/1794504582-rel... d0986c7 +/-
71% 83% +12%
View coverage of the 10 most impacted files.
File release-candidate/v1 d9f652f devin/1794504582-rel... d0986c7 +/-
airbyte/cloud/connectors.py 51% 84% +33%
airbyte/mcp/cloud.py 52% 87% +35%
airbyte/cloud/connections.py 34% 78% +44%
airbyte/mcp/_datadog.py 0% 50% +50%
airbyte/mcp/_telemetry.py 0% 94% +94%
airbyte/cloud/c...lder/project.py 0% 94% +94%
airbyte/_direct...ctors/models.py 0% 95% +95%
airbyte/mcp/_sso_auth.py 0% 96% +96%
airbyte/cloud/models.py 0% 96% +96%
airbyte/mcp/int...nc_status_ui.py 0% 97% +97%

Python / code-coverage/pytest-unit

release-candidate/v1 devin/1794504582-rel... d0986c7 +/-
— 78% —

Line coverage data for the release-candidate/v1 branch is not yet available.

View coverage of the 10 most covered files.
File release-candidate/v1 devin/1794504582-rel... d0986c7 +/-
airbyte/mcp/_sso_auth.py — 96% —
airbyte/cloud/models.py — 96% —
airbyte/_direct...ctors/models.py — 95% —
airbyte/cloud/client.py — 91% —
airbyte/mcp/cloud.py — 87% —
airbyte/cloud/connectors.py — 81% —
airbyte/progress.py — 80% —
airbyte/cloud/connections.py — 76% —
airbyte/_util/api_util.py — 68% —
airbyte/shared/...ql_processor.py — 68% —

ℹ️ Calculations represent line coverage. Results may change as calculations are updated.


Updated November 12, 2026 17:46 UTC

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Devin Review

🟢 Devin Review found nothing to fix · View findings

@aaronsteers
Aaron ("AJ") Steers (aaronsteers) merged commit f471fc9 into release-candidate/v1 Nov 12, 2026
36 checks passed
@aaronsteers
Aaron ("AJ") Steers (aaronsteers) deleted the devin/1794504582-release-pylock branch November 12, 2026 17:51
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.

2 participants