Files
cleveragents-core/.forgejo/workflows/benchmark-scheduled.yml
T
clever-agent 81229422f2
CI / status-check (pull_request) Blocked by required conditions
CI / lint (pull_request) Successful in 52s
CI / quality (pull_request) Successful in 1m13s
CI / typecheck (pull_request) Successful in 1m20s
CI / security (pull_request) Successful in 1m41s
CI / build (pull_request) Successful in 30s
CI / e2e_tests (pull_request) Failing after 4m9s
CI / integration_tests (pull_request) Successful in 4m57s
CI / unit_tests (pull_request) Successful in 6m1s
CI / helm (pull_request) Successful in 27s
CI / push-validation (pull_request) Successful in 22s
CI / coverage (pull_request) Has started running
CI / docker (pull_request) Successful in 1m31s
Revert "ci(docker): Ensure CI uses CT docker proxy to workaround Docker ratelimit issues"
This reverts commit 9c5f19854d.
2026-05-11 17:22:45 -04:00

193 lines
7.8 KiB
YAML

name: Benchmark Regression
on:
schedule:
- cron: "0 2 * * *"
- cron: "0 3 * * 0"
workflow_dispatch:
inputs:
base_sha:
description: "Base SHA or branch to compare against (default: master)"
required: false
default: "master"
run_full_suite:
description: "Run full benchmark suite (true) or regression only (false)"
required: false
default: "false"
env:
UV_VERSION: "0.8.0"
PYTHON_VERSION: "3.13"
NOX_DEFAULT_VENV_BACKEND: "uv"
jobs:
benchmark-regression:
if: github.event_name == 'schedule' && github.event.schedule == '0 2 * * *' || github.event_name == 'workflow_dispatch' && github.event.inputs.run_full_suite == 'false'
runs-on: docker
timeout-minutes: 120
container:
image: python:3.13-slim
steps:
- name: Install system dependencies
run: |
apt-get update && apt-get install -y -qq nodejs git curl && rm -rf /var/lib/apt/lists/*
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install uv and nox
run: |
pip install -q uv==${{ env.UV_VERSION }} nox
- name: Cache uv packages
uses: actions/cache@v3
with:
path: ~/.cache/uv
key: uv-benchmark-${{ hashFiles('pyproject.toml') }}
restore-keys: |
uv-benchmark-
uv-
- name: Sync benchmark results from S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }}
run: |
if [ -n "${AWS_ACCESS_KEY_ID}" ] && [ -n "${ASV_S3_BUCKET}" ]; then
pip install -q awscli
mkdir -p build/asv/results
aws s3 sync "s3://${ASV_S3_BUCKET}/asv/results/" build/asv/results/ || echo "No existing results to sync"
else
echo "Skipping S3 sync - AWS credentials not configured"
fi
- name: Run benchmark regression via nox
env:
NOX_DEFAULT_VENV_BACKEND: uv
ASV_BASE_SHA: ${{ github.event.inputs.base_sha || 'master' }}
run: |
mkdir -p build
nox -s benchmark_regression 2>&1 | tee build/nox-benchmark-regression-output.log
- name: Publish benchmark results to S3
if: always()
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }}
run: |
if [ -n "${AWS_ACCESS_KEY_ID}" ] && [ -n "${ASV_S3_BUCKET}" ]; then
pip install -q awscli
aws s3 sync build/asv/results/ "s3://${ASV_S3_BUCKET}/asv/results/" || echo "Failed to publish results to S3"
aws s3 sync build/asv/html/ "s3://${ASV_S3_BUCKET}/asv/html/" || echo "Failed to publish HTML to S3"
else
echo "Skipping S3 publish - AWS credentials not configured"
fi
- name: Upload benchmark log artifact
if: always()
uses: actions/upload-artifact@v3
with:
name: benchmark-regression-logs
path: build/nox-benchmark-regression-output.log
retention-days: 30
- name: Upload benchmark results artifact
if: always()
uses: actions/upload-artifact@v3
with:
name: benchmark-regression-results
path: |
build/asv/results/
build/asv/html/
retention-days: 90
benchmark-full:
if: github.event_name == 'schedule' && github.event.schedule == '0 3 * * 0' || github.event_name == 'workflow_dispatch' && github.event.inputs.run_full_suite == 'true'
runs-on: docker
timeout-minutes: 180
container:
image: python:3.13-slim
steps:
- name: Install system dependencies
run: |
apt-get update && apt-get install -y -qq nodejs git curl && rm -rf /var/lib/apt/lists/*
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install uv and nox
run: |
pip install -q uv==${{ env.UV_VERSION }} nox
- name: Cache uv packages
uses: actions/cache@v3
with:
path: ~/.cache/uv
key: uv-benchmark-full-${{ hashFiles('pyproject.toml') }}
restore-keys: |
uv-benchmark-full-
uv-benchmark-
uv-
- name: Sync benchmark results from S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }}
run: |
if [ -n "${AWS_ACCESS_KEY_ID}" ] && [ -n "${ASV_S3_BUCKET}" ]; then
pip install -q awscli
mkdir -p build/asv/results
aws s3 sync "s3://${ASV_S3_BUCKET}/asv/results/" build/asv/results/ || echo "No existing results to sync"
else
echo "Skipping S3 sync - AWS credentials not configured"
fi
- name: Run full benchmark suite via nox
env:
NOX_DEFAULT_VENV_BACKEND: uv
run: |
mkdir -p build
nox -s benchmark 2>&1 | tee build/nox-benchmark-full-output.log
- name: Publish benchmark results to S3
if: always()
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }}
run: |
if [ -n "${AWS_ACCESS_KEY_ID}" ] && [ -n "${ASV_S3_BUCKET}" ]; then
pip install -q awscli
aws s3 sync build/asv/results/ "s3://${ASV_S3_BUCKET}/asv/results/" || echo "Failed to publish results to S3"
aws s3 sync build/asv/html/ "s3://${ASV_S3_BUCKET}/asv/html/" || echo "Failed to publish HTML to S3"
else
echo "Skipping S3 publish - AWS credentials not configured"
fi
- name: Upload benchmark log artifact
if: always()
uses: actions/upload-artifact@v3
with:
name: benchmark-full-logs
path: build/nox-benchmark-full-output.log
retention-days: 30
- name: Upload benchmark results artifact
if: always()
uses: actions/upload-artifact@v3
with:
name: benchmark-full-results
path: |
build/asv/results/
build/asv/html/
retention-days: 90