Skip to content

Dev

Dev #251

Workflow file for this run

name: Build and test
on:
push:
branches: ["main"]
paths:
- "docker/**"
- "langgraph_agent_toolkit/**"
- "tests/**"
- "pyproject.toml"
pull_request:
branches: ["main"]
paths:
- "docker/**"
- "langgraph_agent_toolkit/**"
- "tests/**"
- "pyproject.toml"
workflow_call:
permissions:
contents: read
jobs:
test-python:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install uv
uses: astral-sh/setup-uv@v7
with:
version: "0.9.5"
- name: Install dependencies with uv
run: |
uv sync --all-extras --frozen
env:
UV_SYSTEM_PYTHON: 1
- name: Lint and format with ruff
run: |
uv run ruff --config pyproject.toml format --check
uv run ruff --config pyproject.toml check --output-format github
- name: Test with pytest
run: |
uv run pytest --cov=langgraph_agent_toolkit/ --cov-report=xml
env:
MODEL_NAME: ${{ secrets.MODEL_NAME }}
MODEL_API_KEY: ${{ secrets.MODEL_API_KEY }}
MODEL_BASE_URL: ${{ secrets.MODEL_BASE_URL }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
test-docker:
runs-on: ubuntu-latest
services:
dind:
image: docker:dind
ports:
- 2375:2375
options: >-
--privileged --health-cmd "docker info" --health-interval 10s
--health-timeout 5s --health-retries 5
steps:
- uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: network=host
- name: Build service image
uses: docker/build-push-action@v6
with:
context: .
push: false
load: true
tags: agent-service-toolkit.service:${{ github.sha }}
file: docker/api/Dockerfile
- name: Build app image
uses: docker/build-push-action@v6
with:
context: .
push: false
load: true
tags: agent-service-toolkit.app:${{ github.sha }}
file: docker/app/Dockerfile
- name: Start service container
run:
docker run -d --name service-container --network host -e
USE_FAKE_MODEL=true -e PORT=8080 agent-service-toolkit.service:${{
github.sha }}
- name: Confirm service starts correctly
run: |
timeout 30 bash -c '
while ! curl -s http://0.0.0.0:8080/health; do
echo "Waiting for service to be ready..."
docker logs service-container
sleep 2
done
'
- name: Run app container
run:
docker run -d --name app-container --network host -e
AGENT_URL=http://0.0.0.0:8080 agent-service-toolkit.app:${{ github.sha
}}
- name: Confirm app starts correctly
run: |
timeout 30 bash -c '
while ! curl -s http://localhost:8501/healthz; do
echo "Waiting for app to be ready..."
docker logs app-container
sleep 2
done
'
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version-file: "pyproject.toml"
- name: Install uv
uses: astral-sh/setup-uv@v7
with:
version: "0.9.5"
- name: Install ONLY CLIENT dependencies with uv
run: |
uv sync --frozen --only-group client --only-group dev
env:
UV_SYSTEM_PYTHON: 1
- name: Run integration tests
run: |
uv run pytest tests/integration -v --run-docker
env:
AGENT_URL: http://0.0.0.0:8080
USE_FAKE_MODEL: true
- name: Clean up containers
if: always()
run: |
docker stop service-container app-container || true
docker rm service-container app-container || true