Skip to content

feat(e2e): export SDK e2e suites as versioned release bundles#295

Open
ling-senpeng13 wants to merge 6 commits into
mainfrom
export-sdk-e2e-release-bundles
Open

feat(e2e): export SDK e2e suites as versioned release bundles#295
ling-senpeng13 wants to merge 6 commits into
mainfrom
export-sdk-e2e-release-bundles

Conversation

@ling-senpeng13

@ling-senpeng13 ling-senpeng13 commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

What

Exports each SDK's end-to-end suite as a self-contained, version-stamped tarball attached to every GitHub release, so downstream repos (e.g. orkes-io/orkes-conductor) can pin the e2e suite to the exact agentspan release they run against — no copying or vendoring of test code.

A single release vX.Y.Z already fans out to every SDK's publish workflow at that one version, so the e2e bundle and the SDK it tests always match. Each bundle pins the published SDK at the release version and carries only test sources + support files + a generated manifest/runner/README (never the SDK source):

SDK Bundle Pins
Python agentspan-sdk-e2e-python-<v>.tar.gz PyPI conductor-agent-sdk==<v>
TypeScript agentspan-sdk-e2e-typescript-<v>.tar.gz npm @conductor-oss/conductor-agent-sdk@<v>
Java agentspan-sdk-e2e-java-<v>.tar.gz Maven org.conductoross.conductor:conductor-agent-sdk:<v>
C# agentspan-sdk-e2e-csharp-<v>.tar.gz NuGet conductor-agent-sdk <v>

How it ships

.github/workflows/release-sdk-e2e-tests.yml runs on release: created (+ manual dispatch): package → validate → attach tarballs + .sha256 to the vX.Y.Z release.

Files

  • e2e/release/package-sdk-e2e.sh — builds the bundles for a version (--sdk, --out)
  • e2e/release/test_package_sdk_e2e.sh — static validator (structure, file-count parity, version pins, manifest well-formedness, standalone-config wiring); runs in CI
  • e2e/release/smoke_resolve.sh — live resolution smoke test against a published version
  • e2e/release/README.md — maintainer + downstream consumption docs
  • .github/workflows/release-sdk-e2e-tests.yml — release packaging + asset upload
  • .gitignore — ignores e2e/release/dist/ build output

Consuming (downstream)

V=0.4.0; SDK=java
curl -fsSL -o e2e.tar.gz \
  "https://github.com/agentspan-ai/agentspan/releases/download/v$V/agentspan-sdk-e2e-$SDK-$V.tar.gz"
tar xzf e2e.tar.gz && cd "agentspan-sdk-e2e-$SDK-$V"
AGENTSPAN_SERVER_URL=http://localhost:6767/api ./run.sh   # against a running v$V server

Testing

  • Static validator: green on all 4 bundles. Proven valid via negative tests (broke the Python pin and re-added the TS src alias → both correctly failed, then passed once restored).
  • Live resolution smoke against the published 0.3.0 packages:
    • Python ✅ — SDK + deps install into a py3.12 venv; 134 tests across 23 files collected
    • TypeScript ✅ — npm install + vitest list collects the suite
    • C# ✅ — NuGet conductor-agent-sdk 0.3.0 restores on .NET 10
    • Java ✅ — Maven pin resolves; tests compile (gradle testClasses)

Not yet exercised: full e2e execution (needs a live vX.Y.Z server + LLM keys). The published-0.3.0 smoke is the closest proxy and is a repeatable script for any release.

🤖 Generated with Claude Code

ling-senpeng13 and others added 5 commits June 29, 2026 16:46
Package each SDK's e2e suite into a self-contained, version-stamped
tarball attached to every GitHub release, so downstream repos (e.g.
orkes-io/orkes-conductor) can pin the e2e suite to the exact agentspan
release they run against. Each bundle pins the published SDK at the same
version — PyPI conductor-agent-sdk, npm @conductor-oss/conductor-agent-sdk,
Maven org.conductoross.conductor:conductor-agent-sdk, NuGet
conductor-agent-sdk — and carries test sources + support files + a
standalone manifest/runner/README (no SDK source vendored).

- package-e2e.sh: build python/typescript/java/csharp bundles for a version
- release-e2e-tests.yml: on release, package → validate → upload assets
- test_package_e2e.sh: static validator (structure, parity, pins, manifests)
- smoke_resolve.sh: live resolution smoke test against a published version

Verified: static validator green; published-0.3.0 smoke resolves + collects
(Python 134 tests, TypeScript suite, C# NuGet restore); Java validated
statically (no local gradle).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Aligns the workflow filename with the sibling ci-*-sdk-e2e.yml workflows
and its own "Release SDK E2E Test Bundles" title.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…2e-*

Aligns the bundle/tarball prefix with the release-sdk-e2e-tests workflow
and the ci-*-sdk-e2e naming. Done before first release, so no published
artifacts pin the old name.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sdk_e2e

Completes the *-sdk-e2e naming alignment across the release tooling.
Updates all call sites: the release-sdk-e2e-tests workflow, smoke_resolve.sh,
README, and in-file usage comments.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ling-senpeng13 ling-senpeng13 self-assigned this Jun 30, 2026
Make the Java SDK e2e bundle self-contained: ship the Gradle wrapper
(reused from sdk/java, pinned to 8.10) and run via ./gradlew, so the
suite needs only JDK 21 and runs identically regardless of the host's
Gradle version. Also declare junit-platform-launcher explicitly so it
stays correct if the wrapper ever moves to Gradle 9.

Fix substitute_version to skip *.jar: it sed-ed every staged file, which
corrupts the binary wrapper jar (and aborts packaging under set -e).

test_package_sdk_e2e.sh now asserts the wrapper is present, executable,
pins a distribution, has an uncorrupted (valid-zip) jar, and that run.sh
invokes ./gradlew.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.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.

1 participant