← All tools

suzuki-shunsuke/ghaperf

Popularity 75 Updated Development & Build

ghaperf is a CLI to analyze the performance of GitHub Actions using GitHub API and raw job logs

githubauto-collected

Installation

A directly usable install command is not verified yet. Check the project documentation or releases.

ghaperf

ghaperf analyzes the performance of GitHub Actions workflows using GitHub API and raw job logs. Unlike other tools, it can detect bottlenecks inside composite actions by parsing job logs and extracting step-level timing data.

Why ghaperf?

  • Existing tools can't detect bottlenecks inside steps. ghaperf solves this by analyzing actions logs.
  • Many existing tools need metrics storage, so the setup is bothersome and it costs 💸. ghaperf doesn't need any storage, so it's easy to use and free

Key Features

  • Deep visibility into composite actions - Detect bottlenecks inside composite actions that other tools miss
  • No infrastructure needed - Just a CLI tool, no backend or metrics storage required
  • Multiple analysis modes - Analyze workflows, workflow runs, or individual jobs
  • Markdown reports - Generate shareable performance reports
  • Intelligent caching - Cache GitHub API responses for completed runs to speed up analysis
  • Flexible filtering - Filter and normalize job names using configuration files

Quick Start

  • Install ghaperf
  • Set your GitHub Access token to download action logs
  • Run ghaperf
export GITHUB_TOKEN=xxx

# Analyze a workflow across multiple runs
ghaperf --repo aquaproj/aqua-registry --workflow test.yaml --count 10 --threshold 2s

Example Report

<details <summaryExample Report Output</summary

This report was generated by ghaperf. <table <tr<tdghaperf version</td<td<a href="https://github.com/suzuki-shunsuke/ghaperf/releases/tag/v0.1.1"v0.1.1</a</td</tr <tr<tdCreated At</td<td2025-11-02T21:03:34+09:00</td</tr <tr<tdThreshold</td<td2s</td</tr <tr<tdRepository</td<td<a href="https://github.com/aquaproj/aqua-registry"aquaproj/aqua-registry</a</td</tr <tr<tdThe Number of Workflow Runs</td<td10</td</tr <tr<tdWorkflow Name</td<tdtest.yaml</td</tr </table

Job: test / test / test (macos-13)

<table <tr<tdAverage Job Duration</td<td1m15s (11m11s/9)</td</tr <tr<tdSlowest Jobs</td<td<a href="https://github.com/aquaproj/aqua-registry/actions/runs/19007740980/job/54284198226"8m25s</a, <a href="https://github.com/aquaproj/aqua-registry/actions/runs/19008352862/job/54285609922"24s</a, <a href="https://github.com/aquaproj/aqua-registry/actions/runs/19010028182/job/54289608586"23s</a</td</tr </table

Slow steps

  • 1m4s (8m31s/8): Run aquaproj/registry-action/test@68f10339de561d67f9acea40b91dc36aa5011ea8
  • 1m36s (7m58s/5): Run aqua i --test
  • 16s (16s/1): Run rustup update
  • 6s (48s/8): Set up job
  • 6s (49s/8): GITHUBTOKEN Permissions
  • 4s (30s/8): Run actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
  • 4s (29s/8): Run aquaproj/aqua-installer@ea518c135a02fc11ff8024364510c181a5c6b342
  • 3s (21s/8): Run if [ "${SKIPINSTALLAQUA:-}" = true ] && command -v aqua /dev/null; then

Job: test / test / test (windows-latest, arm64)