Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
c236889
FEAT: PAAL-151 Add Testworkflows
Oct 30, 2025
203f302
FEAT: Add unit tests & test datasets
Oct 31, 2025
f2d828d
FIX: Plenty of fixes / small refactorings in coordination with @fmall…
Nov 4, 2025
e34f2c8
FIX: reposition the call to evaluate() from calculate_metrics to main…
Nov 4, 2025
7beb1a7
FEAT: Migrate metrics publishing from Prometheus Pushgateway to OpenT…
fmallmann Nov 6, 2025
6313bd6
FIX: TokenUsageParser now functions correctly even when using Non-LLM…
Nov 6, 2025
fb816c6
FIX: remove unused veriable 'df'
Nov 6, 2025
2d03f42
FIX: remove unused variable 'results' in run.py
Nov 6, 2025
6fba40d
feat: initial tilt setup
fmallmann Nov 6, 2025
714f848
FEAT: added Bandit, MyPy, Import-Linter, Poe, Ruff
Nov 6, 2025
4622e5b
FIX: Formatting
Nov 6, 2025
7f35216
FIX: Formatting
Nov 6, 2025
c30b80a
FIX: Add config for Import-Linter, Ruff & Bandit to pyproject.toml
Nov 6, 2025
2bd09d4
FIX: Type Errors in run.py
Nov 6, 2025
bf019df
FIX: Type Errors in setup.py
Nov 6, 2025
ad397d0
FIX: Remove unnecessary dependencies & add missing ones
Nov 6, 2025
d7dda81
FIX: Type Errors in evaluate.py
Nov 6, 2025
8f36726
FIX: Add scripts/ to mypy_path
Nov 6, 2025
b027cbc
FIX: Adapt test_e2e.py as a Pytest and add it to the Workflows
Nov 6, 2025
ca36c95
FIX: Adapt test_publish.py to the OpenTelemetry OTLP, adjust Error in…
Nov 6, 2025
8072aa5
FEAT: Use Python Version File to set Python Version
Nov 6, 2025
8262252
FIX: setup of test-testworkflows.yml
Nov 6, 2025
986b301
FIX: setup of test-testworkflows.yml
Nov 6, 2025
45f7ba7
Merge remote-tracking branch 'origin/FEAT-PAAL-151-add-testworkflows'…
Nov 6, 2025
2116607
FEAT: add Tiltfile to test-testworkflows.yml to properly test test_e2…
Nov 6, 2025
d7db29a
FEAT: add Tiltfile to test-testworkflows.yml to properly test test_e2…
Nov 6, 2025
14882b1
FIX: Type Error in evaluate.py
Nov 6, 2025
a157286
FIX: Tiltfile Error in test-testworkflows.yml
Nov 6, 2025
e563571
FIX: Add GOOGLE_API_KEY Github Secret
Nov 6, 2025
8ad3ea1
FIX: wait for Test-Data-Server to start up before running Pytests
Nov 6, 2025
73c1f7a
FEAT: Implement Test-Data-Server in Github Action (Tilt CI shuts it d…
Nov 6, 2025
932009a
FIX: no more double Test-Data-Server in CI
Nov 6, 2025
ef13ef6
FIX: add OPENAI_API_KEY Placeholder so test_e2e.py can run
Nov 6, 2025
0525e6e
FIX: add Timeout to Request
Nov 6, 2025
2bb11ac
FIX: up2date uv.lock
Nov 6, 2025
cfe390f
FIX: ignore various low-risk warnings
Nov 6, 2025
de336ad
FEAT: Add Check Workflow that runs 'uv poe check'
Nov 6, 2025
701f8fa
FIX: incorrect path to python-version-file
Nov 6, 2025
b36a5fc
FIX: incorrect working-directory in check-testworkflows.yml
Nov 6, 2025
e36d99f
Revert "FIX: incorrect working-directory in check-testworkflows.yml"
Nov 6, 2025
333e5b0
Revert "FIX: incorrect path to python-version-file"
Nov 6, 2025
95c7231
Revert "FEAT: Add Check Workflow that runs 'uv poe check'"
Nov 6, 2025
ff6c5ae
REFACTOR: Adapt check-testworkflows.yml to run all checks instead of …
Nov 6, 2025
68704fb
FIX: update pyproject.toml and uv.lock
Nov 6, 2025
878f021
REFACTOR: create e2e_tests/ directory
Nov 11, 2025
08bc1ee
REFACTOR: add test_e2e to POE tasks
Nov 11, 2025
2b71106
REFACTOR: adapt test-e2e.yml to run the testworkflow e2e test
Nov 11, 2025
f905d5d
REFACTOR: rename to check.yml and remove E2E-Test scaffolding
Nov 11, 2025
63304ed
REFACTOR: replace Go Tests with Testworkflow Tests
Nov 11, 2025
90f23d3
FIX: Formatting
Nov 11, 2025
10d200f
FIX: Rename E2E Test folder
Nov 11, 2025
790128b
REFACTOR: divide dependencies into dev and prod
Nov 11, 2025
254bd7b
FIX: wrong directory for test_e2e
Nov 11, 2025
76d4065
FIX: adapt uv commands to dev & prod dependencies
Nov 11, 2025
0bd2bb7
FIX: use native Pytest functionality instead of importing Unittest
Nov 11, 2025
fe34bd0
FIX: remove issues Linter & Bandit currently ignore
Nov 11, 2025
c5fbfd3
FIX: Formatting
Nov 11, 2025
f04ba0a
FIX: Imports
Nov 11, 2025
d28695e
FIX: Imports
Nov 11, 2025
057a092
FIX: Update uv.lock
Nov 11, 2025
6e27c6c
FEAT: Documentation for Testworkflows
Nov 11, 2025
d1ee69e
REFACTOR: restructure Dependencies & dependency groups
Nov 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#
# GitHub Action: Check
#
# This workflow is triggered on pushes to main and renovate branches, as well as
# pull requests. It runs backend checks to ensure code quality.
#
name: Check

on:
push:
branches:
- main
- 'renovate/**'
pull_request:

jobs:
test-testworkflows:
name: Runs on Ubuntu
runs-on: ubuntu-latest

defaults:
run:
working-directory: testworkflows

steps:
- name: Clone the code
uses: 'actions/checkout@v5'

- name: Install uv
uses: 'astral-sh/setup-uv@v6'
with:
version: "0.8.17"
enable-cache: true

- name: Setup Python
uses: 'actions/setup-python@v6'
with:
python-version-file: "testworkflows/.python-version"

- name: Install Dependencies
run: uv sync

- name: Run Checks
run: uv run poe check
73 changes: 57 additions & 16 deletions .github/workflows/test-e2e.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
#
# GitHub Action: E2E Tests
#
# This workflow is triggered on pushes to main and renovate branches, as well as
# pull requests. It runs E2E Tests to ensure the code is working.
#
name: E2E Tests

on:
Expand All @@ -7,32 +13,67 @@ on:
- 'renovate/**'
pull_request:

env:
# Required environment variables for the E2E test
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
OPENAI_API_KEY: PLACEHOLDER

jobs:
test-e2e:
test:
name: Run on Ubuntu
runs-on: ubuntu-latest
permissions:
contents: 'read'

defaults:
run:
working-directory: testworkflows

steps:
- name: Clone the code
uses: actions/checkout@v5
uses: 'actions/checkout@v5'

- name: Install uv
uses: 'astral-sh/setup-uv@v6'
with:
version: "0.8.17"
enable-cache: true

- name: Setup Go
uses: actions/setup-go@v6
- name: Setup Python
uses: 'actions/setup-python@v6'
with:
go-version-file: go.mod
python-version-file: "testworkflows/.python-version"

- name: Install Dependencies
run: uv sync

- name: Install the latest version of kind
- name: Set up Kubernetes (kind)
uses: 'helm/kind-action@v1'
with:
cluster_name: testbench-cluster

- name: Install Tilt
run: |
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
tilt version

- name: Verify kind installation
run: kind version
- name: Start test data server
run: uv run python -m http.server 8000 --directory tests/test_data &

- name: Running Test e2e
- name: Start Tiltfile services
run: tilt ci
working-directory: .

- name: Wait for services to be ready
run: |
go mod tidy
make test-e2e
echo "Waiting for services to be ready..."
kubectl wait --for=condition=ready pod -l app=weather-agent --timeout=300s || true
kubectl wait --for=condition=ready pod -l app=ai-gateway-litellm --timeout=300s || true
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=lgtm --timeout=300s || true

echo "Checking service status..."
kubectl get pods -A

echo "Waiting for test-data-server (HTTP server on port 8000)..."
curl --retry 30 --retry-delay 2 --retry-connrefused -f http://localhost:8000/dataset.json > /dev/null

- name: Running Test e2e
run: uv run poe test_e2e
33 changes: 25 additions & 8 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
#
# GitHub Action: Test E2E
#
# This workflow is triggered on pushes to main and renovate branches, as well as
# pull requests. It runs Unit Tests to ensure the code is working.
#
name: Tests

on:
Expand All @@ -14,16 +20,27 @@ jobs:
permissions:
contents: 'read'

defaults:
run:
working-directory: testworkflows

steps:
- name: Clone the code
uses: actions/checkout@v5
uses: 'actions/checkout@v5'

- name: Install uv
uses: 'astral-sh/setup-uv@v6'
with:
version: "0.8.17"
enable-cache: true

- name: Setup Go
uses: actions/setup-go@v6
- name: Setup Python
uses: 'actions/setup-python@v6'
with:
go-version-file: go.mod
python-version-file: "testworkflows/.python-version"

- name: Install Dependencies
run: uv sync

- name: Running Tests
run: |
go mod tidy
make test
- name: Run Tests
run: uv run poe test
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,5 @@ go.work
*.swp
*.swo
*~

.env
38 changes: 38 additions & 0 deletions Tiltfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# -*- mode: Python -*-

# Increase Kubernetes upsert timeout for CRD installations
update_settings(max_parallel_updates=10)

# Load .env file for environment variables
load('ext://dotenv', 'dotenv')
dotenv()

v1alpha1.extension_repo(name='agentic-layer', url='https://github.com/agentic-layer/tilt-extensions', ref='v0.3.1')

v1alpha1.extension(name='cert-manager', repo_name='agentic-layer', repo_path='cert-manager')
load('ext://cert-manager', 'cert_manager_install')
cert_manager_install()

v1alpha1.extension(name='agent-runtime', repo_name='agentic-layer', repo_path='agent-runtime')
load('ext://agent-runtime', 'agent_runtime_install')
agent_runtime_install(version='0.9.0')

v1alpha1.extension(name='ai-gateway-litellm', repo_name='agentic-layer', repo_path='ai-gateway-litellm')
load('ext://ai-gateway-litellm', 'ai_gateway_litellm_install')
ai_gateway_litellm_install(version='0.2.0')

# Webserver to serve test data (disabled in CI - manually started instead)
if not os.getenv('CI'):
local_resource(
'test-data-server',
serve_cmd='python3 -m http.server 8000 --directory testworkflows/tests/test_data',
labels=['test-data'],
links=['http://localhost:8000/dataset.json']
)

# Apply Kubernetes manifests
k8s_yaml(kustomize('deploy/local'))

k8s_resource('ai-gateway-litellm', port_forwards=['11001:4000'])
k8s_resource('weather-agent', port_forwards='11010:8000', labels=['agents'], resource_deps=['agent-runtime'])
k8s_resource('lgtm', port_forwards=['11000:3000', '9090:9090', '4318:4318'])
5 changes: 5 additions & 0 deletions deploy/local/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- weather-agent.yaml
- lgtm.yaml
86 changes: 86 additions & 0 deletions deploy/local/lgtm.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# this is intended for demo / testing purposes only, not for production usage
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
---
apiVersion: v1
kind: Service
metadata:
name: lgtm
namespace: monitoring
spec:
selector:
app: lgtm
ports:
- name: grafana
protocol: TCP
port: 3000
targetPort: 3000
- name: otel-grpc
protocol: TCP
port: 4317
targetPort: 4317
- name: otel-http
protocol: TCP
port: 4318
targetPort: 4318
- name: prometheus
protocol: TCP
port: 9090
targetPort: 9090
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: lgtm
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: lgtm
template:
metadata:
labels:
app: lgtm
spec:
containers:
- name: lgtm
image: grafana/otel-lgtm:latest
ports:
- containerPort: 3000
- containerPort: 4317
- containerPort: 4318
- containerPort: 9090
readinessProbe:
exec:
command:
- cat
- /tmp/ready
volumeMounts:
- name: tempo-data
mountPath: /data/tempo
- name: grafana-data
mountPath: /data/grafana
- name: loki-data
mountPath: /data/loki
- name: loki-storage
mountPath: /loki
- name: p8s-storage
mountPath: /data/prometheus
- name: pyroscope-storage
mountPath: /data/pyroscope
volumes:
- name: tempo-data
emptyDir: {}
- name: loki-data
emptyDir: {}
- name: grafana-data
emptyDir: {}
- name: loki-storage
emptyDir: {}
- name: p8s-storage
emptyDir: {}
- name: pyroscope-storage
emptyDir: {}
22 changes: 22 additions & 0 deletions deploy/local/weather-agent.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
kind: Namespace
apiVersion: v1
metadata:
name: sample-agents
---
apiVersion: runtime.agentic-layer.ai/v1alpha1
kind: Agent
metadata:
labels:
app.kubernetes.io/name: agent-runtime-operator
app.kubernetes.io/managed-by: kustomize
name: weather-agent
namespace: sample-agents
spec:
framework: google-adk
image: ghcr.io/agentic-layer/weather-agent:0.6.0
protocols:
- type: A2A
exposed: true
env:
- name: OTEL_SDK_DISABLED
value: "true"
1 change: 1 addition & 0 deletions testworkflows/.python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.13
Loading