-
Notifications
You must be signed in to change notification settings - Fork 155
129 lines (118 loc) · 4.3 KB
/
Copy pathrun-tck-compat.yaml
File metadata and controls
129 lines (118 loc) · 4.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: Run TCK (v0.3 compat)
# Drives the a2a-tck v0.3 suite against the v1.0-native SUT in
# `tck/compat-agent/` (built on the v1.0 SDK with the v0.3 compat layer
# enabled on every transport).
on:
push:
branches: ['main', 'epic/**']
pull_request:
branches: ['main', 'epic/**']
paths-ignore:
- '**.md'
- 'LICENSE'
- '.github/CODEOWNERS'
- 'test/**'
- 'src/samples/**'
env:
# Tag of the TCK.
TCK_VERSION: 0.3.0.beta5
# Tells uv to not need a venv, and instead use system
UV_SYSTEM_PYTHON: 1
# Base URL for the SUT agent
SUT_BASE_URL: http://localhost:41241
# Base URL for the SUT agent JSON-RPC transport
SUT_JSONRPC_URL: http://localhost:41241/a2a/jsonrpc
# Slow system on CI
TCK_STREAMING_TIMEOUT: 5.0
# Only run the latest job
concurrency:
group: '${{ github.workflow }} @ ${{ github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
tck-test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20, 22, 24]
steps:
- name: Checkout a2a-js
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
registry-url: 'https://registry.npmjs.org'
cache: 'npm'
- run: |
npm ci
npm run build
- name: Checkout a2a-tck
uses: actions/checkout@v4
with:
repository: a2aproject/a2a-tck
path: tck/a2a-tck
ref: ${{ env.TCK_VERSION }}
- name: Skip TCK tests broken against spec-compliant SUTs
run: |
sed -i '/^def test_message_send_continue_with_contextid/a\ import pytest\n pytest.skip("TCK converter reads snake_case only, then compensates with a dummy contextId that trips the SDK spec 3.4.3 mismatch check")' \
tests/optional/capabilities/test_message_send_capabilities.py
working-directory: tck/a2a-tck
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version-file: 'tck/a2a-tck/pyproject.toml'
- name: Install uv and Python dependencies
run: |
pip install uv
uv pip install -e .
working-directory: tck/a2a-tck
- name: Start SUT (v1.0 SDK + v0.3 compat layer)
run: |
cd tck
npm run tck:compat-sut-agent &
- name: Wait for SUT to start
run: |
URL="${{ env.SUT_BASE_URL }}/.well-known/agent-card.json"
EXPECTED_STATUS=200
TIMEOUT=120
RETRY_INTERVAL=2
START_TIME=$(date +%s)
while true; do
# Calculate elapsed time
CURRENT_TIME=$(date +%s)
ELAPSED_TIME=$((CURRENT_TIME - START_TIME))
# Check for timeout
if [ "$ELAPSED_TIME" -ge "$TIMEOUT" ]; then
echo "❌ Timeout: Server did not respond with status $EXPECTED_STATUS within $TIMEOUT seconds."
exit 1
fi
# Get HTTP status code. || true is to reporting a failure to connect as an error
HTTP_STATUS=$(curl --output /dev/null --silent --write-out "%{http_code}" "$URL") || true
echo "STATUS: ${HTTP_STATUS}"
# Check if we got the correct status code
if [ "$HTTP_STATUS" -eq "$EXPECTED_STATUS" ]; then
echo "✅ Server is up! Received status $HTTP_STATUS after $ELAPSED_TIME seconds."
break;
fi
# Wait before retrying
echo "⏳ Server not ready (status: $HTTP_STATUS). Retrying in $RETRY_INTERVAL seconds..."
sleep "$RETRY_INTERVAL"
done
- name: Run TCK (mandatory)
id: run-tck-mandatory
timeout-minutes: 5
run: |
./run_tck.py --sut-url ${{ env.SUT_JSONRPC_URL }} --category mandatory --transports jsonrpc,rest,grpc
working-directory: tck/a2a-tck
- name: Run TCK (capabilities)
id: run-tck-capabilities
timeout-minutes: 5
run: |
./run_tck.py --sut-url ${{ env.SUT_JSONRPC_URL }} --category capabilities --transports jsonrpc,rest,grpc
working-directory: tck/a2a-tck
- name: Stop SUT
if: always()
run: |
# Find and kill the SUT process
pkill -f "npm run tck:compat-sut-agent" || true
sleep 2