Skip to content

ci(sdk): publish awp-core-py + awp-langgraph to PyPI with matching versions #20

Description

@andyjsbell

Branch: ci/publish-python-sdk
Depends on: current main
Priority: P2 — pip install is impossible today; SDK is source-only.

Prompt:

Neither Python package is installable from PyPI. awp-core-py (the PyO3 bindings) has a wheel workflow that only targets TestPyPI behind a manual trigger; awp-langgraph (the pure-Python wrapper) has no CI at all and declares a dependency on awp-core-py>=0.1 that cannot resolve from PyPI. So pip install awp-langgraph fails, and the quickstart's one-line install is fiction. This task makes both packages publishable with matching versions and adds the CI to build, test, and release them together.

Context

  • crates/awp-python/pyproject.tomlawp-core-py, maturin backend, abi3-py39, version 0.1.0, module awp._native, python-source = python. Correct native-wheel setup.
  • python/awp-langgraph/pyproject.tomlawp-langgraph, hatchling, version 0.1.0a1, only-include = ["awp/langgraph"], depends on awp-core-py>=0.1 (pyproject.toml:38). Shares the awp namespace via pkgutil.extend_path in the core's awp/__init__.py:21.
  • Version skew across three places: core 0.1.0, langgraph 0.1.0a1, and telemetry.py:48 hardcodes 0.1.0a1 again.
  • .github/workflows/python-wheels.yml — builds abi3 wheels + sdist for awp-core-py on mac/linux/win; its only publish job (python-wheels.yml:128-149) targets TestPyPI behind workflow_dispatch + a boolean input. No git tags exist. awp-langgraph is absent from all CI (grep awp-langgraph .github → nothing).
  • python/awp-langgraph/tests/ — a real pytest suite (test_wrapper.py, test_sinks.py, test_telemetry.py) that currently never runs in CI.

Your Task

  1. Unify the version — pick a single release version (e.g. 0.1.0a1 for a first public alpha) and set it in crates/awp-python/pyproject.toml, python/awp-langgraph/pyproject.toml, and the hardcoded string at python/awp-langgraph/awp/langgraph/telemetry.py:48. Prefer reading the version from package metadata (importlib.metadata.version) in telemetry.py so there is a single source of truth going forward.
  2. Add langgraph CI — new job in .github/workflows/python-wheels.yml (or a sibling workflow): install the freshly built awp-core-py wheel, then pip install -e python/awp-langgraph, then run its pytest suite. This closes the gap where langgraph tests never run in CI.
  3. Make the dependency resolvable — ensure awp-langgraph's awp-core-py dependency pins the version being released together, and that the publish job releases awp-core-py before (or atomically with) awp-langgraph so resolution works from the index.
  4. Add a real publish path — extend the workflow with a tag-triggered (v*) job that publishes both packages to real PyPI using trusted publishing (OIDC) or a PYPI_API_TOKEN secret. Keep the existing TestPyPI job for dry runs.
  5. Fix the quickstartdocs/site/docs/quickstart.md: once publishable, the pip install awp-langgraph instruction is valid; until the first tag is pushed, keep the install-from-source note that README.md:14 already carries. (Coordinate with the docs-correction issue.)

Do Not Touch

  • The runtime source of either package (crates/awp-python/src/, python/awp-langgraph/awp/) except the single version string in telemetry.py.
  • The abi3/maturin build matrix that already works — extend it, don't rewrite it.

Verification

make check
# → lint and tests pass (includes check-python building both packages)

# Versions are unified:
grep -R "0.1.0a1\|version = " crates/awp-python/pyproject.toml python/awp-langgraph/pyproject.toml
# → both declare the same release version

# langgraph tests run under CI config locally:
make check-python
# → awp-core-py builds, awp-langgraph installs against it, both pytest suites pass

# Dry-run the build artifacts:
cd python/awp-langgraph && python -m build && ls dist/
# → an sdist and wheel are produced with the unified version

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions