Skip to main content

ghadiff

A Python CLI tool to compare two GitHub Actions workflow runs with detailed analysis of timing, status changes, and job differences.

Features

  • 🔍 Compare any two GitHub workflow runs
  • 📊 Detailed job and step-level analysis
  • ⏱️ Duration comparisons with percentage changes
  • 🎨 Multiple output formats: Text, JSON, Markdown, HTML
  • 🚀 Defaults to tenstorrent/tt-metal repository
  • 🔒 GitHub API token support with rate limit handling

Installation

From PyPI (once published)

pip install ghadiff

From source

git clone https://github.com/Aswintechie/ghadiff.git
cd ghadiff
pip install -e .

Quick Start

Prerequisites

You'll need a GitHub personal access token for API access:

  1. Go to GitHub Settings → Developer settings → Personal access tokens
  2. Generate a new token with repo and workflow scopes
  3. Set it as an environment variable:
export GITHUB_TOKEN=your_token_here

Basic Usage

Compare two workflow runs (defaults to tenstorrent/tt-metal):

ghadiff 12345678 12345679

The first argument is Run 1 (baseline), the second is Run 2 (comparison).

With Custom Repository

ghadiff 12345678 12345679 --repo owner/repo

Generate Reports

Text format (default):

ghadiff 12345678 12345679

JSON format:

ghadiff 12345678 12345679 --format json

Markdown format:

ghadiff 12345678 12345679 --format markdown -o report.md

HTML format:

ghadiff 12345678 12345679 --format html -o report.html

Output Examples

Text Format

================================================================================
GitHub Workflow Run Comparison
================================================================================

OVERVIEW
--------------------------------------------------------------------------------
Run 1: #1234 (12345678)
  Branch: main
  SHA: abc1234
  Status: completed / success
  Duration: 45.2m

Run 2: #1235 (12345679)
  Branch: main
  SHA: def5678
  Status: completed / success
  Duration: 38.7m

Duration Difference: -6.5m

JOBS COMPARISON
--------------------------------------------------------------------------------
Total jobs compared: 25
  In both runs: 25
  Only in Run 1: 0
  Only in Run 2: 0

build-and-test
   Run 1: ✅ success    - 12.3m
   Run 2: ✅ success    - 10.1m
   Diff:  -2.2m (-17.9%)

...

JSON Format

Full structured data with all workflow, job, and step details for programmatic access.

HTML Format

Beautiful, responsive HTML report with color-coded status indicators and sortable tables.

CLI Interface Example

ghadiff 12345678 12345679 \
  --repo tenstorrent/tt-metal \
  --format html \
  --output report.html

positional arguments: run1 First workflow run ID run2 Second workflow run ID

optional arguments: -h, --help show this help message and exit --repo REPO Repository in format owner/repo (default: tenstorrent/tt-metal) --token TOKEN GitHub personal access token (or use GITHUB_TOKEN env var) --format {text,json,markdown,html} Output format (default: text) --output OUTPUT, -o OUTPUT Output file (default: stdout) --verbose, -v Verbose output (text format only)


## Python API

You can also use the package programmatically:

```python
from workflow_compare import GitHubAPI, WorkflowComparator, Reporter

# Initialize API client
api = GitHubAPI(token="your_token", repo="tenstorrent/tt-metal")

# Fetch workflow runs
run1 = api.get_workflow_run_full(12345678)
run2 = api.get_workflow_run_full(12345679)

# Compare
comparator = WorkflowComparator(run1, run2)
comparison = comparator.get_full_comparison()

# Generate report
reporter = Reporter(comparison)
print(reporter.to_text())

Development

Setup Development Environment

git clone https://github.com/Aswintechie/ghadiff.git
cd ghadiff
pip install -e ".[dev]"

Run Tests

pytest

Code Formatting

black src/

Use Cases

  • Performance Regression Detection: Compare workflow runs before and after code changes
  • CI/CD Optimization: Identify which jobs got faster or slower
  • Debugging Failures: Compare a failing run with a successful baseline
  • Release Validation: Ensure new releases don't introduce timing regressions
  • Infrastructure Changes: Validate runner or environment changes

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License

Acknowledgments

Built for the Tenstorrent tt-metal project to improve CI/CD workflow analysis.

Release files for ghadiff 2.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ghadiff 2.1.3
File Size Uploaded
ghadiff-2.1.3.tar.gz 14.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ghadiff 2.1.3
File Interpreter ABI Platform
ghadiff-2.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 29.3 kB

Release files / ghadiff-2.1.3.tar.gz

Download URL ghadiff-2.1.3.tar.gz
Size 14.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d7f791cf091ed829a7ace2e4966ea31f01b265ee0d8ceb05c1e56de21cb74d7d
BLAKE2b-256 checksum
How to use checksums
22e13df01052fb9242dd50c1df3aefbc0c9f0df1ea9b6814e3e989cf29b3ced8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.14

Release files / ghadiff-2.1.3-py3-none-any.whl

Download URL ghadiff-2.1.3-py3-none-any.whl
Size 14.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ab451cd941e0adda27047996fe8d10f16ad1b154757850083bf2d6f396e04c4b
BLAKE2b-256 checksum
How to use checksums
9d694ab30b5af95b4d91b6e8f7933189aa5e360b2967c6e64c8fe9edfaa2480f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.14

Release history Release notifications | RSS feed

This release

2.1.3 This release

2 release files

2.1.2

2 release files

2.1.1

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page