Skip to content

perf-nightly

perf-nightly #3

Workflow file for this run

name: perf-nightly
# Scheduled (Docker-free) performance-regression check. Runs the SAME
# `bin/ze-perf track --check` timing check (convergence / throughput / p99) over
# the committed NDJSON history that `make ze-perf-gate` uses -- referenced, not
# duplicated. Ported from .woodpecker/perf-nightly.yml.
#
# Scheduled-only by design: timing metrics are machine-dependent and noisy across
# CI hosts, so they must NOT gate push/pull_request merges. The always-run,
# deterministic allocs/op gate is `make ze-alloc-gate`, wired into `make ze-verify`
# (and so into verify.yml). The heavy Docker throughput/p99 DUT matrix stays in
# `make ze-perf-gate`; this job needs no Docker.
#
# The cron lives IN this file, so merging it creates the schedule.
# `workflow_dispatch` is the manual re-trigger.
on:
schedule:
- cron: "42 3 * * *"
workflow_dispatch:
permissions:
contents: read
jobs:
perf-regression-check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Install system packages
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends build-essential git make python3
# Build the ze-perf binary (cmd/ze with the ze_perf tag); Docker-free.
- name: Build ze-perf
run: make perf
# Docker-free timing regression check over stored history. With no history
# recorded yet the job reports and passes -- nothing to regress against, and
# this scheduled job never blocks a merge.
- name: Perf regression check
run: |
if [ -s test/perf/history/ze.ndjson ]; then
bin/ze-perf track --check test/perf/history/ze.ndjson
else
echo "no perf history (test/perf/history/ze.ndjson); nothing to check"
fi