repofail 0.2.4__tar.gz → 0.2.5__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 (64) hide show
  1. {repofail-0.2.4 → repofail-0.2.5}/Formula/repofail.rb +2 -1
  2. {repofail-0.2.4 → repofail-0.2.5}/PKG-INFO +8 -7
  3. {repofail-0.2.4 → repofail-0.2.5}/README.md +6 -6
  4. {repofail-0.2.4 → repofail-0.2.5}/pyproject.toml +2 -1
  5. repofail-0.2.4/.github/actions/repofail/README.md +0 -45
  6. repofail-0.2.4/.github/actions/repofail/action.yml +0 -73
  7. repofail-0.2.4/docs/QUICKSTART.md +0 -42
  8. repofail-0.2.4/homebrew-tap/Formula/repofail.rb +0 -66
  9. repofail-0.2.4/install.sh +0 -21
  10. {repofail-0.2.4 → repofail-0.2.5}/.github/workflows/publish.yml +0 -0
  11. {repofail-0.2.4 → repofail-0.2.5}/.github/workflows/repofail.yml +0 -0
  12. {repofail-0.2.4 → repofail-0.2.5}/.gitignore +0 -0
  13. {repofail-0.2.4 → repofail-0.2.5}/CONTRIBUTING.md +0 -0
  14. {repofail-0.2.4 → repofail-0.2.5}/RULES.md +0 -0
  15. {repofail-0.2.4 → repofail-0.2.5}/contract.json +0 -0
  16. {repofail-0.2.4 → repofail-0.2.5}/docs/assets/demo-autogpt.png +0 -0
  17. {repofail-0.2.4 → repofail-0.2.5}/docs/assets/repofail-logo.png +0 -0
  18. {repofail-0.2.4 → repofail-0.2.5}/docs/logo.png +0 -0
  19. {repofail-0.2.4 → repofail-0.2.5}/docs/screenshots/high_failure.png +0 -0
  20. {repofail-0.2.4 → repofail-0.2.5}/docs/screenshots/nodefail.gif +0 -0
  21. {repofail-0.2.4 → repofail-0.2.5}/repofail/__init__.py +0 -0
  22. {repofail-0.2.4 → repofail-0.2.5}/repofail/cli.py +0 -0
  23. {repofail-0.2.4 → repofail-0.2.5}/repofail/contract.py +0 -0
  24. {repofail-0.2.4 → repofail-0.2.5}/repofail/engine.py +0 -0
  25. {repofail-0.2.4 → repofail-0.2.5}/repofail/fleet.py +0 -0
  26. {repofail-0.2.4 → repofail-0.2.5}/repofail/format.py +0 -0
  27. {repofail-0.2.4 → repofail-0.2.5}/repofail/models.py +0 -0
  28. {repofail-0.2.4 → repofail-0.2.5}/repofail/risk.py +0 -0
  29. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/__init__.py +0 -0
  30. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/abi_wheel_mismatch.py +0 -0
  31. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/apple_silicon.py +0 -0
  32. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/base.py +0 -0
  33. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/docker_only.py +0 -0
  34. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/gpu_memory.py +0 -0
  35. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/info_signals.py +0 -0
  36. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/lock_file_missing.py +0 -0
  37. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/ml_niche.py +0 -0
  38. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/native_toolchain.py +0 -0
  39. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/node_engine.py +0 -0
  40. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/node_eol.py +0 -0
  41. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/node_windows.py +0 -0
  42. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/port_collision.py +0 -0
  43. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/python_eol.py +0 -0
  44. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/python_version.py +0 -0
  45. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/registry.py +0 -0
  46. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/spec_drift.py +0 -0
  47. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/system_libs.py +0 -0
  48. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/torch_cuda.py +0 -0
  49. {repofail-0.2.4 → repofail-0.2.5}/repofail/rules/yaml_loader.py +0 -0
  50. {repofail-0.2.4 → repofail-0.2.5}/repofail/scanner/__init__.py +0 -0
  51. {repofail-0.2.4 → repofail-0.2.5}/repofail/scanner/ast_scan.py +0 -0
  52. {repofail-0.2.4 → repofail-0.2.5}/repofail/scanner/host.py +0 -0
  53. {repofail-0.2.4 → repofail-0.2.5}/repofail/scanner/parsers.py +0 -0
  54. {repofail-0.2.4 → repofail-0.2.5}/repofail/scanner/repo.py +0 -0
  55. {repofail-0.2.4 → repofail-0.2.5}/repofail/telemetry.py +0 -0
  56. {repofail-0.2.4 → repofail-0.2.5}/tests/__init__.py +0 -0
  57. {repofail-0.2.4 → repofail-0.2.5}/tests/test_cli_stage2.py +0 -0
  58. {repofail-0.2.4 → repofail-0.2.5}/tests/test_contract.py +0 -0
  59. {repofail-0.2.4 → repofail-0.2.5}/tests/test_fleet.py +0 -0
  60. {repofail-0.2.4 → repofail-0.2.5}/tests/test_integration.py +0 -0
  61. {repofail-0.2.4 → repofail-0.2.5}/tests/test_ml_rules.py +0 -0
  62. {repofail-0.2.4 → repofail-0.2.5}/tests/test_rules.py +0 -0
  63. {repofail-0.2.4 → repofail-0.2.5}/tests/test_scanner.py +0 -0
  64. {repofail-0.2.4 → repofail-0.2.5}/tests/test_telemetry.py +0 -0
