Skip to content

Feature/combine agentspan#123

Open
kowser-orkes wants to merge 3 commits into
mainfrom
feature/combine-agentspan
Open

Feature/combine agentspan#123
kowser-orkes wants to merge 3 commits into
mainfrom
feature/combine-agentspan

Conversation

@kowser-orkes

Copy link
Copy Markdown
Contributor

Pull Request type

  • Bugfix
  • Feature
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • WHOSUSING.md
  • Other (please describe):

NOTE: Please remember to run ./gradlew spotlessApply to fix any format violations.

Changes in this PR

Describe the new behavior from this PR, and why it's needed
Issue #

Alternatives considered

Describe alternative implementation you have considered

Kowser and others added 3 commits July 9, 2026 19:07
Four new Gradle modules carrying the agent SDK from
agentspan-ai/agentspan sdk/java @ f8704fa3:

- conductor-ai         core SDK (107 main + 29 test files)
- conductor-ai-spring  Boot 3 auto-configuration (3 main + 2 test)
- conductor-ai-e2e     26 e2e suites, all tasks gated behind -Pe2e
- conductor-ai-examples 158 runnable examples (-PmainClass runner)

Sources are copied verbatim; the only churn is a mechanical
spotlessApply conforming them to the repo conventions (Apache header,
Conductor import order). Build files clone the shapes of
conductor-client-metrics, conductor-client-spring, tests, and harness
respectively; conductor-ai[-spring] publish via publish-config as
org.conductoross:conductor-ai[-spring]. Upstream docs land under
docs/agents/ (content pass to follow).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Modeled on the python-sdk agent-e2e action. Downloads the pinned
agentspan-server-0.4.0.jar release asset (cached), boots it on :8080
with the LLM repo secrets in the server env only, starts mcp-testkit,
then runs ./gradlew :conductor-ai-e2e:test -Pe2e.

A guard parses the JUnit XML and fails on zero executed tests, because
BaseTest assumeTrue-skips every suite when the server is unreachable —
without it a boot failure would green-wash the job. Fork PRs (no
secrets) fail at the guard by design. Needs OPENAI_API_KEY and
ANTHROPIC_API_KEY repo secrets before it can go green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- docs/agents/: dependency snippets now point at
  org.conductoross:conductor-ai[-spring]:5.1.0 (was
  org.conductoross.conductor:conductor-agent-sdk[-spring]:0.1.0);
  license note switched to Apache 2.0 (repo LICENSE); one source path
  updated to conductor-ai/src. Java package references are unchanged
  (the package itself did not move).
- Root README: Durable AI Agents blurb in the AI & LLM Workflows
  section and an AI Agents row in the Documentation table.
- CHANGELOG: Unreleased entry for the merge, coordinate supersession
  note, and the new agent-e2e workflow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comment on lines +23 to +121
runs-on: ubuntu-latest
timeout-minutes: 45
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
AGENTSPAN_SERVER_URL: http://localhost:8080/api
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'

# Python is only needed for mcp-testkit and the XML guard.
# No `cache: pip` — it hard-fails without a requirements file.
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Cache server JAR
id: jar_cache
uses: actions/cache@v4
with:
path: agentspan-server.jar
key: agentspan-server-${{ env.AGENTSPAN_VERSION }}

- name: Download server JAR from release
if: steps.jar_cache.outputs.cache-hit != 'true'
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release download "v${AGENTSPAN_VERSION}" --repo agentspan-ai/agentspan \
--pattern "agentspan-server-${AGENTSPAN_VERSION}.jar" --output agentspan-server.jar

- name: Install mcp-testkit
run: |
python -m pip install --upgrade pip
pip install mcp-testkit

- name: Start mcp-testkit
run: |
mcp-testkit --transport http --port 3001 &
sleep 2

- name: Start server
run: |
java -jar agentspan-server.jar --server.port=8080 > server.log 2>&1 &

- name: Wait for server health
run: |
for i in $(seq 1 45); do
if curl -sf http://localhost:8080/health | grep -q '"healthy"[[:space:]]*:[[:space:]]*true'; then
echo "server healthy after ~$((i*2))s"; exit 0
fi
sleep 2
done
echo "::error::server failed to become healthy within 90s"
tail -100 server.log
exit 1

- name: Run e2e suites
run: ./gradlew :conductor-ai-e2e:test -Pe2e

# BaseTest assumeTrue-skips every suite when the server is unreachable —
# without this guard a boot failure after the health gate (or a future
# gate regression) would yield a green job that ran nothing.
- name: Guard against silently-empty runs
if: always()
run: |
python - <<'EOF'
import glob
import sys
import xml.etree.ElementTree as ET

total = executed = 0
for path in glob.glob("conductor-ai-e2e/build/test-results/test/TEST-*.xml"):
root = ET.parse(path).getroot()
t = int(root.get("tests", 0))
sk = int(root.get("skipped", 0))
total += t
executed += t - sk
print(f"executed {executed}/{total} tests")
sys.exit(0 if executed > 0 else 1)
EOF

- name: Upload results
if: always()
uses: actions/upload-artifact@v4
with:
name: agent-e2e-results
path: |
conductor-ai-e2e/build/test-results/test/
conductor-ai-e2e/build/reports/tests/test/
server.log
retention-days: 14
@codecov

codecov Bot commented Jul 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ Complexity Δ
...ss/conductor/ai/spring/AgentAutoConfiguration.java 100.00% <ø> (ø) 4.00 <0.00> (?)
...conductoross/conductor/ai/spring/AgentCatalog.java 92.30% <ø> (ø) 19.00 <0.00> (?)
...ductoross/conductor/ai/spring/AgentProperties.java 100.00% <ø> (ø) 5.00 <0.00> (?)
...main/java/org/conductoross/conductor/ai/Agent.java 72.24% <ø> (ø) 68.00 <0.00> (?)
...ava/org/conductoross/conductor/ai/AgentConfig.java 64.28% <ø> (ø) 6.00 <0.00> (?)
...va/org/conductoross/conductor/ai/AgentRuntime.java 2.66% <ø> (ø) 7.00 <0.00> (?)
...org/conductoross/conductor/ai/CallbackHandler.java 0.00% <ø> (ø) 0.00 <0.00> (?)
...g/conductoross/conductor/ai/enums/AgentStatus.java 100.00% <ø> (ø) 1.00 <0.00> (?)
...org/conductoross/conductor/ai/enums/EventType.java 88.23% <ø> (ø) 2.00 <0.00> (?)
...org/conductoross/conductor/ai/enums/Framework.java 0.00% <ø> (ø) 0.00 <0.00> (?)
... and 72 more

... and 5 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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