Skip to content

CDTOOL-1649: Add Python Language Support - #1811

Merged
anthony-gomez-fastly merged 14 commits into
mainfrom
posborne/python-language-support
Aug 4, 2026
Merged

CDTOOL-1649: Add Python Language Support#1811
anthony-gomez-fastly merged 14 commits into
mainfrom
posborne/python-language-support

Conversation

@posborne

@posborne posborne commented Jun 3, 2026

Copy link
Copy Markdown
Member

This change introduces support for Python on Compute to the fastly CLI. For dependencies, after exploring a few different options it was determined that this responsibility was best left to the fastly-compute-py which executes at a better point in time to correctly determine what is part of a Python services dependency graph (in addition to separation of concerns).

The way this dependency information is passed along, dependent on fastly/compute-sdk-python#89, is that the information is written directly into the WASM component as part of the fastly-compute-py build process. Other information may be injected similarly. This approach may be used by other SDKs/tooling in the future should it make sense or be used directly for "Other" languages.

Discussion is ongoing for the approach we'll follow for Python SDK starter templates but that is not included here as they are not available.

posborne added 3 commits June 3, 2026 14:11
Modify the metadata annotation step to read and preserve any fastly_data
already embedded in the Wasm binary (e.g. by language-specific build tools
like python). This allows build tools to supply package info directly while
the CLI dynamically fills in remaining fields (like cloned repository info).
Add configuration, toolchain parsing, version validation, and build scaffolding
for Python projects inside the compute environment. Host Python >= 3.11 and uv
are utilized as standard toolchain constraints.
Ensure PromptForStarterKit does not index out-of-bounds when there are no
configured starter kits for a language. Instead, prompt the user for a
template git URL directly, or fail gracefully if non-interactive.
@posborne
posborne requested a review from a team as a code owner June 3, 2026 19:25
posborne added 2 commits June 3, 2026 16:32
Use 0600 permissions for mock WASM files and add gosec ignore directives for
mock executable creation.
Comment thread CHANGELOG.md Outdated
@anthony-gomez-fastly

Copy link
Copy Markdown
Member

is it worth writing any tests in pkg/commands/compute/build_test.go for python?

Co-authored-by: Anthony Gomez <anthony.gomez@fastly.com>
@posborne

posborne commented Jun 4, 2026

Copy link
Copy Markdown
Member Author

is it worth writing any tests in pkg/commands/compute/build_test.go for python?

Yeah, would definitely be worthwhile I think. I'll work on getting that added.

I also slapped a "DO NOT MERGE YET" label on this for now until the dust settles on our approach for python starter kits and fastly/compute-sdk-python#89. I think this could merge without that PR but I'll want to verify that first.

posborne added 2 commits June 5, 2026 13:04
Introduce TestBuildPython to build_test.go covering:
- Handling missing fastly.toml manifest
- Handling of typical build-time failures
- Dependency checks
- Basic python example
@kpfleming kpfleming changed the title Add Python Language Support CDTOOL-1649: Add Python Language Support Jun 15, 2026
Comment thread CHANGELOG.md Outdated
Comment thread pkg/commands/compute/init.go Outdated
Comment thread pkg/commands/compute/build.go Outdated
Comment thread pkg/commands/compute/language_python.go Outdated
kailan added 4 commits August 4, 2026 16:04
The entry was under the already-released v15.2.0 section. Also aligns
the PR link formatting with the surrounding entries.
text.Input takes variadic validators, so omitting the argument is the
way to skip validation.
Seeding the whole DataCollection from the binary let a build tool's
script_info, machine_info and build_info override fields the CLI owns.
The CLI now always writes those itself and reads back only the package
list, which is the one thing it cannot collect for Python.

The read is also gated on the language reporting no dependencies of its
own, so the extra `wasm-tools metadata show` subprocess no longer runs
for Rust, Go and JavaScript.
Silently falling back to a hardcoded ">= 3.11" hid a broken or outdated
CLI config and could validate against a constraint we never shipped.
@kailan

kailan commented Aug 4, 2026

Copy link
Copy Markdown
Member

Review feedback is addressed across four commits (3bc678f, c97db52, d360125, d54cbf2). Verified end-to-end by building the CLI and running compute build against a real Python project — the missing-constraint path produces the new error and remediation, and the happy path builds pkg/test.tar.gz with correct merged metadata.

Three things worth flagging before this merges:

1. fastly-compute-py dependency metadata is merged but not released. compute-sdk-python#89 landed on main on 2026-06-05, but the latest tag/release is still v0.1.2 (2026-06-03), and PyPI fastly-compute tops out at 0.1.2. There are 5 unreleased commits on main ahead of that tag.

I confirmed this empirically: running uv run fastly-compute-py build against the pinned fastly-compute==0.1.2 in our testdata produces a producers section containing only language, processed-by and sdk — no fastly_data key. So the package_info read-back path in AnnotateWasmBinaryLong is currently dead code against every released version of the build tool. It's correct, just unexercised until an SDK release goes out.

The good news is the shapes line up: dependencies.rs serialises {"package_info":{"packages":{...}}}, and lib.rs pushes it as a processed-by / fastly_data pair — exactly what readExistingPackageInfo parses. So this should light up on its own once the SDK ships, no CLI change needed. Might be worth cutting that release first so we can validate the merge against a real artifact rather than only the mocked unit test.

2. The embedded pkg/config/config.toml has no [language.python] section. Now that a missing toolchain_constraint is a hard error, a stock config makes every Python build fail. This is the same state cpp is in — scripts/config.sh copies .fastly/config.toml over it at release time — so it should resolve itself through the normal release path. Calling it out because the new error makes the consequence louder than it was for cpp, and it's worth confirming the release script covers it.

3. build_test.go tests for PythonTestBuildPython already exists on the branch (gated behind TEST_COMPUTE_BUILD / TEST_COMPUTE_BUILD_PYTHON), so I believe the earlier question about test coverage is resolved. Flagging in case you wanted something broader than what's there.

@anthony-gomez-fastly anthony-gomez-fastly left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, thanks you two!

@anthony-gomez-fastly
anthony-gomez-fastly enabled auto-merge (squash) August 4, 2026 15:19
@anthony-gomez-fastly
anthony-gomez-fastly merged commit f975ca4 into main Aug 4, 2026
19 of 23 checks passed
@anthony-gomez-fastly
anthony-gomez-fastly deleted the posborne/python-language-support branch August 4, 2026 15:25
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