@@ -12,7 +12,8 @@ class Repofail < Formula
12
12
 
13
13
  desc "Deterministic runtime compatibility analyzer"
14
14
  homepage "https://github.com/jayvenn21/repofail"
15
- url "https://github.com/jayvenn21/repofail/archive/refs/tags/v0.2.4.tar.gz"
15
+ url "https://github.com/jayvenn21/repofail/archive/refs/tags/v0.2.5.tar.gz"
16
+ # Replace with v0.2.5 tarball SHA after tagging: curl -sL https://github.com/jayvenn21/repofail/archive/refs/tags/v0.2.5.tar.gz | shasum -a 256
16
17
  sha256 "d5558cd419c8d46bdc958064cb97f963d1ea793866414c025906ec15033512ed"
17
18
  license "MIT"
18
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repofail
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Predict why a repository will fail on your machine before you run it.
5
5
  Author: Jayanth
6
6
  Classifier: Programming Language :: Python :: 3
@@ -8,6 +8,7 @@ Classifier: Programming Language :: Python :: 3.10
8
8
  Classifier: Programming Language :: Python :: 3.11
9
9
  Classifier: Programming Language :: Python :: 3.12
10
10
  Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: Programming Language :: Python :: Implementation :: CPython
11
12
  Requires-Python: >=3.10
12
13
  Requires-Dist: pyyaml>=6.0
13
14
  Requires-Dist: tomli>=2.0; python_version < '3.11'
@@ -27,12 +28,12 @@ Description-Content-Type: text/markdown
27
28
  </p>
28
29
 
29
30
  <p align="center">
30
- <a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/v/repofail?color=orange" alt="PyPI"></a>
31
- <img src="https://img.shields.io/pypi/pyversions/repofail" alt="Python">
32
- <img src="https://img.shields.io/pypi/dm/repofail" alt="Downloads">
33
- <img src="https://img.shields.io/badge/ci-passing-brightgreen">
34
- <img src="https://img.shields.io/badge/runtime-validated-success">
35
- <img src="https://img.shields.io/badge/rules-20+-informational">
31
+ <a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/v/repofail" alt="PyPI"></a>
32
+ <a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/pyversions/repofail" alt="Python"></a>
33
+ <a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/dm/repofail" alt="Downloads"></a>
34
+ <a href="https://github.com/jayvenn21/repofail/actions"><img src="https://img.shields.io/github/actions/workflow/status/jayvenn21/repofail/repofail.yml?branch=main" alt="CI"></a>
35
+ <img src="https://img.shields.io/badge/runtime-validated-brightgreen" alt="Runtime">
36
+ <img src="https://img.shields.io/badge/rules-20%2B-blue" alt="Rules">
36
37
  </p>
