Compare GitHub workflow runs with detailed analysis
Project description
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-metalrepository - 🔒 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:
- Go to GitHub Settings → Developer settings → Personal access tokens
- Generate a new token with
repoandworkflowscopes - 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
Links
- Repository: https://github.com/Aswintechie/ghadiff
- Issues: https://github.com/Aswintechie/ghadiff/issues
- PyPI: https://pypi.org/project/ghadiff/
Acknowledgments
Built for the Tenstorrent tt-metal project to improve CI/CD workflow analysis.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ghadiff-0.1.0.tar.gz.
File metadata
- Download URL: ghadiff-0.1.0.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd1fe3520b7da01146f4b2f775c632740800b0dc76802cbb20f924288adfac20
|
|
| MD5 |
81a511d74aa889b965735dc973d67699
|
|
| BLAKE2b-256 |
d3be64df093e3e8fc8c74cf9e554c1d8b431e5f112dbf363c0474ea4e953ad97
|
File details
Details for the file ghadiff-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ghadiff-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6789d97c062b666107d1c1bdf4054596aacf10a762db9a416c4fd83a2ab83576
|
|
| MD5 |
91a0c0bf83f90c3b69ad64986f145e12
|
|
| BLAKE2b-256 |
4a3613e76ca50862750a024bbf99a7a1dd34e9077ff7e0eb7a3aad2b9b97238e
|