codedoctor 0.2.0__tar.gz → 1.0.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.
Files changed (33) hide show
  1. codedoctor-1.0.0/.github/CODEOWNERS +1 -0
  2. codedoctor-1.0.0/.github/dependabot.yml +32 -0
  3. codedoctor-1.0.0/.github/pull_request_template.md +8 -0
  4. codedoctor-1.0.0/.github/workflows/ci.yml +49 -0
  5. codedoctor-1.0.0/.github/workflows/codeql.yml +36 -0
  6. codedoctor-1.0.0/.github/workflows/conventional-commits.yml +29 -0
  7. codedoctor-1.0.0/.github/workflows/gitleaks.yml +28 -0
  8. codedoctor-1.0.0/.github/workflows/release-please.yml +20 -0
  9. {codedoctor-0.2.0 → codedoctor-1.0.0}/.github/workflows/release.yml +5 -3
  10. {codedoctor-0.2.0 → codedoctor-1.0.0}/.gitignore +1 -1
  11. codedoctor-1.0.0/.pre-commit-config.yaml +25 -0
  12. codedoctor-1.0.0/CHANGELOG.md +12 -0
  13. {codedoctor-0.2.0 → codedoctor-1.0.0}/LICENSE +1 -1
  14. {codedoctor-0.2.0 → codedoctor-1.0.0}/PKG-INFO +11 -9
  15. {codedoctor-0.2.0 → codedoctor-1.0.0}/README.md +8 -8
  16. codedoctor-1.0.0/SECURITY.md +41 -0
  17. codedoctor-1.0.0/gitleaks.toml +13 -0
  18. {codedoctor-0.2.0 → codedoctor-1.0.0}/pyproject.toml +4 -2
  19. codedoctor-1.0.0/src/codedoctor/__init__.py +1 -0
  20. codedoctor-1.0.0/src/codedoctor/cli.py +410 -0
  21. {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/config.py +15 -0
  22. {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/runner.py +31 -26
  23. codedoctor-1.0.0/src/codedoctor/test_template.py +52 -0
  24. codedoctor-1.0.0/src/codedoctor/ui.py +61 -0
  25. codedoctor-0.2.0/.github/dependabot.yml +0 -12
  26. codedoctor-0.2.0/.github/workflows/ci.yml +0 -33
  27. codedoctor-0.2.0/.pre-commit-config.yaml +0 -12
  28. codedoctor-0.2.0/src/codedoctor/__init__.py +0 -0
  29. codedoctor-0.2.0/src/codedoctor/cli.py +0 -196
  30. {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/report.py +0 -0
  31. {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/storage.py +0 -0
  32. {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/updater.py +0 -0
  33. {codedoctor-0.2.0 → codedoctor-1.0.0}/tests/test_smoke.py +0 -0
@@ -0,0 +1 @@
1
+ * @BigPattyOG
@@ -0,0 +1,32 @@
1
+ version: 2
2
+
3
+ updates:
4
+ # Python dependencies (from pyproject.toml / requirements)
5
+ - package-ecosystem: "pip"
6
+ directory: "/"
7
+ target-branch: "main"
8
+ schedule:
9
+ interval: "weekly"
10
+ open-pull-requests-limit: 10
11
+ rebase-strategy: "auto"
12
+ labels:
13
+ - "dependencies"
14
+ groups:
15
+ python-dependencies:
16
+ patterns:
17
+ - "*"
18
+
19
+ # GitHub Actions used in .github/workflows/*.yml (including new workflows)
20
+ - package-ecosystem: "github-actions"
21
+ directory: "/"
22
+ target-branch: "main"
23
+ schedule:
24
+ interval: "weekly"
25
+ open-pull-requests-limit: 10
26
+ rebase-strategy: "auto"
27
+ labels:
28
+ - "dependencies"
29
+ groups:
30
+ github-actions:
31
+ patterns:
32
+ - "*"
@@ -0,0 +1,8 @@
1
+ ## Summary
2
+ <!-- What changed and why? -->
3
+
4
+ ## How to test
5
+ <!-- Commands or steps -->
6
+
7
+ ## Checklist
8
+ - [ ] PR title uses Conventional Commits (feat/fix/docs/chore/ci/etc.)
@@ -0,0 +1,49 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: ["main"]
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ test:
14
+ name: CI (Python 3.12)
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v6
20
+
21
+ - name: Setup Python
22
+ uses: actions/setup-python@v6
23
+ with:
24
+ python-version: "3.12"
25
+
26
+ - name: Install
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ python -m pip install -e ".[dev]"
30
+
31
+ - name: Ruff
32
+ run: ruff check .
33
+
34
+ - name: Black
35
+ run: black . --check
36
+
37
+ - name: MyPy
38
+ run: mypy . --pretty --show-error-codes
39
+
40
+ - name: Bandit (security)
41
+ run: bandit -r src -x tests
42
+
43
+ - name: Pytest
44
+ run: pytest -q
45
+
46
+ - name: Pip Audit (dependency vulnerabilities)
47
+ run: |
48
+ python -m pip install pip-audit
49
+ pip-audit
@@ -0,0 +1,36 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+ branches: ["main"]
8
+ schedule:
9
+ - cron: "23 3 * * 1" # Weekly (Mon)
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ analyze:
16
+ name: Analyze (CodeQL)
17
+ runs-on: ubuntu-latest
18
+
19
+ permissions:
20
+ contents: read
21
+ security-events: write
22
+
23
+ steps:
24
+ - name: Checkout
25
+ uses: actions/checkout@v6
26
+
27
+ - name: Initialize CodeQL
28
+ uses: github/codeql-action/init@v4
29
+ with:
30
+ languages: python
31
+
32
+ - name: Autobuild
33
+ uses: github/codeql-action/autobuild@v4
34
+
35
+ - name: Perform CodeQL Analysis
36
+ uses: github/codeql-action/analyze@v4
@@ -0,0 +1,29 @@
1
+ name: Conventional PR Title
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ semantic-pr-title:
12
+ name: Check Conventional Commits PR Title
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Validate PR title follows Conventional Commits
16
+ uses: amannn/action-semantic-pull-request@v6
17
+ env:
18
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
19
+ with:
20
+ types: |
21
+ feat
22
+ fix
23
+ docs
24
+ chore
25
+ refactor
26
+ test
27
+ ci
28
+ build
29
+ requireScope: false
@@ -0,0 +1,28 @@
1
+ name: Gitleaks
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: ["main"]
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ scan:
14
+ name: Secret scan (gitleaks)
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v6
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - name: Run gitleaks
24
+ uses: gitleaks/gitleaks-action@v2
25
+ env:
26
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27
+ GITLEAKS_ENABLE_UPLOAD_ARTIFACT: "false"
28
+ GITLEAKS_ENABLE_SUMMARY: "true"
@@ -0,0 +1,20 @@
1
+ name: Release Please
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: write
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ release-please:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Release Please
17
+ uses: googleapis/release-please-action@v4
18
+ with:
19
+ release-type: python
20
+ package-name: codedoctor
@@ -14,10 +14,10 @@ jobs:
14
14
 
15
15
  steps:
16
16
  - name: Checkout
17
- uses: actions/checkout@v6
17
+ uses: actions/checkout@v4
18
18
 
19
19
  - name: Set up Python
20
- uses: actions/setup-python@v6
20
+ uses: actions/setup-python@v5
21
21
  with:
22
22
  python-version: "3.12"
23
23
 
@@ -43,6 +43,7 @@ jobs:
43
43
  environment: pypi
44
44
  permissions:
45
45
  id-token: write
46
+
46
47
  steps:
47
48
  - name: Download dist artifacts
48
49
  uses: actions/download-artifact@v4
@@ -59,6 +60,7 @@ jobs:
59
60
  runs-on: ubuntu-latest
60
61
  permissions:
61
62
  contents: write
63
+
62
64
  steps:
63
65
  - name: Download dist artifacts
64
66
  uses: actions/download-artifact@v4
@@ -69,4 +71,4 @@ jobs:
69
71
  - name: Create GitHub Release
70
72
  uses: softprops/action-gh-release@v2
71
73
  with:
72
- files: dist/*
74
+ files: dist/*
@@ -6,4 +6,4 @@
6
6
  src/codedoctor/__pycache__/
7
7
  tests/__pycache__/
8
8
 
9
- poetry.lock
9
+ poetry.lock
@@ -0,0 +1,25 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.6.0
4
+ hooks:
5
+ - id: end-of-file-fixer
6
+ - id: trailing-whitespace
7
+ - id: check-yaml
8
+ - id: check-toml
9
+ - id: check-added-large-files
10
+
11
+ - repo: https://github.com/astral-sh/ruff-pre-commit
12
+ rev: v0.8.0
13
+ hooks:
14
+ - id: ruff
15
+ args: ["--fix"]
16
+
17
+ - repo: https://github.com/psf/black
18
+ rev: 26.1.0
19
+ hooks:
20
+ - id: black
21
+
22
+ - repo: https://github.com/gitleaks/gitleaks
23
+ rev: v8.18.4
24
+ hooks:
25
+ - id: gitleaks
@@ -0,0 +1,12 @@
1
+ # Changelog
2
+
3
+ ## [1.0.0](https://github.com/BigPattyOG/CodeDoctor/compare/v0.2.0...v1.0.0) (2026-02-23)
4
+
5
+
6
+ ### ⚠ BREAKING CHANGES
7
+
8
+ * Update to CodeDoctor and how it functions ([#16](https://github.com/BigPattyOG/CodeDoctor/issues/16))
9
+
10
+ ### Features
11
+
12
+ * Update to CodeDoctor and how it functions ([#16](https://github.com/BigPattyOG/CodeDoctor/issues/16)) ([e41c3e8](https://github.com/BigPattyOG/CodeDoctor/commit/e41c3e894984b671508411d608bfdedfbf628acd))
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codedoctor
3
- Version: 0.2.0
3
+ Version: 1.0.0
4
4
  Summary: Beginner-friendly codebase doctor: lint, format, type-check, security and tests.
5
5
  Author-email: Patrick Faint <pattymayo3@icloud.com>
6
6
  License-Expression: MIT
@@ -10,6 +10,7 @@ Requires-Dist: bandit>=1.7
10
10
  Requires-Dist: black>=24.0
11
11
  Requires-Dist: mypy>=1.8
12
12
  Requires-Dist: pytest>=8
13
+ Requires-Dist: rich>=13.7
13
14
  Requires-Dist: ruff>=0.9
14
15
  Provides-Extra: dev
15
16
  Requires-Dist: bandit>=1.7.0; extra == 'dev'
@@ -17,6 +18,7 @@ Requires-Dist: black>=24.0.0; extra == 'dev'
17
18
  Requires-Dist: mypy>=1.10.0; extra == 'dev'
18
19
  Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
19
20
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
21
+ Requires-Dist: rich>=13.7; extra == 'dev'
20
22
  Requires-Dist: ruff>=0.8.0; extra == 'dev'
21
23
  Description-Content-Type: text/markdown
22
24
 
@@ -121,26 +123,26 @@ codedoctor scan [PATH] [--fix] [--skip-tests] [--report-dir DIR] [--no-gitignore
121
123
 
122
124
  #### Options
123
125
 
124
- - `PATH`
126
+ - `PATH`
125
127
  Repository/folder to scan (default: `.`)
126
128
 
127
- - `--fix`
129
+ - `--fix`
128
130
  Apply safe auto-fixes (Ruff `--fix`) and format with Black.
129
131
 
130
- - `--skip-tests`
132
+ - `--skip-tests`
131
133
  Skip running `pytest`.
132
134
 
133
- - `--report-dir DIR`
135
+ - `--report-dir DIR`
134
136
  Directory (relative to the repo) to store reports. If omitted, uses the value
135
137
  from your CodeDoctor config.
136
138
 
137
- - `--no-gitignore`
139
+ - `--no-gitignore`
138
140
  Disable best-effort `.gitignore` handling (useful for debugging).
139
141
 
140
- - `--no-update-check`
142
+ - `--no-update-check`
141
143
  Disable the non-blocking “update available” notice during scans.
142
144
 
143
- - `--assume-defaults`
145
+ - `--assume-defaults`
144
146
  Allow scanning without running `codedoctor setup` (useful for CI).
145
147
 
146
148
  ---
@@ -262,4 +264,4 @@ codedoctor scan .
262
264
 
263
265
  ## License
264
266
 
265
- MIT License. See `LICENSE`.
267
+ MIT License. See `LICENSE`.
@@ -99,26 +99,26 @@ codedoctor scan [PATH] [--fix] [--skip-tests] [--report-dir DIR] [--no-gitignore
99
99
 
100
100
  #### Options
101
101
 
102
- - `PATH`
102
+ - `PATH`
103
103
  Repository/folder to scan (default: `.`)
104
104
 
105
- - `--fix`
105
+ - `--fix`
106
106
  Apply safe auto-fixes (Ruff `--fix`) and format with Black.
107
107
 
108
- - `--skip-tests`
108
+ - `--skip-tests`
109
109
  Skip running `pytest`.
110
110
 
111
- - `--report-dir DIR`
111
+ - `--report-dir DIR`
112
112
  Directory (relative to the repo) to store reports. If omitted, uses the value
113
113
  from your CodeDoctor config.
114
114
 
115
- - `--no-gitignore`
115
+ - `--no-gitignore`
116
116
  Disable best-effort `.gitignore` handling (useful for debugging).
117
117
 
118
- - `--no-update-check`
118
+ - `--no-update-check`
119
119
  Disable the non-blocking “update available” notice during scans.
120
120
 
121
- - `--assume-defaults`
121
+ - `--assume-defaults`
122
122
  Allow scanning without running `codedoctor setup` (useful for CI).
123
123
 
124
124
  ---
@@ -240,4 +240,4 @@ codedoctor scan .
240
240
 
241
241
  ## License
242
242
 
243
- MIT License. See `LICENSE`.
243
+ MIT License. See `LICENSE`.
@@ -0,0 +1,41 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ Security fixes are provided for the **latest released version** of CodeDoctor on
6
+ PyPI.
7
+
8
+ | Version | Supported |
9
+ | ------- | --------- |
10
+ | latest | ✅ |
11
+ | older | ❌ |
12
+
13
+ ## Reporting a Vulnerability
14
+
15
+ Please report security vulnerabilities responsibly.
16
+
17
+ ### Preferred: GitHub Security Advisories
18
+ 1. Go to this repository on GitHub
19
+ 2. Click **Security**
20
+ 3. Click **Advisories**
21
+ 4. Click **New draft security advisory**
22
+
23
+ This allows private discussion and coordinated disclosure.
24
+
25
+ ### Alternative: GitHub Issue (non-sensitive details only)
26
+ If you cannot use a Security Advisory, open a GitHub issue. **Do not include**
27
+ secrets, private tokens, or proof-of-concept exploit code that would put users
28
+ at risk.
29
+
30
+ ### What to include
31
+ - A clear description of the vulnerability and impact
32
+ - Steps to reproduce (as minimal as possible)
33
+ - Affected versions (if known)
34
+ - Any suggested mitigation or fix
35
+
36
+ ### Response expectations
37
+ - You should receive an initial response within **7 days**
38
+ - If accepted, we will work on a fix and publish an update to PyPI
39
+ - If declined, we will explain why (when possible)
40
+
41
+ Thank you for helping keep CodeDoctor and its users safe.
@@ -0,0 +1,13 @@
1
+ title = "CodeDoctor gitleaks config"
2
+
3
+ [allowlist]
4
+ description = "Allowlist for generated/cached directories"
5
+ paths = [
6
+ '''^\.git/''',
7
+ '''^\.ruff_cache/''',
8
+ '''^\.mypy_cache/''',
9
+ '''^\.pytest_cache/''',
10
+ '''^dist/''',
11
+ '''^build/''',
12
+ '''^\.venv/''',
13
+ ]
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codedoctor"
7
- version = "0.2.0"
7
+ version = "1.0.0"
8
8
  description = "Beginner-friendly codebase doctor: lint, format, type-check, security and tests."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -16,6 +16,7 @@ dependencies = [
16
16
  "mypy>=1.8",
17
17
  "bandit>=1.7",
18
18
  "pytest>=8",
19
+ "rich>=13.7",
19
20
  ]
20
21
 
21
22
  [project.optional-dependencies]
@@ -26,6 +27,7 @@ dev = [
26
27
  "mypy>=1.10.0",
27
28
  "bandit>=1.7.0",
28
29
  "pre-commit>=3.7.0",
30
+ "rich>=13.7",
29
31
  ]
30
32
 
31
33
  [project.scripts]
@@ -42,4 +44,4 @@ target-version = ["py312"]
42
44
  [tool.mypy]
43
45
  python_version = "3.12"
44
46
  warn_return_any = true
45
- warn_unused_configs = true
47
+ warn_unused_configs = true
@@ -0,0 +1 @@
1
+ from __future__ import annotations