repovet-cli 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 repovet contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,181 @@
1
+ Metadata-Version: 2.4
2
+ Name: repovet-cli
3
+ Version: 0.1.0
4
+ Summary: Vet a GitHub repo for fake stars, abandonment, risky install scripts and typosquatting. Radar for new repos in your stack.
5
+ Author: repovet contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/shivamkr06/repovet
8
+ Project-URL: Issues, https://github.com/shivamkr06/repovet/issues
9
+ Project-URL: Changelog, https://github.com/shivamkr06/repovet/blob/main/CHANGELOG.md
10
+ Keywords: github,fake-stars,supply-chain-security,typosquatting,repository-analysis,trust-score,dependency-vetting,trending-repositories,cli,developer-tools
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Security
23
+ Classifier: Topic :: Software Development :: Quality Assurance
24
+ Classifier: Topic :: Utilities
25
+ Requires-Python: >=3.9
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Dynamic: license-file
29
+
30
+ # repovet
31
+
32
+ **Check a GitHub repo for fake stars, abandonment, malware-style install scripts and typosquatting before you clone, install or depend on it. Also finds new repos that match your stack.**
33
+
34
+ [![CI](https://github.com/shivamkr06/repovet/actions/workflows/ci.yml/badge.svg)](https://github.com/shivamkr06/repovet/actions/workflows/ci.yml)
35
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
36
+ ![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)
37
+ ![Dependencies: none](https://img.shields.io/badge/dependencies-none-brightgreen)
38
+
39
+ Hundreds of new repos trend on GitHub every week. Some are great, some are abandoned, some
40
+ have bought their stars, and a few are malware with a nice README. `repovet` is a small
41
+ command-line **GitHub repository trust scorer** that tells you which is which in a few
42
+ seconds.
43
+
44
+ - **`repovet vet owner/repo`** gives a 0-100 trust score, a verdict, and the reasons.
45
+ - **`repovet radar`** lists recently created repos for the languages and topics your project uses.
46
+ - Pure Python standard library. No dependencies. Works on Windows, macOS and Linux.
47
+ - Output as text or `--json`. Exit code for CI gating with `--fail-under`.
48
+
49
+ ## Quick start
50
+
51
+ ```bash
52
+ pip install repovet-cli
53
+ ```
54
+
55
+ The command is `repovet`. From source instead:
56
+
57
+ ```bash
58
+ pip install git+https://github.com/shivamkr06/repovet.git
59
+ ```
60
+
61
+ ```bash
62
+ repovet vet psf/requests
63
+ ```
64
+
65
+ Without installing, from a clone:
66
+
67
+ ```bash
68
+ PYTHONPATH=src python -m repovet vet psf/requests
69
+ ```
70
+
71
+ ## Example
72
+
73
+ ```text
74
+ $ repovet vet psf/requests
75
+
76
+ psf/requests https://github.com/psf/requests
77
+ A simple, yet elegant, HTTP library.
78
+
79
+ LOOKS OK 100/100 [####################]
80
+
81
+ No red flags found.
82
+
83
+ Facts
84
+ stars / forks / watchers 55k / 11k / 1.3k
85
+ issues + PRs ever 7.6k
86
+ age / last push 5749d / 8d ago
87
+ license Apache-2.0
88
+ contributors 100+
89
+ top author nateprewitt (46% of recent commits)
90
+ latest release v2.34.2
91
+ ```
92
+
93
+ A repo with problems looks like this:
94
+
95
+ ```text
96
+ CAUTION 78/100 [################----]
97
+
98
+ [MEDIUM] Stale
99
+ No push in 514 days.
100
+ [LOW ] Low fork-to-star ratio
101
+ 9 forks vs 503 stars (1.8%). Real projects usually sit around 5-15%.
102
+ [LOW ] Single maintainer
103
+ m-ahmed-elbeskeri wrote 100% of the recent commits. If they leave, the project stops.
104
+ ```
105
+
106
+ ## What `vet` checks
107
+
108
+ | Area | Signals |
109
+ |---|---|
110
+ | **Fake stars** | fork-to-star and watcher-to-star ratios, stars with almost no issues or PRs, sudden star spikes, share of brand-new or empty stargazer accounts (needs a token) |
111
+ | **Maintenance** | archived or disabled, time since last push, commit count, project age |
112
+ | **People** | single-maintainer risk, owner account age and track record |
113
+ | **License** | missing, unrecognized, or restrictive (AGPL, SSPL, BUSL, non-commercial) |
114
+ | **Install risk** | `preinstall`/`postinstall` hooks, `setup.py` that runs commands, `curl \| sh`, encoded PowerShell, obfuscated `exec`, Discord/Telegram webhooks, hard-coded IPs, committed executables, password-protected archives mentioned in the README |
115
+ | **Identity** | same name as a bigger, older repo (typosquat or copy), forks, lookalike repos |
116
+
117
+ It also lists similar repos with the same topics so you can compare before choosing.
118
+
119
+ Scoring: start at 100, subtract 25 per high, 12 per medium, 5 per low finding. 80+ with no
120
+ high findings is `LOOKS OK`, 55+ is `CAUTION`, below that is `HIGH RISK`.
121
+
122
+ ## Use it in CI
123
+
124
+ Block a risky dependency before it lands:
125
+
126
+ ```bash
127
+ repovet vet owner/repo --fail-under 60
128
+ ```
129
+
130
+ Exit code is `2` when the score is below the threshold, `1` on errors, `0` otherwise.
131
+ `--json` prints the full report for scripts.
132
+
133
+ ## Radar: new repos for your stack
134
+
135
+ ```bash
136
+ repovet radar
137
+ ```
138
+
139
+ Reads `package.json`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml` and others
140
+ in the current folder, then lists recently created repos in those languages and topics.
141
+ Same-name clones are collapsed into one entry, and repos are ranked by stars per day with a
142
+ penalty for hollow-looking traction (many stars, almost no forks).
143
+
144
+ ```bash
145
+ repovet radar --lang Rust --topic cli --days 30 --min-stars 200
146
+ ```
147
+
148
+ ## GitHub token
149
+
150
+ Works without a token, but the anonymous API allows about 6 vets per hour and the
151
+ stargazer checks (fake accounts, star spikes) are skipped, because GitHub does not list
152
+ stargazers anonymously. To lift both limits, set `GITHUB_TOKEN` (or `GH_TOKEN`) to a token
153
+ with no scopes. Some tokens (seen on new GitHub accounts) get no stargazer data back from
154
+ GitHub; `repovet` then skips those two checks and says so in a note. If the `gh` CLI is installed and logged in, its token is used automatically.
155
+
156
+ Responses are cached for one hour in `~/.cache/repovet` (`--no-cache` to bypass,
157
+ `REPOVET_CACHE` to move it). The token is only ever sent to `api.github.com`.
158
+
159
+ ## Limits
160
+
161
+ These are heuristics. A flag is a reason to look closer, not proof of fraud, and a clean
162
+ score is not a security audit. The install check reads a handful of entry-point files, not
163
+ the whole codebase. Popular, legitimate projects can trip individual checks (a fast viral
164
+ launch looks like a star spike). Treat the verdict as triage.
165
+
166
+ ## Development
167
+
168
+ ```bash
169
+ python -m unittest discover -s tests
170
+ ```
171
+
172
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for how to add a check. Report security issues as
173
+ described in [SECURITY.md](SECURITY.md). Changes are listed in [CHANGELOG.md](CHANGELOG.md).
174
+
175
+ ## License
176
+
177
+ [MIT](LICENSE)
178
+
179
+ <sub>Keywords: github repository analyzer, fake github stars detector, repo trust score,
180
+ supply chain security, typosquatting detection, malicious repository checker, dependency
181
+ vetting, trending repositories, open source discovery.</sub>
@@ -0,0 +1,152 @@
1
+ # repovet
2
+
3
+ **Check a GitHub repo for fake stars, abandonment, malware-style install scripts and typosquatting before you clone, install or depend on it. Also finds new repos that match your stack.**
4
+
5
+ [![CI](https://github.com/shivamkr06/repovet/actions/workflows/ci.yml/badge.svg)](https://github.com/shivamkr06/repovet/actions/workflows/ci.yml)
6
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
7
+ ![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)
8
+ ![Dependencies: none](https://img.shields.io/badge/dependencies-none-brightgreen)
9
+
10
+ Hundreds of new repos trend on GitHub every week. Some are great, some are abandoned, some
11
+ have bought their stars, and a few are malware with a nice README. `repovet` is a small
12
+ command-line **GitHub repository trust scorer** that tells you which is which in a few
13
+ seconds.
14
+
15
+ - **`repovet vet owner/repo`** gives a 0-100 trust score, a verdict, and the reasons.
16
+ - **`repovet radar`** lists recently created repos for the languages and topics your project uses.
17
+ - Pure Python standard library. No dependencies. Works on Windows, macOS and Linux.
18
+ - Output as text or `--json`. Exit code for CI gating with `--fail-under`.
19
+
20
+ ## Quick start
21
+
22
+ ```bash
23
+ pip install repovet-cli
24
+ ```
25
+
26
+ The command is `repovet`. From source instead:
27
+
28
+ ```bash
29
+ pip install git+https://github.com/shivamkr06/repovet.git
30
+ ```
31
+
32
+ ```bash
33
+ repovet vet psf/requests
34
+ ```
35
+
36
+ Without installing, from a clone:
37
+
38
+ ```bash
39
+ PYTHONPATH=src python -m repovet vet psf/requests
40
+ ```
41
+
42
+ ## Example
43
+
44
+ ```text
45
+ $ repovet vet psf/requests
46
+
47
+ psf/requests https://github.com/psf/requests
48
+ A simple, yet elegant, HTTP library.
49
+
50
+ LOOKS OK 100/100 [####################]
51
+
52
+ No red flags found.
53
+
54
+ Facts
55
+ stars / forks / watchers 55k / 11k / 1.3k
56
+ issues + PRs ever 7.6k
57
+ age / last push 5749d / 8d ago
58
+ license Apache-2.0
59
+ contributors 100+
60
+ top author nateprewitt (46% of recent commits)
61
+ latest release v2.34.2
62
+ ```
63
+
64
+ A repo with problems looks like this:
65
+
66
+ ```text
67
+ CAUTION 78/100 [################----]
68
+
69
+ [MEDIUM] Stale
70
+ No push in 514 days.
71
+ [LOW ] Low fork-to-star ratio
72
+ 9 forks vs 503 stars (1.8%). Real projects usually sit around 5-15%.
73
+ [LOW ] Single maintainer
74
+ m-ahmed-elbeskeri wrote 100% of the recent commits. If they leave, the project stops.
75
+ ```
76
+
77
+ ## What `vet` checks
78
+
79
+ | Area | Signals |
80
+ |---|---|
81
+ | **Fake stars** | fork-to-star and watcher-to-star ratios, stars with almost no issues or PRs, sudden star spikes, share of brand-new or empty stargazer accounts (needs a token) |
82
+ | **Maintenance** | archived or disabled, time since last push, commit count, project age |
83
+ | **People** | single-maintainer risk, owner account age and track record |
84
+ | **License** | missing, unrecognized, or restrictive (AGPL, SSPL, BUSL, non-commercial) |
85
+ | **Install risk** | `preinstall`/`postinstall` hooks, `setup.py` that runs commands, `curl \| sh`, encoded PowerShell, obfuscated `exec`, Discord/Telegram webhooks, hard-coded IPs, committed executables, password-protected archives mentioned in the README |
86
+ | **Identity** | same name as a bigger, older repo (typosquat or copy), forks, lookalike repos |
87
+
88
+ It also lists similar repos with the same topics so you can compare before choosing.
89
+
90
+ Scoring: start at 100, subtract 25 per high, 12 per medium, 5 per low finding. 80+ with no
91
+ high findings is `LOOKS OK`, 55+ is `CAUTION`, below that is `HIGH RISK`.
92
+
93
+ ## Use it in CI
94
+
95
+ Block a risky dependency before it lands:
96
+
97
+ ```bash
98
+ repovet vet owner/repo --fail-under 60
99
+ ```
100
+
101
+ Exit code is `2` when the score is below the threshold, `1` on errors, `0` otherwise.
102
+ `--json` prints the full report for scripts.
103
+
104
+ ## Radar: new repos for your stack
105
+
106
+ ```bash
107
+ repovet radar
108
+ ```
109
+
110
+ Reads `package.json`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml` and others
111
+ in the current folder, then lists recently created repos in those languages and topics.
112
+ Same-name clones are collapsed into one entry, and repos are ranked by stars per day with a
113
+ penalty for hollow-looking traction (many stars, almost no forks).
114
+
115
+ ```bash
116
+ repovet radar --lang Rust --topic cli --days 30 --min-stars 200
117
+ ```
118
+
119
+ ## GitHub token
120
+
121
+ Works without a token, but the anonymous API allows about 6 vets per hour and the
122
+ stargazer checks (fake accounts, star spikes) are skipped, because GitHub does not list
123
+ stargazers anonymously. To lift both limits, set `GITHUB_TOKEN` (or `GH_TOKEN`) to a token
124
+ with no scopes. Some tokens (seen on new GitHub accounts) get no stargazer data back from
125
+ GitHub; `repovet` then skips those two checks and says so in a note. If the `gh` CLI is installed and logged in, its token is used automatically.
126
+
127
+ Responses are cached for one hour in `~/.cache/repovet` (`--no-cache` to bypass,
128
+ `REPOVET_CACHE` to move it). The token is only ever sent to `api.github.com`.
129
+
130
+ ## Limits
131
+
132
+ These are heuristics. A flag is a reason to look closer, not proof of fraud, and a clean
133
+ score is not a security audit. The install check reads a handful of entry-point files, not
134
+ the whole codebase. Popular, legitimate projects can trip individual checks (a fast viral
135
+ launch looks like a star spike). Treat the verdict as triage.
136
+
137
+ ## Development
138
+
139
+ ```bash
140
+ python -m unittest discover -s tests
141
+ ```
142
+
143
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for how to add a check. Report security issues as
144
+ described in [SECURITY.md](SECURITY.md). Changes are listed in [CHANGELOG.md](CHANGELOG.md).
145
+
146
+ ## License
147
+
148
+ [MIT](LICENSE)
149
+
150
+ <sub>Keywords: github repository analyzer, fake github stars detector, repo trust score,
151
+ supply chain security, typosquatting detection, malicious repository checker, dependency
152
+ vetting, trending repositories, open source discovery.</sub>
@@ -0,0 +1,44 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "repovet-cli"
7
+ version = "0.1.0"
8
+ description = "Vet a GitHub repo for fake stars, abandonment, risky install scripts and typosquatting. Radar for new repos in your stack."
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "repovet contributors" }]
13
+ keywords = [
14
+ "github", "fake-stars", "supply-chain-security", "typosquatting", "repository-analysis",
15
+ "trust-score", "dependency-vetting", "trending-repositories", "cli", "developer-tools",
16
+ ]
17
+ classifiers = [
18
+ "Development Status :: 3 - Alpha",
19
+ "Environment :: Console",
20
+ "Intended Audience :: Developers",
21
+ "License :: OSI Approved :: MIT License",
22
+ "Operating System :: OS Independent",
23
+ "Programming Language :: Python :: 3",
24
+ "Programming Language :: Python :: 3.9",
25
+ "Programming Language :: Python :: 3.10",
26
+ "Programming Language :: Python :: 3.11",
27
+ "Programming Language :: Python :: 3.12",
28
+ "Programming Language :: Python :: 3.13",
29
+ "Topic :: Security",
30
+ "Topic :: Software Development :: Quality Assurance",
31
+ "Topic :: Utilities",
32
+ ]
33
+ dependencies = []
34
+
35
+ [project.urls]
36
+ Homepage = "https://github.com/shivamkr06/repovet"
37
+ Issues = "https://github.com/shivamkr06/repovet/issues"
38
+ Changelog = "https://github.com/shivamkr06/repovet/blob/main/CHANGELOG.md"
39
+
40
+ [project.scripts]
41
+ repovet = "repovet.cli:main"
42
+
43
+ [tool.setuptools.packages.find]
44
+ where = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """repovet: vet a GitHub repo before you trust it."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,3 @@
1
+ from .cli import main
2
+
3
+ raise SystemExit(main())