A CLI tool that analyzes GitHub repository health and generates quality reports.
Project description
RepoPulse
RepoPulse is a Python CLI that scans GitHub repositories (or a local folder) and produces a practical health report: score out of 100, pass/warn/fail checks, and actionable recommendations.
It is built for developers who want a quick quality review from the terminal, and for maintainers who want a small tool in CI, release prep, or issue triage.
| Name | |
|---|---|
| Install from PyPI | repopulse-cli |
| CLI command | repopulse |
| Python import | repopulse |
Important: Do not run
pip install repopulse. That installs an unrelated package on PyPI. Always userepopulse-cli.
Install (for users)
pip install repopulse-cli
repopulse --help
Upgrade:
pip install -U repopulse-cli
Optional isolated environment (recommended if other tools pin different dependency versions):
python -m venv .venv
# Windows PowerShell:
.\.venv\Scripts\Activate.ps1
# macOS / Linux:
# source .venv/bin/activate
pip install repopulse-cli
From a GitHub Release wheel (if you prefer not to use PyPI):
pip install https://github.com/3ssiri/RepoPulse/releases/download/v0.3.1/repopulse_cli-0.3.1-py3-none-any.whl
Full install notes: INSTALLATION.md.
Quick start
# Local directory (offline — no GitHub API)
repopulse scan .
# Public GitHub repository
repopulse scan https://github.com/psf/requests
# Specific branch or tag (no local checkout)
repopulse scan https://github.com/psf/requests/tree/main
repopulse scan https://github.com/psf/requests --ref v2.32.0
# CI gate
repopulse scan https://github.com/username/repository --fail-under 75 --format summary --quiet
# Compare two refs or checkouts
repopulse compare \
https://github.com/owner/repo/tree/main \
https://github.com/owner/repo/tree/feature/pr-42 \
--fail-on-regression
# Preview GitHub issues from fail/warn checks
repopulse create-issues https://github.com/owner/repo --dry-run
Private repos: pass --token or set GITHUB_TOKEN. Details: USAGE.md.
Features (current)
Scanning
- Scan public GitHub repositories by URL.
- Scan a local directory offline:
repopulse scan .(no API, no rate limits). - Scan a specific branch, tag, or commit via URL (
/tree/<ref>,/releases/tag/<tag>) or--ref. - Scan private repositories with
--tokenorGITHUB_TOKEN. - Shared check pipeline for remote and local sources.
Reports and output
- Score out of 100 with grades (Excellent → Critical).
- Rich terminal table (default).
- Formats:
table,summary,markdown,json,issues. - Export Markdown (
--export) and write any format to a file (--output). - Stable JSON contract (
schema_version1.0) — see docs/json-schema.md. - Richer Markdown: pass/warn/fail counts, attention sections, applied config.
Compare
repopulse compare <baseline> <target>— local paths and/or GitHub URLs.- Per-side refs: tree URLs or
--baseline-ref/--target-ref. - Formats:
table,markdown,json,summary. - CI gate:
--fail-on-regression(exit code2if score drops or any check regresses).
Issues and automation
--format issues— paste-ready Markdown for fail/warn checks.repopulse create-issues— open real GitHub issues (--dry-runor--yes).- CI example: examples/github-action-repopulse.yml.
- Optional config
.repopulse.ymlwith profiles:strict,library,docs,release.
Safety
- Detects common sensitive file names (
.env, keys, credentials) without printing file contents. - Advisory dependency and security baseline checks (recommendations; do not change the 100-point score by default).
Commands
| Command | Purpose |
|---|---|
repopulse scan <url-or-path> |
Health report for one repository or folder. |
repopulse compare <baseline> <target> |
Diff two health reports. |
repopulse create-issues <url-or-path> |
Create GitHub issues from fail/warn checks. |
Configuration
RepoPulse reads .repopulse.yml from the current directory when present, or via --config:
repopulse scan . --config examples/repopulse.yml
profile: release # optional: strict | library | docs | release
fail_under: 90
disabled_checks:
- activity
weights:
tests: 25
github_actions: 20
Ready-made profiles: examples/profiles/.
Scoring (default weights)
| Check | Points |
|---|---|
| README Quality | 20 |
| License | 10 |
| .gitignore | 10 |
| Tests | 15 |
| GitHub Actions | 15 |
| Recent Activity | 10 |
| Sensitive Files | 10 |
| Project Structure | 5 |
| Package Scripts | 5 |
| Score | Grade |
|---|---|
| 90–100 | Excellent |
| 75–89 | Good |
| 60–74 | Fair |
| 40–59 | Weak |
| 0–39 | Critical |
Dependency and security baseline checks are advisory: they add recommendations without changing the scored total.
Full check reference: docs/checks.md.
Example output
RepoPulse Health Report for psf/requests
Score: 91 / 100 - Excellent
Checks
README Quality PASS 16/20
License PASS 10/10
.gitignore PASS 10/10
Tests WARN 12/15
GitHub Actions PASS 15/15
Install for contributors / from source
git clone https://github.com/3ssiri/RepoPulse.git
cd RepoPulse
pip install -e ".[dev]"
pytest
See CONTRIBUTING.md and INSTALLATION.md.
Documentation
| Doc | Contents |
|---|---|
| INSTALLATION.md | PyPI, wheel, source, tokens, troubleshooting |
| USAGE.md | All commands, flags, CI, config, exit codes |
| REQUIREMENTS.md | Runtime and dev dependencies |
| docs/checks.md | What each check evaluates |
| docs/json-schema.md | JSON report contract |
| docs/PUBLISHING.md | Releases and PyPI publishing (maintainers) |
| docs/roadmap.md | Product roadmap |
| ARCHITECTURE.md | How the code is structured |
| CHANGELOG.md | Version history |
| README.ar.md | Arabic summary |
| README.es-ES.md | Spanish summary |
Requirements
- Python 3.11+
- Network access to
api.github.comfor remote scans - GitHub token for private repos, higher rate limits, or
create-issues --yes
Contributing
Contributions are welcome. Keep checks independent, return CheckResult, and add focused tests.
See CONTRIBUTING.md.
License
MIT — see LICENSE.
Links
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 repopulse_cli-0.3.2.tar.gz.
File metadata
- Download URL: repopulse_cli-0.3.2.tar.gz
- Upload date:
- Size: 41.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaa6cbdfb164cfde34a325a686a4aec94fcfd80d06bb85862029f674c74af75f
|
|
| MD5 |
cb344c6acb24928f90506fc46b213c56
|
|
| BLAKE2b-256 |
e23deb898378946d68b41406fe044c71e08b61ef135273f6c73a86a0ce24ebd1
|
Provenance
The following attestation bundles were made for repopulse_cli-0.3.2.tar.gz:
Publisher:
release.yml on 3ssiri/RepoPulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repopulse_cli-0.3.2.tar.gz -
Subject digest:
eaa6cbdfb164cfde34a325a686a4aec94fcfd80d06bb85862029f674c74af75f - Sigstore transparency entry: 2337678701
- Sigstore integration time:
-
Permalink:
3ssiri/RepoPulse@aaf9d46dc9be554f17a349b3d13743fbb183a2cc -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/3ssiri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@aaf9d46dc9be554f17a349b3d13743fbb183a2cc -
Trigger Event:
push
-
Statement type:
File details
Details for the file repopulse_cli-0.3.2-py3-none-any.whl.
File metadata
- Download URL: repopulse_cli-0.3.2-py3-none-any.whl
- Upload date:
- Size: 36.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fbce850dd10a1fb84bcd796523960f0d124ce3091575f5a5c5dd0e2f37168a2
|
|
| MD5 |
03d8854953ab309e54e21d84dd8d83a5
|
|
| BLAKE2b-256 |
081cbd13818e5d3ebd2958af70f275278f1d5b012ddcbd1c2b09e1a95943ebcd
|
Provenance
The following attestation bundles were made for repopulse_cli-0.3.2-py3-none-any.whl:
Publisher:
release.yml on 3ssiri/RepoPulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repopulse_cli-0.3.2-py3-none-any.whl -
Subject digest:
3fbce850dd10a1fb84bcd796523960f0d124ce3091575f5a5c5dd0e2f37168a2 - Sigstore transparency entry: 2337678705
- Sigstore integration time:
-
Permalink:
3ssiri/RepoPulse@aaf9d46dc9be554f17a349b3d13743fbb183a2cc -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/3ssiri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@aaf9d46dc9be554f17a349b3d13743fbb183a2cc -
Trigger Event:
push
-
Statement type: