bruno-dasilva/bar-benchmarks

Run a Beyond All Reason performance scenario across N identical GCP Batch VMs and collect aggregate stats. Wraps `bar-bench run` as a composite action; expects Google Cloud ADC to already be configured in the job (e.g. via google-github-actions/auth@v2).

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jun 18, 2026
License
None

Pinned Snippet

workflow.ymlSHA-pinned
uses: bruno-dasilva/bar-benchmarks@9a28fb23a34f34fe86d0a4d723559f225f858f52 # no releases — HEAD as of 2026-07-11

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
scenarioFolder name under benchmarks/ (e.g. lategame1).yes
mapMap catalog name (e.g. hellas-basin-v1.4).yes
engineEngine catalog name from artifacts.toml. Mutually exclusive with engine-commit.no""
engine-commitRecoilEngine commit SHA (>=7 chars hex). Ad-hoc; synthesizes a catalog entry.no""
engine-repoGitHub repo to query for the "Build Engine v2" run + artifact when building from a commit. Forwarded to scripts/build-engine.sh --repo. Only meaningful with engine-commit. Defaults to the calling workflow's own repo so the action works unchanged on a fork; set explicitly to point at a different RecoilEngine fork.no${{ github.repository }}
bar-contentBar-content catalog name. Mutually exclusive with bar-content-version.no""
bar-content-versionFull BAR content version string, e.g. 'Beyond All Reason test-29871-90f4bc1'. Ad-hoc; synthesizes a catalog entry.no""
countNumber of Batch VMs (tasks) to spawn.no20
iterationsEngine invocations per VM after staging. Each iteration produces a separate benchmark result, at the cost of roughly one engine wall time per iter. Staging cost (engine + bar-content + overlay + map) is paid once. Bump max-run-duration accordingly.no1
descriptionOne-line free-form description shown in the aggregate report.no""
gcp-projectGCP project ID that owns the Batch job + buckets.yes
gcp-regionGCP region for the Batch job.nous-central1
artifacts-bucketgs:// URI of the artifacts bucket.nogs://bar-experiments-bench-artifacts
results-bucketgs:// URI of the results bucket.nogs://bar-experiments-bench-results
machine-typeGCE machine type for each VM. Default is c2d-standard-16 (16 vCPU, AMD EPYC Milan), which matches the orchestrator's per-task CPU claim so each benchmark gets a whole VM.noc2d-standard-16
service-accountService account email to attach to Batch VMs. Default derives from gcp-project.no""
max-run-durationPer-task Batch timeout in seconds.no1800
github-tokenToken used by scripts/build-engine.sh to download RecoilEngine GitHub Actions artifacts. Required only when engine-commit is set and the engine tarball is not already cached. For cross-repo access you may need a PAT with `actions:read` on beyond-all-reason/RecoilEngine.no${{ github.token }}
lookup-prior-resultsIf 'true', aggregate the rolling window of recent matching runs (same engine, bar-content, map, scenario, machine-type) and skip a fresh Batch submission when the pool already has at least lookup-min-samples valid results. The rolling aggregate is what the action's mean-ms / p95-ms / etc. outputs reflect either way — with or without a fresh run on top.nofalse
lookup-scan-limitMax recent job UIDs to inspect when lookup-prior-results is true.no250
lookup-min-samplesSkip the Batch submission when the rolling window has at least this many valid results.no50
namedescription
job-uidBatch job UID, e.g. bar-bench-1713831234-a1b2c3.
prior-run-hit'true' if lookup-prior-results found a match and skipped the Batch run.
results-gcs-urigs:// prefix under which per-task results.json blobs live.
report-json-pathPath to the full structured BatchReport JSON on the runner.
mean-msAcross-VM mean sim frame time in milliseconds.
p95-msAcross-VM p95 sim frame time in milliseconds.
median-msAcross-VM median sim frame time in milliseconds.
stddev-msPooled across-VM sim frame time stddev in milliseconds.
valid-countNumber of VMs that produced a valid results.json.
invalid-countNumber of VMs that failed or uploaded an invalid results.json.