Skip to content

chore(changelog): hygiene scrub for 2026-05-09 release #763

chore(changelog): hygiene scrub for 2026-05-09 release

chore(changelog): hygiene scrub for 2026-05-09 release #763

Workflow file for this run

name: Integration Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch: {}
# Weekly drift catch — Tuesday 06:00 UTC so failures land in EU/IN
# working hours, aligned with the TS + Java + Go SDK integration crons.
schedule:
- cron: '0 6 * * 2'
permissions:
contents: read
# Avoid spawning parallel docker-compose stacks for back-to-back pushes;
# also cancels stale PR runs when a new commit lands.
concurrency:
group: integration-${{ github.ref }}
cancel-in-progress: true
env:
AXONFLOW_TELEMETRY: 'off'
jobs:
# Contract tests run on every PR and push. No network, no stack.
# Matrixed across the same Python versions ci.yml exercises (3.10/3.11/3.12)
# so version-specific drift surfaces at PR time, not at release time.
contract-tests:
name: Contract Tests (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: pip install -e ".[dev]"
- name: Run contract tests
run: pytest tests/test_contract.py -v --no-cov
# Demo script syntax validation on every PR and push. Lightweight.
demo-scripts:
name: Demo Scripts Validation
runs-on: ubuntu-latest
needs: contract-tests
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: pip install -e ".[dev,all]"
- name: Validate quickstart.py syntax
run: python -m py_compile examples/quickstart.py
- name: Validate gateway_mode.py syntax
run: python -m py_compile examples/gateway_mode.py
- name: Validate openai_integration.py syntax
run: python -m py_compile examples/openai_integration.py
- name: Validate wcp_retry_idempotency.py syntax
run: python -m py_compile examples/wcp_retry_idempotency.py
- name: Import quickstart
run: python -c "from examples.quickstart import main; print('quickstart.py imports successfully')"
- name: Import gateway_mode
run: python -c "from examples.gateway_mode import main, blocked_example; print('gateway_mode.py imports successfully')"
# Integration tests run against a live community stack spun up via docker-compose.
# Runs on main merges, scheduled, and manual dispatch. Skipped on PRs to keep
# latency reasonable — PR-level live coverage is added in QF-13.
integration:
name: Integration Tests (Community Stack)
runs-on: ubuntu-latest
timeout-minutes: 20
needs: [contract-tests, demo-scripts]
if: github.event_name != 'pull_request'
steps:
- name: Checkout SDK
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: pip install -e ".[dev,all]"
- name: Clone community stack
run: git clone --depth 1 https://github.com/getaxonflow/axonflow.git ../axonflow
- name: Start community stack
run: |
cd ../axonflow
docker compose up -d --wait --wait-timeout 120
# Belt-and-suspenders: also poll /health since not every compose
# service has a healthcheck wired.
echo "Waiting for agent to be healthy..."
timeout 120 bash -c 'until curl -sf http://localhost:8080/health; do sleep 2; done'
echo "Agent is healthy"
echo "Waiting for orchestrator to be healthy..."
timeout 60 bash -c 'until curl -sf http://localhost:8081/health; do sleep 2; done'
echo "Orchestrator is healthy"
- name: Run integration tests
env:
RUN_INTEGRATION_TESTS: '1'
AXONFLOW_AGENT_URL: http://localhost:8080
AXONFLOW_CLIENT_ID: demo-client
AXONFLOW_CLIENT_SECRET: demo-secret
run: pytest tests/test_integration.py -v --no-cov
- name: Run quickstart example
env:
AXONFLOW_AGENT_URL: http://localhost:8080
AXONFLOW_CLIENT_ID: demo-client
AXONFLOW_CLIENT_SECRET: demo-secret
run: |
cd examples
timeout 30 python quickstart.py
- name: Run gateway_mode example
env:
AXONFLOW_AGENT_URL: http://localhost:8080
AXONFLOW_CLIENT_ID: demo-client
AXONFLOW_CLIENT_SECRET: demo-secret
run: |
cd examples
timeout 30 python gateway_mode.py
# Logs MUST be captured before `Stop community stack` runs — `compose
# down` destroys the containers and `compose logs` then returns
# nothing. `if: failure()` here, `if: always()` on teardown.
- name: Show docker logs on failure
if: failure()
run: |
if [ -d "../axonflow" ]; then
cd ../axonflow
docker compose logs --tail=200 || true
fi
- name: Upload docker logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: docker-compose-logs
path: ../axonflow/docker-compose-logs.txt
if-no-files-found: ignore
- name: Stop community stack
if: always()
run: |
if [ -d "../axonflow" ]; then
cd ../axonflow
# Persist logs to disk so the upload step can grab them post-teardown.
docker compose logs --tail=500 > docker-compose-logs.txt 2>/dev/null || true
docker compose down --volumes --remove-orphans || true
fi