Skip to content

feat(advisor): executor+advisor strategies on any Chat wire (tool_call default, review_gate) #609

feat(advisor): executor+advisor strategies on any Chat wire (tool_call default, review_gate)

feat(advisor): executor+advisor strategies on any Chat wire (tool_call default, review_gate) #609

name: Getting Started
# Executable coverage for docs/getting_started.md.
#
# Fails when the guide drifts from the product — renamed CLI subcommand,
# YAML schema change, broken Python snippet, /health regression, etc. The
# exercise lives in tests/getting_started/ so it reproduces locally with
# `uv run pytest tests/getting_started`.
on:
pull_request:
paths:
- "docs/getting_started.md"
- "switchyard/**"
- "switchyard_rust/**"
- "tests/getting_started/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/getting-started.yml"
push:
branches: [main]
paths:
- "docs/getting_started.md"
- "switchyard/**"
- "switchyard_rust/**"
- "tests/getting_started/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/getting-started.yml"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
permissions:
contents: read
jobs:
getting-started:
name: Run getting-started flow
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v6
with:
python-version: "3.12"
enable-cache: true
cache-dependency-glob: "uv.lock"
- name: Install
run: uv sync --locked
- name: Exercise the guide
# Single invocation: pytest picks up tests/getting_started/ (CLI, YAML,
# serve lifecycle) AND --markdown-docs execs the Python snippet from
# the guide. The local mock-upstream fixture lives in
# tests/getting_started/conftest.py so it only loads when collecting
# from that subtree.
run: uv run pytest tests/getting_started --markdown-docs docs/getting_started.md -v
env:
# The server-lifecycle test serves a type: model route pointed at a
# local in-process mock OpenAI upstream; these keys are never sent
# upstream. Stub so the bundle loader's env-var resolution doesn't
# fail on a clean runner.
OPENAI_API_KEY: sk-test
NVIDIA_API_KEY: nvapi-test
ANTHROPIC_API_KEY: sk-ant-test