o11ykit

pipeline layer

GitHub activity →
telemetry you can graph.

GitHub Actions that extract benchmark data from logs or files, stash run artifacts to a data branch, aggregate history into indexes and time-series, and serve it all through GitHub's CDN. No backend. No server. Just Git.

The Pipeline

⚙️
Workflow Run
CI produces benchmark output in logs or files
parse-results
Detect format, normalize to OTLP JSON
stash
Commit to data branch with collision-safe run IDs
aggregate
Rebuild indexes, series, and per-run detail views
📊
Dashboard
Client-side chart from GitHub raw CDN

Actions

parse-results

Reads benchmark output from files or workflow logs. Auto-detects Go, Rust, Hyperfine, pytest-benchmark, or OTLP format. Normalizes to OTLP JSON.

stash

Glob-expands result files, merges monitor telemetry, commits to the data branch with retry logic (up to 5 attempts on conflict).

aggregate

Reads all run artifacts. Builds index.json, per-metric series files, ref/PR views, and Shields.io badge endpoints.

repo-stats

Collects stars, forks, contributors, issues, PRs, releases, workflow success %, and language breakdown as OTLP metrics.

ingest-ci-runs

Discovers completed workflow runs for scheduled benchmark ingestion — daily nightly benchmarks, weekly rollups.

emit-metric

One-off lightweight metric emission without a full OTLP SDK. One CLI call to benchkit-emit.

Quickstart

name: benchmark-pipeline
on: [workflow_dispatch]

permissions:
  contents: write
  actions: read

jobs:
  run-benchmarks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: go test ./... -bench=. | tee bench.txt
      - uses: strawgate/o11ykit/octo11y/actions/parse-results@main-dist
        with:
          mode: file
          results: bench.txt
          format: go
          github-token: ${{ github.token }}
      - uses: strawgate/o11ykit/octo11y/actions/aggregate@main-dist
        with:
          github-token: ${{ github.token }}

What You Get

A clean data branch with structured artifacts, served through GitHub's CDN:

bench-data/
├── data/
│ ├── index.json — summary of all runs
│ ├── series/ — per-metric time-series files
│ ├── index/ — refs.json, prs.json for navigation
│ ├── views/runs/{id}/ — per-run detail views
│ ├── badges/ — Shields.io endpoint JSON
│ └── runs/{run-id}/ — immutable run artifacts
│ ├── benchmark.otlp.json
│ └── telemetry.otlp.jsonl.gz