Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
15513d0
Speak TRAPI 2.0 and build queries with translator_tom
claude Oct 2, 2026
23b7ffa
Report structured results to the new Information Radiator
claude Oct 6, 2026
f77bb5a
Bump minor version
claude Oct 6, 2026
3b7551f
Add the Information Radiator service and dashboard
claude Oct 6, 2026
25c63f7
Import past runs from Zebrunner
claude Oct 6, 2026
4e27d1e
Deploy the Information Radiator, and fit it to phones
claude Oct 6, 2026
690509a
Close a backslash open redirect after login; keep asset history to on…
claude Oct 6, 2026
0754bfa
Fix issues from review of the radiator branch
claude Oct 6, 2026
e6e2077
Keep history-strip dates on one line
claude Oct 6, 2026
3940b52
Put the radiator's history for a run in its Slack report
claude Oct 6, 2026
bb597e6
Track performance in the Slack report; step lines for trends
claude Oct 6, 2026
705d05c
Stand up the radiator with docker compose, and document it
claude Oct 9, 2026
7d74543
Merge remote-tracking branch 'origin/main' into claude/radiator-phase1
claude Oct 9, 2026
cd99d5b
Merge remote-tracking branch 'origin/claude/nice-cori-dtv8ft' into cl…
claude Oct 9, 2026
ede3708
Send results to the radiator as each test case finishes
claude Oct 9, 2026
cf8e424
Send the same query parameters with every query
claude Oct 9, 2026
a236aeb
Paginate a run's results grid
claude Oct 9, 2026
4cc77d6
Paginate the runs list the same way as a run's results
claude Oct 9, 2026
af012e3
Break each agent's results down by expected output on the run page
claude Oct 9, 2026
412e106
Add an acceptance run grid to the dashboard and Slack report
claude Oct 10, 2026
c497bdb
Add a .env.example with the Slack settings
claude Oct 10, 2026
6ae5f64
Add run cycles, a cycle board, flags, and a weekly digest
claude Oct 10, 2026
05099e4
Add Helm charts for the radiator and the harness's scheduled runs
claude Oct 10, 2026
413a8e2
Update the dashboard live while runs are going
claude Oct 14, 2026
ee64336
Give the new radiator its own Slack channel while it runs alongside Z…
claude Oct 14, 2026
99acabe
Keep SLACK_CHANNEL Zebrunner's while Zebrunner is configured
claude Oct 14, 2026
ea655ba
Pass the Zebrunner settings through Docker Compose
claude Oct 14, 2026
8af911d
Remove some extra logs
maximusunc Oct 14, 2026
ce7baee
Log enough to trace anything missing from the dashboard
claude Oct 14, 2026
5b53362
Fix the Zebrunner import's list of launches
claude Oct 14, 2026
3ce9436
Fix the Zebrunner import's endpoints, read from Zebrunner's own code
claude Oct 14, 2026
51f6e4d
Import from older Zebrunners too (the legacy read API)
claude Oct 14, 2026
54ffe65
Read test logs from older Zebrunners for the import
claude Oct 14, 2026
e6ad2cf
Find imported runs' environments from where their pks live
claude Oct 14, 2026
8ff34b8
Support TRAPI 1.6 and 2.0 side by side during the rollout
claude Oct 14, 2026
7593318
Don't shadow importlib's version in resolve_trapi_version
claude Oct 14, 2026
ebb319d
Pre-PR tidy: drop dead code, harden the cycle's ending, refresh docs
claude Oct 14, 2026
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
15 changes: 15 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Both images build from the repo root (see compose.yml). Keep secrets and
# local clutter out of them: `COPY . .` in the harness's Dockerfile would
# otherwise bake a local .env (Slack/Zebrunner/radiator tokens) into the image.
.env
.env.*
!.env.example
deploy/helm/*/values.*.yaml
.git
.github
.pytest_cache
.vscode
**/__pycache__
*.egg-info
logs/
test_results/
43 changes: 43 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Copy to .env (next to compose.yml) and fill in. .env is git-ignored; never
# commit real tokens. Docker Compose reads .env on its own. When running
# test-harness directly, set these in your shell instead.

