repofail 0.2.2__tar.gz → 0.2.3__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.
- repofail-0.2.3/Formula/repofail.rb +65 -0
- {repofail-0.2.2 → repofail-0.2.3}/PKG-INFO +10 -4
- {repofail-0.2.2 → repofail-0.2.3}/README.md +9 -3
- {repofail-0.2.2 → repofail-0.2.3}/pyproject.toml +1 -1
- {repofail-0.2.2 → repofail-0.2.3}/repofail/cli.py +3 -2
- {repofail-0.2.2 → repofail-0.2.3}/.github/workflows/publish.yml +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/.github/workflows/repofail.yml +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/.gitignore +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/CONTRIBUTING.md +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/RULES.md +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/contract.json +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/docs/assets/demo-autogpt.png +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/docs/assets/repofail-logo.png +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/docs/logo.png +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/docs/screenshots/high_failure.png +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/docs/screenshots/nodefail.gif +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/__init__.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/contract.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/engine.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/fleet.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/format.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/models.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/risk.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/__init__.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/abi_wheel_mismatch.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/apple_silicon.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/base.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/docker_only.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/gpu_memory.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/info_signals.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/lock_file_missing.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/ml_niche.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/native_toolchain.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/node_engine.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/node_eol.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/node_windows.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/port_collision.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/python_eol.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/python_version.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/registry.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/spec_drift.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/system_libs.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/torch_cuda.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/yaml_loader.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/__init__.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/ast_scan.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/host.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/parsers.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/repo.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/repofail/telemetry.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/__init__.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_cli_stage2.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_contract.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_fleet.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_integration.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_ml_rules.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_rules.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_scanner.py +0 -0
- {repofail-0.2.2 → repofail-0.2.3}/tests/test_telemetry.py +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Homebrew formula for repofail
|
|
2
|
+
# To use: copy to your tap repo (e.g. homebrew-tap/Formula/repofail.rb)
|
|
3
|
+
# Then: brew tap jayvenn21/tap && brew install repofail
|
|
4
|
+
# Or: brew install --formula Formula/repofail.rb (from this repo)
|
|
5
|
+
#
|
|
6
|
+
# Homebrew uses --no-deps when installing the main package, so all Python
|
|
7
|
+
# dependencies must be declared as resources below.
|
|
8
|
+
|
|
9
|
+
class Repofail < Formula
|
|
10
|
+
include Language::Python::Virtualenv
|
|
11
|
+
|
|
12
|
+
desc "Deterministic runtime compatibility analyzer"
|
|
13
|
+
homepage "https://github.com/jayvenn21/repofail"
|
|
14
|
+
url "https://github.com/jayvenn21/repofail/archive/refs/tags/v0.2.2.tar.gz"
|
|
15
|
+
sha256 "331055c40ec70a9ffb4f14f801bddf519014aaff1db1e5c0955b2f35e46da219"
|
|
16
|
+
license "MIT"
|
|
17
|
+
|
|
18
|
+
# App supports Python 3.10+. We use 3.12 for current Homebrew; change to
|
|
19
|
+
# python@3.10 or python@3.11 if you need an older interpreter.
|
|
20
|
+
depends_on "libyaml"
|
|
21
|
+
depends_on "python@3.12"
|
|
22
|
+
|
|
23
|
+
resource "click" do
|
|
24
|
+
url "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz"
|
|
25
|
+
sha256 "12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
resource "typer" do
|
|
29
|
+
url "https://files.pythonhosted.org/packages/ac/0a/d55af35db5f50f486e3eda0ada747eed773859e2699d3ce570b682a9b70a/typer-0.12.3.tar.gz"
|
|
30
|
+
sha256 "49e73131481d804288ef62598d97a1ceef3058905aa536a1134f90891ba35482"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
resource "rich" do
|
|
34
|
+
url "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz"
|
|
35
|
+
sha256 "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
resource "shellingham" do
|
|
39
|
+
url "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz"
|
|
40
|
+
sha256 "8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
resource "typing-extensions" do
|
|
44
|
+
url "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz"
|
|
45
|
+
sha256 "1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
resource "tomli" do
|
|
49
|
+
url "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz"
|
|
50
|
+
sha256 "d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
resource "pyyaml" do
|
|
54
|
+
url "https://github.com/yaml/pyyaml/archive/refs/tags/6.0.1.tar.gz"
|
|
55
|
+
sha256 "57314c984aaa84318eed00cf5a8365afc49f87954969e295efe2ba99f3b21f7a"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def install
|
|
59
|
+
virtualenv_install_with_resources
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test do
|
|
63
|
+
assert_match "repofail", shell_output("#{bin}/repofail --help", 0)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: repofail
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Predict why a repository will fail on your machine before you run it.
|
|
5
5
|
Author: Jayanth
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -12,7 +12,7 @@ Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/v0.2.
|
|
15
|
+
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/v0.2.2/docs/logo.png" width="180" alt="repofail logo">
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
<h1 align="center">repofail</h1>
|
|
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
|
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
24
|
<p align="center">
|
|
25
|
-
<a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/v/repofail?cacheSeconds=
|
|
25
|
+
<a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/v/repofail?cacheSeconds=60&cacheBust=1"></a>
|
|
26
26
|
<img src="https://img.shields.io/badge/ci-passing-brightgreen">
|
|
27
27
|
<img src="https://img.shields.io/badge/python-3.10+-blue">
|
|
28
28
|
<img src="https://img.shields.io/badge/runtime-validated-success">
|
|
@@ -83,7 +83,7 @@ Run it against any local clone.
|
|
|
83
83
|
## Example output
|
|
84
84
|
|
|
85
85
|
<p align="center">
|
|
86
|
-
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/
|
|
86
|
+
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/v0.2.2/docs/screenshots/nodefail.gif" width="850" alt="Node engine mismatch demo">
|
|
87
87
|
</p>
|
|
88
88
|
|
|
89
89
|
Deterministic spec violation detected — engines.node requires 22.x, host is 20.x.
|
|
@@ -142,6 +142,12 @@ repofail s # Stats: local failure counts (from -r reports)
|
|
|
142
142
|
repofail s -j # Stats with JSON output
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
## Exit codes
|
|
146
|
+
|
|
147
|
+
- **0** — No deterministic violations (or scan completed successfully)
|
|
148
|
+
- **1** — Violations detected (with `--ci`) or target host has issues (with `sim`)
|
|
149
|
+
- **2** — Invalid usage / bad input (e.g. not a directory, contract violation)
|
|
150
|
+
|
|
145
151
|
---
|
|
146
152
|
|
|
147
153
|
## CI integration
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/v0.2.
|
|
2
|
+
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/v0.2.2/docs/logo.png" width="180" alt="repofail logo">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<h1 align="center">repofail</h1>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
<a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/v/repofail?cacheSeconds=
|
|
12
|
+
<a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/v/repofail?cacheSeconds=60&cacheBust=1"></a>
|
|
13
13
|
<img src="https://img.shields.io/badge/ci-passing-brightgreen">
|
|
14
14
|
<img src="https://img.shields.io/badge/python-3.10+-blue">
|
|
15
15
|
<img src="https://img.shields.io/badge/runtime-validated-success">
|
|
@@ -70,7 +70,7 @@ Run it against any local clone.
|
|
|
70
70
|
## Example output
|
|
71
71
|
|
|
72
72
|
<p align="center">
|
|
73
|
-
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/
|
|
73
|
+
<img src="https://raw.githubusercontent.com/jayvenn21/repofail/v0.2.2/docs/screenshots/nodefail.gif" width="850" alt="Node engine mismatch demo">
|
|
74
74
|
</p>
|
|
75
75
|
|
|
76
76
|
Deterministic spec violation detected — engines.node requires 22.x, host is 20.x.
|
|
@@ -129,6 +129,12 @@ repofail s # Stats: local failure counts (from -r reports)
|
|
|
129
129
|
repofail s -j # Stats with JSON output
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
+
## Exit codes
|
|
133
|
+
|
|
134
|
+
- **0** — No deterministic violations (or scan completed successfully)
|
|
135
|
+
- **1** — Violations detected (with `--ci`) or target host has issues (with `sim`)
|
|
136
|
+
- **2** — Invalid usage / bad input (e.g. not a directory, contract violation)
|
|
137
|
+
|
|
132
138
|
---
|
|
133
139
|
|
|
134
140
|
## CI integration
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import sys
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
from typing import Optional
|
|
5
6
|
|
|
6
7
|
import click
|
|
7
8
|
import typer
|
|
@@ -46,7 +47,7 @@ from .engine import run_rules
|
|
|
46
47
|
from .contract import generate_contract, validate_contract, EnvironmentContract
|
|
47
48
|
from .telemetry import save_report, get_stats
|
|
48
49
|
from .rules.base import Severity
|
|
49
|
-
from .rules.registry import RULE_INFO
|
|
50
|
+
from .rules.registry import RULE_INFO
|
|
50
51
|
from .risk import estimate_success_probability
|
|
51
52
|
from .format import format_human
|
|
52
53
|
|
|
@@ -263,7 +264,7 @@ def _print_json(repo_profile, host_profile, results, verbose: bool = False) -> N
|
|
|
263
264
|
@app.command("gen")
|
|
264
265
|
def gen_cmd(
|
|
265
266
|
path: Path = typer.Argument(Path("."), exists=True, file_okay=False, dir_okay=True, resolve_path=True, help="Repo path"),
|
|
266
|
-
output: Path
|
|
267
|
+
output: Optional[Path] = typer.Option(None, "-o", help="Output file"),
|
|
267
268
|
) -> None:
|
|
268
269
|
"""Generate an environment contract from the repository."""
|
|
269
270
|
try:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|