37
38
 
38
39
  <p align="center">
@@ -9,12 +9,12 @@
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?color=orange" alt="PyPI"></a>
13
- <img src="https://img.shields.io/pypi/pyversions/repofail" alt="Python">
14
- <img src="https://img.shields.io/pypi/dm/repofail" alt="Downloads">
15
- <img src="https://img.shields.io/badge/ci-passing-brightgreen">
16
- <img src="https://img.shields.io/badge/runtime-validated-success">
17
- <img src="https://img.shields.io/badge/rules-20+-informational">
12
+ <a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/v/repofail" alt="PyPI"></a>
13
+ <a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/pyversions/repofail" alt="Python"></a>
14
+ <a href="https://pypi.org/project/repofail/"><img src="https://img.shields.io/pypi/dm/repofail" alt="Downloads"></a>
15
+ <a href="https://github.com/jayvenn21/repofail/actions"><img src="https://img.shields.io/github/actions/workflow/status/jayvenn21/repofail/repofail.yml?branch=main" alt="CI"></a>
16
+ <img src="https://img.shields.io/badge/runtime-validated-brightgreen" alt="Runtime">
17
+ <img src="https://img.shields.io/badge/rules-20%2B-blue" alt="Rules">
18
18
  </p>
19
19
 
20
20
  <p align="center">
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "repofail"
7
- version = "0.2.4"
7
+ version = "0.2.5"
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"
@@ -20,6 +20,7 @@ classifiers = [
20
20
  "Programming Language :: Python :: 3.11",
21
21
  "Programming Language :: Python :: 3.12",
22
22
  "Programming Language :: Python :: 3.13",
23
+ "Programming Language :: Python :: Implementation :: CPython",
23
24
  ]
24
25
 
25
26
  [project.scripts]
