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.
Files changed (59) hide show
  1. repofail-0.2.3/Formula/repofail.rb +65 -0
  2. {repofail-0.2.2 → repofail-0.2.3}/PKG-INFO +10 -4
  3. {repofail-0.2.2 → repofail-0.2.3}/README.md +9 -3
  4. {repofail-0.2.2 → repofail-0.2.3}/pyproject.toml +1 -1
  5. {repofail-0.2.2 → repofail-0.2.3}/repofail/cli.py +3 -2
  6. {repofail-0.2.2 → repofail-0.2.3}/.github/workflows/publish.yml +0 -0
  7. {repofail-0.2.2 → repofail-0.2.3}/.github/workflows/repofail.yml +0 -0
  8. {repofail-0.2.2 → repofail-0.2.3}/.gitignore +0 -0
  9. {repofail-0.2.2 → repofail-0.2.3}/CONTRIBUTING.md +0 -0
  10. {repofail-0.2.2 → repofail-0.2.3}/RULES.md +0 -0
  11. {repofail-0.2.2 → repofail-0.2.3}/contract.json +0 -0
  12. {repofail-0.2.2 → repofail-0.2.3}/docs/assets/demo-autogpt.png +0 -0
  13. {repofail-0.2.2 → repofail-0.2.3}/docs/assets/repofail-logo.png +0 -0
  14. {repofail-0.2.2 → repofail-0.2.3}/docs/logo.png +0 -0
  15. {repofail-0.2.2 → repofail-0.2.3}/docs/screenshots/high_failure.png +0 -0
  16. {repofail-0.2.2 → repofail-0.2.3}/docs/screenshots/nodefail.gif +0 -0
  17. {repofail-0.2.2 → repofail-0.2.3}/repofail/__init__.py +0 -0
  18. {repofail-0.2.2 → repofail-0.2.3}/repofail/contract.py +0 -0
  19. {repofail-0.2.2 → repofail-0.2.3}/repofail/engine.py +0 -0
  20. {repofail-0.2.2 → repofail-0.2.3}/repofail/fleet.py +0 -0
  21. {repofail-0.2.2 → repofail-0.2.3}/repofail/format.py +0 -0
  22. {repofail-0.2.2 → repofail-0.2.3}/repofail/models.py +0 -0
  23. {repofail-0.2.2 → repofail-0.2.3}/repofail/risk.py +0 -0
  24. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/__init__.py +0 -0
  25. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/abi_wheel_mismatch.py +0 -0
  26. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/apple_silicon.py +0 -0
  27. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/base.py +0 -0
  28. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/docker_only.py +0 -0
  29. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/gpu_memory.py +0 -0
  30. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/info_signals.py +0 -0
  31. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/lock_file_missing.py +0 -0
  32. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/ml_niche.py +0 -0
  33. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/native_toolchain.py +0 -0
  34. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/node_engine.py +0 -0
  35. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/node_eol.py +0 -0
  36. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/node_windows.py +0 -0
  37. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/port_collision.py +0 -0
  38. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/python_eol.py +0 -0
  39. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/python_version.py +0 -0
  40. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/registry.py +0 -0
  41. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/spec_drift.py +0 -0
  42. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/system_libs.py +0 -0
  43. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/torch_cuda.py +0 -0
  44. {repofail-0.2.2 → repofail-0.2.3}/repofail/rules/yaml_loader.py +0 -0
  45. {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/__init__.py +0 -0
  46. {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/ast_scan.py +0 -0
  47. {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/host.py +0 -0
  48. {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/parsers.py +0 -0
  49. {repofail-0.2.2 → repofail-0.2.3}/repofail/scanner/repo.py +0 -0
  50. {repofail-0.2.2 → repofail-0.2.3}/repofail/telemetry.py +0 -0
  51. {repofail-0.2.2 → repofail-0.2.3}/tests/__init__.py +0 -0
  52. {repofail-0.2.2 → repofail-0.2.3}/tests/test_cli_stage2.py +0 -0
  53. {repofail-0.2.2 → repofail-0.2.3}/tests/test_contract.py +0 -0
  54. {repofail-0.2.2 → repofail-0.2.3}/tests/test_fleet.py +0 -0
  55. {repofail-0.2.2 → repofail-0.2.3}/tests/test_integration.py +0 -0
  56. {repofail-0.2.2 → repofail-0.2.3}/tests/test_ml_rules.py +0 -0
  57. {repofail-0.2.2 → repofail-0.2.3}/tests/test_rules.py +0 -0
  58. {repofail-0.2.2 → repofail-0.2.3}/tests/test_scanner.py +0 -0
  59. {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.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.1/docs/logo.png" width="180" alt="repofail logo">
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=30"></a>
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/main/docs/screenshots/nodefail.gif" width="850" alt="Node engine mismatch demo">
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.1/docs/logo.png" width="180" alt="repofail logo">
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=30"></a>
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/main/docs/screenshots/nodefail.gif" width="850" alt="Node engine mismatch demo">
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "repofail"
7
- version = "0.2.2"
7
+ version = "0.2.3"
8
8
  description = "Predict why a repository will fail on your machine before you run it."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -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, RULE_SUGGESTIONS
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 | None = typer.Option(None, "-o", help="Output file"),
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