# --- Slack -------------------------------------------------------------------
# Set all three to post the report to Slack; with any missing, the results are
# saved to test_results/ instead. Leave off --local.

# Incoming webhook for the channel (the report message).
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/your-webhook-path
# Bot token with the files:write scope (uploads the charts and result files).
# Invite the bot to the channel: /invite @your-app
SLACK_TOKEN=xoxb-your-bot-token
# The channel ID (from the channel's details, eg C0123ABCD), not its #name.
SLACK_CHANNEL=C0123ABCD

# --- Optional: Zebrunner, alongside the new radiator --------------------------
# Set both to report each run to Zebrunner as well. SLACK_CHANNEL then gets
# Zebrunner's report (with its link), and the new radiator's goes to
# RADIATOR_SLACK_* below, if set.
# ZE_BASE_URL=https://zebrunner.example.org
# ZE_REFRESH_TOKEN=your-zebrunner-refresh-token

# --- Optional: a Slack channel of the new radiator's own ----------------------
# While Zebrunner is configured (ZE_*), SLACK_CHANNEL is Zebrunner's and gets
# only the report it always did. Set these to post the new Information
# Radiator's reports (its link, pass-rate headline and charts), the run cycle
# boards and the weekly digest to a channel of their own. Without Zebrunner,
# SLACK_CHANNEL is the radiator's and these aren't needed.
# An incoming webhook posts to one channel only, so this needs its own; the
# bot token defaults to SLACK_TOKEN (invite the bot to this channel too).
# RADIATOR_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/another-webhook-path
# RADIATOR_SLACK_CHANNEL=C0456EFGH
# RADIATOR_SLACK_TOKEN=xoxb-another-bot-token

# --- Optional (Docker Compose) -----------------------------------------------
# HARNESS_ARGS=load local_acceptance
# QUERY_PARAMETERS={"timeout": 300}
# RADIATOR_USERNAME=translator
# RADIATOR_PASSWORD=radiator
# RADIATOR_TOKEN=local-dev-token
# RADIATOR_PORT=8000
# RADIATOR_EXCLUDED_ENVS=dev
59 changes: 59 additions & 0 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,65 @@ jobs:
- name: Run tests and get output
run: pytest

radiator-test:
name: Run the Information Radiator's tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: radiator_test
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 5s
--health-timeout 5s
--health-retries 10
steps:
- name: Checkout the repository
uses: actions/checkout@v4

- uses: actions/setup-python@v5
name: Setup python
with:
python-version: '3.11'
cache: 'pip'

- name: Install requirements
run: pip install -r radiator/requirements-test.txt

- name: Check the migrations match the models
env:
RADIATOR_DATABASE_URL: postgresql+psycopg://postgres:postgres@localhost:5432/radiator_test
run: |
alembic -c radiator/alembic.ini upgrade head
alembic -c radiator/alembic.ini check

- name: Run tests
env:
RADIATOR_TEST_DATABASE_URL: postgresql+psycopg://postgres:postgres@localhost:5432/radiator_test
run: pytest radiator/tests

helm-lint:
name: Lint and render the Helm charts
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4

- uses: azure/setup-helm@v4
with:
version: v3.16.4

- name: Lint and render each chart with its example values
run: |
for chart in deploy/helm/*/; do
helm lint "$chart" -f "$chart/values.example.yaml"
helm template ci "$chart" -f "$chart/values.example.yaml" > /dev/null
done

check-format:
name: Check that code matches Black formatter
runs-on: ubuntu-latest
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,13 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
registry: ghcr.io
tags: latest,${{ steps.get_version.outputs.VERSION }}
- name: Push the Information Radiator to GitHub Packages
uses: docker/build-push-action@v1
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: ghcr.io
repository: translatorsri/testharness-radiator
dockerfile: radiator/Dockerfile
path: .
tags: latest,${{ steps.get_version.outputs.VERSION }}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ scripts/
.vscode
test_results/
test_report.json
# Helm values for a real deployment: copies of the charts' values.example.yaml
deploy/helm/*/values.*.yaml
!deploy/helm/*/values.example.yaml
.pytest_cache/
Loading
Loading