@@ -1,45 +0,0 @@
1
- # repofail GitHub Action
2
-
3
- Run repofail on every PR: get a Markdown report as a comment and fail CI when compatibility violations exceed the threshold.
4
-
5
- ## Usage
6
-
7
- In your repo, create `.github/workflows/repofail.yml`:
8
-
9
- ```yaml
10
- name: repofail
11
- on:
12
- pull_request:
13
- branches: [main, master]
14
- jobs:
15
- check:
16
- runs-on: ubuntu-latest
17
- steps:
18
- - uses: actions/checkout@v4
19
- - uses: jayvenn21/repofail/.github/actions/repofail@main
20
- with:
21
- path: .
22
- fail_on: HIGH
23
- comment: 'true'
24
- upload_artifact: 'true'
25
- pr_number: ${{ github.event.pull_request.number }}
26
- ```
27
-
28
- ## Inputs
29
-
30
- | Input | Default | Description |
31
- |-------|---------|-------------|
32
- | `path` | `.` | Repository path to scan |
33
- | `fail_on` | `HIGH` | Fail CI when severity is HIGH, MEDIUM, or LOW |
34
- | `comment` | `true` | Comment on PR with Markdown report |
35
- | `upload_artifact` | `true` | Upload JSON report as workflow artifact |
36
- | `pr_number` | (empty) | Set to `${{ github.event.pull_request.number }}` for PR comments |
37
-
38
- ## Behavior
39
-
40
- 1. Installs repofail from PyPI
41
- 2. Runs `repofail -m` and saves the report
42
- 3. Runs `repofail -j` for machine-readable output
43
- 4. Comments on the PR with the Markdown report (if `comment: true` and `pr_number` set)
44
- 5. Uploads `repofail.json` as an artifact (if `upload_artifact: true`)
45
- 6. Runs `repofail --ci` and fails the job if violations meet or exceed `fail_on`
@@ -1,73 +0,0 @@
1
- name: repofail
2
- description: Deterministic runtime compatibility check — fail CI or comment on PR with report
3
- inputs:
4
- path:
5
- description: Repository path to scan (default .)
6
- required: false
7
- default: .
8
- fail_on:
9
- description: Severity threshold to fail CI (HIGH, MEDIUM, LOW)
10
- required: false
11
- default: HIGH
12
- comment:
13
- description: Comment on PR with Markdown report
14
- required: false
15
- default: 'true'
16
- upload_artifact:
17
- description: Upload JSON report as artifact
18
- required: false
19
- default: 'true'
20
- pr_number:
21
- description: Pull request number (for commenting). Set to ${{ github.event.pull_request.number }}
22
- required: false
23
- default: ''
24
- outputs:
25
- markdown_file:
26
- description: Path to Markdown report file (repofail-report.md)
27
- runs:
28
- using: composite
29
- steps:
30
- - name: Install repofail
31
- shell: bash
32
- run: pip install repofail
33
-
34
- - name: Run repofail (Markdown)
35
- id: md
36
- shell: bash
37
- run: |
38
- repofail -p "${{ inputs.path }}" -m > repofail-report.md || true
39
- echo "markdown_file=repofail-report.md" >> $GITHUB_OUTPUT
40
-
41
- - name: Run repofail (JSON)
42
- if: inputs.upload_artifact == 'true'
43
- shell: bash
44
- run: repofail -p "${{ inputs.path }}" -j > repofail.json || true
45
-
46
- - name: Comment on PR with report
47
- if: inputs.comment == 'true' && inputs.pr_number != ''
48
- uses: actions/github-script@v7
49
- with:
50
- github-token: ${{ secrets.GITHUB_TOKEN }}
51
- script: |
52
- const fs = require('fs');
53
- const body = fs.existsSync('repofail-report.md')
54
- ? fs.readFileSync('repofail-report.md', 'utf8')
55
- : 'repofail report not available.';
56
- const comment = `## repofail · compatibility report\n\n\`\`\`\n${body}\n\`\`\``;
57
- await github.rest.issues.createComment({
58
- issue_number: ${{ inputs.pr_number }},
59
- owner: context.repo.owner,
60
- repo: context.repo.repo,
61
- body: comment,
62
- });
63
-
64
- - name: Upload repofail JSON artifact
65
- if: inputs.upload_artifact == 'true' && always()
66
- uses: actions/upload-artifact@v4
67
- with:
68
- name: repofail-report
69
- path: repofail.json
70
-
71
- - name: Run repofail (CI — fail if threshold exceeded)
72
- shell: bash
73
- run: repofail -p "${{ inputs.path }}" --ci --fail-on "${{ inputs.fail_on }}"
@@ -1,42 +0,0 @@
1
- # repofail — 30-second quickstart
2
-
3
- ## What it does
4
-
5
- Answers one question: **Will this repository run on this machine?**
6
-
7
- It does **not** install your project. It reads configs and your environment, then reports compatibility issues (Node version, Python range, CUDA, lock file, spec drift, etc.) with a single score and clear evidence.
8
-
9
- ## Install
10
-
11
- ```bash
12
- pip install repofail
13
- ```
14
-
15
- Or: `pipx install repofail` | [install.sh](https://raw.githubusercontent.com/jayvenn21/repofail/main/install.sh) | Homebrew (see README).
16
-
17
- ## Run
18
-
19
- ```bash
20
- cd /path/to/any/repo
21
- repofail
22
- ```
23
-
24
- You get:
25
-
26
- - A **compatibility score** (0–100%)
27
- - **HARD FAILURES** (deterministic blockers) with evidence and suggested fixes
28
- - Optional: **RUNTIME RISKS**, **STRUCTURAL PROFILE**
29
-
30
- ## CI
31
-
32
- ```bash
33
- repofail --ci
34
- ```
35
-
36
- Exits 1 if HIGH (or configured) severity violations are found. Use in GitHub Actions or any CI.
37
-
38
- ## Next
39
-
40
- - `repofail -e list` — list all rules
41
- - `repofail -e spec_drift` — explain a rule
42
- - [README](https://github.com/jayvenn21/repofail#readme) — full docs, FAQ, when not to use
@@ -1,66 +0,0 @@
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 jayvenn21/tap/repofail
4
- #
5
- # Homebrew uses --no-deps when installing the main package, so all Python
6
- # dependencies must be declared as resources below.
7
- # If SHA256 fails after pushing a new tag, get the correct hash with:
8
- # curl -sL https://github.com/jayvenn21/repofail/archive/refs/tags/vX.Y.Z.tar.gz | shasum -a 256
9
-
10
- class Repofail < Formula
11
- include Language::Python::Virtualenv
12
-
13
- desc "Deterministic runtime compatibility analyzer"
14
- homepage "https://github.com/jayvenn21/repofail"
15
- url "https://github.com/jayvenn21/repofail/archive/refs/tags/v0.2.4.tar.gz"
16
- sha256 "d5558cd419c8d46bdc958064cb97f963d1ea793866414c025906ec15033512ed"
17
- license "MIT"
18
-
19
- # App supports Python 3.10+. We use 3.12 for current Homebrew; change to
20
- # python@3.10 or python@3.11 if you need an older interpreter.
21
- depends_on "libyaml"
22
- depends_on "python@3.12"
23
-
24
- resource "click" do
25
- url "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz"
26
- sha256 "12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"
27
- end
28
-
29
- resource "typer" do
30
- url "https://files.pythonhosted.org/packages/ac/0a/d55af35db5f50f486e3eda0ada747eed773859e2699d3ce570b682a9b70a/typer-0.12.3.tar.gz"
31
- sha256 "49e73131481d804288ef62598d97a1ceef3058905aa536a1134f90891ba35482"
32
- end
33
-
34
- resource "rich" do
35
- url "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz"
36
- sha256 "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"
37
- end
38
-
39
- resource "shellingham" do
40
- url "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz"
41
- sha256 "8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"
42
- end
43
-
44
- resource "typing-extensions" do
45
- url "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz"
46
- sha256 "1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"
47
- end
48
-
49
- resource "tomli" do
50
- url "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz"
51
- sha256 "d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
52
- end
53
-
54
- resource "pyyaml" do
55
- url "https://github.com/yaml/pyyaml/archive/refs/tags/6.0.1.tar.gz"
56
- sha256 "57314c984aaa84318eed00cf5a8365afc49f87954969e295efe2ba99f3b21f7a"
57
- end
58
-
59
- def install
60
- virtualenv_install_with_resources
61
- end
62
-
63
- test do
64
- assert_match "repofail", shell_output("#{bin}/repofail --help", 0)
65
- end
66
- end
repofail-0.2.4/install.sh DELETED
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Install repofail — deterministic runtime compatibility analyzer
3
- # Usage: curl -sSL https://raw.githubusercontent.com/jayvenn21/repofail/main/install.sh | bash
4
-
5
- set -e
6
-
7
- if command -v pipx &>/dev/null; then
8
- echo "Installing repofail via pipx (isolated)..."
9
- pipx install repofail
10
- elif command -v pip3 &>/dev/null; then
11
- echo "Installing repofail via pip..."
12
- pip3 install repofail
13
- elif command -v pip &>/dev/null; then
14
- echo "Installing repofail via pip..."
15
- pip install repofail
16
- else
17
- echo "Error: need pip or pipx. Install Python 3.10+ and run: pip install repofail"
18
- exit 1
19
- fi
20
-
21
- echo "Done. Run: repofail --help"
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