Benchmark workflow (hyperium/hyper)
The Benchmark workflow from hyperium/hyper, explained and optimized by Latchkey.
CI health: C - fair
Point runs-on at Latchkey and get run de-duplication, job timeouts, SHA-pinned actions, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the Benchmark workflow from the hyperium/hyper repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: Benchmark
on:
push:
branches:
- master
jobs:
benchmark:
name: Benchmark
runs-on: ubuntu-latest
strategy:
matrix:
bench:
- end_to_end
- pipeline
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@nightly
# Run benchmark and stores the output to a file
- name: Run benchmark
run: cargo bench --features full --bench ${{ matrix.bench }} | tee output.txt
# Download previous benchmark result from cache (if exists)
- name: Download previous benchmark data
uses: actions/cache@v3
with:
path: ./cache
key: ${{ runner.os }}-benchmark
# Run `github-action-benchmark` action
- name: Store benchmark result
uses: seanmonstar/github-action-benchmark@v1-patch-1
with:
name: ${{ matrix.bench }}
# What benchmark tool the output.txt came from
tool: 'cargo'
# Where the output from the benchmark tool is stored
output-file-path: output.txt
# # Where the previous data file is stored
# external-data-json-path: ./cache/benchmark-data.json
# Workflow will fail when an alert happens
fail-on-alert: true
# GitHub API token to make a commit comment
github-token: ${{ secrets.GITHUB_TOKEN }}
# Enable alert commit comment
comment-on-alert: true
#alert-comment-cc-users: '@seanmonstar'
auto-push: true
# Upload the updated cache file for the next job by actions/cache
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: Benchmark on: push: branches: - master concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: benchmark: timeout-minutes: 30 name: Benchmark runs-on: latchkey-small strategy: matrix: bench: - end_to_end - pipeline steps: - uses: actions/checkout@v6 - name: Install Rust uses: dtolnay/rust-toolchain@nightly # Run benchmark and stores the output to a file - name: Run benchmark run: cargo bench --features full --bench ${{ matrix.bench }} | tee output.txt # Download previous benchmark result from cache (if exists) - name: Download previous benchmark data uses: actions/cache@v3 with: path: ./cache key: ${{ runner.os }}-benchmark # Run `github-action-benchmark` action - name: Store benchmark result uses: seanmonstar/github-action-benchmark@v1-patch-1 with: name: ${{ matrix.bench }} # What benchmark tool the output.txt came from tool: 'cargo' # Where the output from the benchmark tool is stored output-file-path: output.txt # # Where the previous data file is stored # external-data-json-path: ./cache/benchmark-data.json # Workflow will fail when an alert happens fail-on-alert: true # GitHub API token to make a commit comment github-token: ${{ secrets.GITHUB_TOKEN }} # Enable alert commit comment comment-on-alert: true #alert-comment-cc-users: '@seanmonstar' auto-push: true # Upload the updated cache file for the next job by actions/cache
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Cancel superseded runs when a branch or PR gets a newer push.
- Add a job timeout so a hung step cannot burn hours of runner time.
2 third-party actions are referenced by a movable tag. Pin them to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.
This workflow runs 1 job (2 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.