Analyze any GitHub repository from the command line — language breakdown, contributors, health score, and more.
Project description
repo-analyzer
A fast CLI tool for GitHub repository due diligence. It analyzes repository health, engineering hygiene, ownership risk, contributor signals, and recruiter-facing trust indicators directly from the terminal.
$ repo-analyzer https://github.com/facebook/react --recruiter
Install
pip install repo-analyzer
Or clone and install locally:
git clone https://github.com/khodorrHajj/GithubRepoAnalyzer.git
cd GithubRepoAnalyzer
pip install -e .
Usage
Analyze a repo
repo-analyzer https://github.com/pallets/flask
Recruiter mode
repo-analyzer https://github.com/pallets/flask --recruiter
Compare two repos
repo-analyzer compare https://github.com/pallets/flask https://github.com/django/django
Export to JSON
repo-analyzer https://github.com/torvalds/linux --export json
Export to PDF
repo-analyzer https://github.com/torvalds/linux --export pdf -o report.pdf
Skip cache
repo-analyzer https://github.com/pallets/flask --no-cache
GitHub Token
Without a token you are limited to 60 API requests per hour. With a token you get 5,000.
Create a local .env file:
GITHUB_TOKEN=ghp_your_token_here
Or export it in your shell:
export GITHUB_TOKEN=ghp_your_token_here
The token is loaded from the user machine at runtime. It is not bundled into the package by default.
What makes it different
- Decision-ready verdicts with strengths, concerns, and concrete recommendations.
- Contributor risk analysis with lead contributor share, bus factor, and ownership concentration.
- Engineering hygiene checks for CI, tests, README, CONTRIBUTING, SECURITY, CODEOWNERS, issue templates, PR templates, releases, and changelog presence.
- Repository scorecard covering maintainability, collaboration, production readiness, onboarding quality, and overall health.
- Trend-aware activity analysis across recent windows instead of only a single snapshot.
- Recruiter mode for evaluating candidate and portfolio repositories with hiring-oriented signals.
- Side-by-side comparison output that includes stronger decision metrics, not only stars and forks.
Health Score
The health score is a weighted average of five factors:
| Factor | Weight | What it looks at |
|---|---|---|
| Activity | 2.0 | Recent commits and last push recency |
| Community | 2.0 | Stars, forks, and contributor count |
| Maintenance | 2.0 | Open issues, PR pressure, and freshness |
| Quality | 2.5 | CI, tests, docs, license, and operational hygiene |
| Documentation | 1.5 | README, description, topics, and discoverability |
Project Structure
repo_analyzer/
cli.py
api.py
analyzer.py
health.py
display.py
cache.py
compare.py
export.py
tests/
Running Tests
pip install -e ".[dev]"
pytest -k "not Live"
Run the full suite, including live GitHub API checks, only when network access is available:
pytest
Built With
- Click
- Rich
- Requests
- fpdf2
- pytest
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
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 repo_analyzer-5.1.0.tar.gz.
File metadata
- Download URL: repo_analyzer-5.1.0.tar.gz
- Upload date:
- Size: 31.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6a2ed9e138f856df68b3b2f3cc91ca3c88b36c5ccf2332968fdd294924df17e
|
|
| MD5 |
0c70fe78235ba55832517f82ad1970db
|
|
| BLAKE2b-256 |
4c9f3f5c3760322f51590fe1da2c4f56e86d1c2c9bd3e81e01521d3637122a9f
|
Provenance
The following attestation bundles were made for repo_analyzer-5.1.0.tar.gz:
Publisher:
publish.yml on khodorrHajj/GithubRepoAnalyzer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repo_analyzer-5.1.0.tar.gz -
Subject digest:
a6a2ed9e138f856df68b3b2f3cc91ca3c88b36c5ccf2332968fdd294924df17e - Sigstore transparency entry: 1382436406
- Sigstore integration time:
-
Permalink:
khodorrHajj/GithubRepoAnalyzer@2dcae7f9350687005414c95144779cb64f600976 -
Branch / Tag:
refs/tags/v5.1.0 - Owner: https://github.com/khodorrHajj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2dcae7f9350687005414c95144779cb64f600976 -
Trigger Event:
release
-
Statement type:
File details
Details for the file repo_analyzer-5.1.0-py3-none-any.whl.
File metadata
- Download URL: repo_analyzer-5.1.0-py3-none-any.whl
- Upload date:
- Size: 20.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d0f3b0e369c0ad20ff0413228f7fb31605ac7190300b9c285d4a23b63bca4ed
|
|
| MD5 |
12304460fcfcdf74e63127ac6dd3c111
|
|
| BLAKE2b-256 |
675c57af56183f48163e1bd3a16c0ddeb8356198267fb948e7ff2ac6a261ba3c
|
Provenance
The following attestation bundles were made for repo_analyzer-5.1.0-py3-none-any.whl:
Publisher:
publish.yml on khodorrHajj/GithubRepoAnalyzer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repo_analyzer-5.1.0-py3-none-any.whl -
Subject digest:
4d0f3b0e369c0ad20ff0413228f7fb31605ac7190300b9c285d4a23b63bca4ed - Sigstore transparency entry: 1382436412
- Sigstore integration time:
-
Permalink:
khodorrHajj/GithubRepoAnalyzer@2dcae7f9350687005414c95144779cb64f600976 -
Branch / Tag:
refs/tags/v5.1.0 - Owner: https://github.com/khodorrHajj
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2dcae7f9350687005414c95144779cb64f600976 -
Trigger Event:
release
-
Statement type: