Skip to content

ci: extract reusable storyboard harness for examples/seller_agent.py #815

Description

@bokelley

Background

adcp#4907 proposes bidirectional storyboard interop CI: before @adcp/sdk releases, the candidate SDK should run storyboards against Python's reference seller.

For Phase 1, the intended target is examples/seller_agent.py, because this repo already uses that file as its own storyboard reference seller. Rather than copy the Python CI shell steps into adcp-client, this repo should own a small reusable harness that both Python CI and cross-repo release-gating can call.

This is separate from making the job blocking (adcp-client-python#814). That issue owns enforcement. This issue owns centralizing the recipe.

Proposed shape

Add a script such as:

scripts/ci/run_storyboard_reference_seller.sh

The script should:

  1. Assume it is running from an adcp-client-python checkout.
  2. Install or use an adcp storyboard runner based on an explicit input.
  3. Install Python dependencies needed by examples/seller_agent.py.
  4. Boot examples/seller_agent.py on a configurable port.
  5. Run adcp storyboard run http://127.0.0.1:$PORT/mcp media_buy_seller --json --allow-http.
  6. Write a JSON result file to a configurable path.
  7. Fail non-zero when overall_status != passing.
  8. Fail non-zero when controller_detected is false, unless the repo deliberately changes that invariant.

A minimal interface could be:

ADCP_SDK_VERSION=7.10.2 \
ADCP_PORT=3001 \
STORYBOARD_RESULT_PATH=storyboard-result.json \
./scripts/ci/run_storyboard_reference_seller.sh

For adcp-client release-gating, the script should also support a candidate SDK tarball or preinstalled adcp binary, for example:

ADCP_SDK_TARBALL=/path/to/adcp-sdk.tgz \
ADCP_PORT=3001 \
./scripts/ci/run_storyboard_reference_seller.sh

Exact environment variable names are flexible; the important contract is that the caller can choose between a pinned published SDK and a candidate SDK build.

Scope

  • Extract the repeated examples/seller_agent.py storyboard setup/run/assert logic from .github/workflows/ci.yml into the script.
  • Update Python CI to call the script instead of duplicating the shell inline.
  • Keep the script local-run friendly: no GitHub-only assumptions except optional artifact paths.
  • Do not add the adcp-client cross-repo workflow here; that remains adcp-client#1916.

Acceptance

  • Python CI uses the shared script for the examples/seller_agent.py storyboard job.
  • The script supports a pinned published @adcp/sdk version.
  • The script supports a candidate/local SDK runner path, tarball, or preinstalled binary suitable for adcp-client#1916.
  • The script exits non-zero on storyboard failure.
  • The script documents its required inputs in comments or a short README section.
  • adcp-client#1916 can call this script from a tagged adcp-client-python checkout without copying the CI recipe.

References

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions