cliqa 0.1.1__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,29 @@
1
+ name: Lint
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ workflow_call:
7
+
8
+ jobs:
9
+ lint:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v4
17
+ with:
18
+ enable-cache: true
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.13"
24
+
25
+ - name: Install dependencies
26
+ run: uv sync --all-groups
27
+
28
+ - name: Run pre-commit
29
+ uses: pre-commit/action@v3.0.1
@@ -0,0 +1,63 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+
7
+ jobs:
8
+ test:
9
+ uses: ./.github/workflows/test.yml
10
+ secrets: inherit
11
+
12
+ lint:
13
+ uses: ./.github/workflows/lint.yml
14
+
15
+ publish:
16
+ needs: [test, lint]
17
+ if: "!contains(github.event.head_commit.message, 'Bump version')"
18
+ runs-on: ubuntu-latest
19
+ environment: pypi
20
+ permissions:
21
+ contents: write
22
+ id-token: write
23
+
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ with:
27
+ fetch-depth: 0
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v4
31
+
32
+ - name: Set up Python
33
+ uses: actions/setup-python@v5
34
+ with:
35
+ python-version: "3.13"
36
+
37
+ - name: Install bump-my-version
38
+ run: uv tool install bump-my-version
39
+
40
+ - name: Configure git
41
+ run: |
42
+ git config user.name "github-actions[bot]"
43
+ git config user.email "github-actions[bot]@users.noreply.github.com"
44
+
45
+ - name: Bump version
46
+ run: uv tool run bump-my-version bump patch
47
+
48
+ - name: Get version
49
+ id: version
50
+ run: echo "version=$(uv tool run bump-my-version show current_version)" >> $GITHUB_OUTPUT
51
+
52
+ - name: Commit and tag
53
+ run: |
54
+ git add pyproject.toml
55
+ git commit -m "Bump version to ${{ steps.version.outputs.version }}"
56
+ git tag "v${{ steps.version.outputs.version }}"
57
+ git push origin main --tags
58
+
59
+ - name: Build package
60
+ run: uv build
61
+
62
+ - name: Publish to PyPI
63
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,41 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ workflow_call:
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ python-version: ["3.12", "3.13"]
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@v4
20
+ with:
21
+ enable-cache: true
22
+
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+
28
+ - name: Install dependencies
29
+ run: uv sync --extra test
30
+
31
+ - name: Run tests
32
+ run: uv run pytest
33
+ env:
34
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
35
+
36
+ - name: Upload coverage
37
+ uses: codecov/codecov-action@v4
38
+ if: matrix.python-version == '3.13'
39
+ with:
40
+ file: ./htmlcov/index.html
41
+ fail_ci_if_error: false
cliqa-0.1.1/.gitignore ADDED
@@ -0,0 +1,48 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+ MANIFEST
23
+
24
+ # Virtual environments
25
+ .venv/
26
+ venv/
27
+ ENV/
28
+ env/
29
+
30
+ # Testing
31
+ .pytest_cache/
32
+ .coverage
33
+ htmlcov/
34
+ .tox/
35
+
36
+ # IDEs
37
+ .vscode/
38
+ .idea/
39
+ *.swp
40
+ *.swo
41
+ *~
42
+
43
+ # Local settings
44
+ .claude/
45
+
46
+ # OS
47
+ .DS_Store
48
+ Thumbs.db
@@ -0,0 +1,88 @@
1
+ default_language_version:
2
+ python: python313
3
+
4
+ default_stages: [pre-commit]
5
+
6
+ repos:
7
+ - repo: https://github.com/pre-commit/pre-commit-hooks
8
+ rev: v4.5.0
9
+ hooks:
10
+ - id: trailing-whitespace
11
+ args: [--markdown-linebreak-ext=md]
12
+ - id: end-of-file-fixer
13
+ - id: mixed-line-ending
14
+ args: [--fix=lf]
15
+ - id: check-yaml
16
+ args: [--unsafe]
17
+ - id: check-json
18
+ - id: check-toml
19
+ - id: check-xml
20
+ - id: check-merge-conflict
21
+ - id: check-case-conflict
22
+ - id: check-symlinks
23
+ - id: destroyed-symlinks
24
+ - id: check-ast
25
+ - id: check-docstring-first
26
+ - id: debug-statements
27
+ - id: name-tests-test
28
+ args: [--pytest-test-first]
29
+ exclude: ^tests/((__init__|conftest)\.py|.*/_mock_packages/.*|.*/pytest_.*_mock\.py)$
30
+ - id: detect-private-key
31
+ - id: check-added-large-files
32
+ args: [--maxkb=1000]
33
+ - repo: local
34
+ hooks:
35
+ - id: ruff-format
36
+ name: ruff-format
37
+ entry: uv run ruff format
38
+ language: system
39
+ types_or: [python, pyi]
40
+ require_serial: true
41
+ - id: ruff
42
+ name: ruff
43
+ entry: uv run ruff check --fix --exit-non-zero-on-fix
44
+ language: system
45
+ types_or: [python, pyi]
46
+ require_serial: true
47
+ - repo: local
48
+ hooks:
49
+ - id: basedpyright
50
+ name: basedpyright
51
+ entry: uv run basedpyright
52
+ language: system
53
+ types: [python]
54
+ pass_filenames: false
55
+ require_serial: true
56
+ - repo: local
57
+ hooks:
58
+ - id: vulture
59
+ name: vulture
60
+ entry: uv run vulture
61
+ language: system
62
+ types: [python]
63
+ pass_filenames: false
64
+ require_serial: true
65
+ - repo: local
66
+ hooks:
67
+ - id: bandit
68
+ name: bandit
69
+ entry: uv run bandit -c pyproject.toml -r src/clint/
70
+ language: system
71
+ types: [python]
72
+ pass_filenames: false
73
+ require_serial: true
74
+ - repo: https://github.com/igorshubovych/markdownlint-cli
75
+ rev: v0.43.0
76
+ hooks:
77
+ - id: markdownlint
78
+ args: [--fix, --disable, MD013, MD024, MD033, MD040, MD041, --]
79
+ - repo: https://github.com/commitizen-tools/commitizen
80
+ rev: v4.1.0
81
+ hooks:
82
+ - id: commitizen
83
+ stages: [commit-msg]
84
+ - repo: https://github.com/benomahony/nasa-lsp
85
+ rev: v0.1.6
86
+ hooks:
87
+ - id: nasa-lsp
88
+ exclude: ^tests/
cliqa-0.1.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ben O'Mahony
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.
cliqa-0.1.1/PKG-INFO ADDED
@@ -0,0 +1,88 @@
1
+ Metadata-Version: 2.4
2
+ Name: cliqa
3
+ Version: 0.1.1
4
+ Summary: Analyze CLI tools against clig.dev guidelines
5
+ Project-URL: Homepage, https://github.com/benomahony/cliqa
6
+ Project-URL: Repository, https://github.com/benomahony/cliqa
7
+ Project-URL: Issues, https://github.com/benomahony/cliqa/issues
8
+ Author-email: Ben O'Mahony <benomahony@users.noreply.github.com>
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: analysis,cli,clig,command-line,guidelines,linter
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Software Development :: Quality Assurance
20
+ Classifier: Topic :: Software Development :: Testing
21
+ Requires-Python: >=3.12
22
+ Requires-Dist: pydantic-ai>=1.47.0
23
+ Requires-Dist: rich>=14.2.0
24
+ Requires-Dist: typer>=0.21.1
25
+ Provides-Extra: test
26
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'test'
27
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
28
+ Requires-Dist: pytest>=8.0.0; extra == 'test'
29
+ Description-Content-Type: text/markdown
30
+
31
+ # cliqa
32
+
33
+ Analyze CLI tools against [clig.dev](https://clig.dev) guidelines.
34
+
35
+ ## Installation
36
+
37
+ ```bash
38
+ uv tool install cliqa
39
+ # or
40
+ pip install cliqa
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ Analyze any CLI command:
46
+
47
+ ```bash
48
+ clint analyze ls
49
+ clint analyze git
50
+ clint analyze your-cli-tool
51
+ ```
52
+
53
+ Run specific checks:
54
+
55
+ ```bash
56
+ clint check ls help
57
+ clint check git version
58
+ ```
59
+
60
+ List all available checks:
61
+
62
+ ```bash
63
+ clint list-checks
64
+ ```
65
+
66
+ ## Features
67
+
68
+ - **No mocking**: Real integration tests with actual CLI commands
69
+ - **93% test coverage**: Comprehensive test suite
70
+ - **NASA05 compliance**: Defensive assertions throughout
71
+ - **clig.dev alignment**: Checks against modern CLI best practices
72
+
73
+ ## Development
74
+
75
+ ```bash
76
+ # Install dependencies
77
+ uv sync --extra test
78
+
79
+ # Run tests
80
+ uv run pytest
81
+
82
+ # Run pre-commit checks
83
+ pre-commit run --all-files
84
+ ```
85
+
86
+ ## License
87
+
88
+ MIT
cliqa-0.1.1/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # cliqa
2
+
3
+ Analyze CLI tools against [clig.dev](https://clig.dev) guidelines.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ uv tool install cliqa
9
+ # or
10
+ pip install cliqa
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ Analyze any CLI command:
16
+
17
+ ```bash
18
+ clint analyze ls
19
+ clint analyze git
20
+ clint analyze your-cli-tool
21
+ ```
22
+
23
+ Run specific checks:
24
+
25
+ ```bash
26
+ clint check ls help
27
+ clint check git version
28
+ ```
29
+
30
+ List all available checks:
31
+
32
+ ```bash
33
+ clint list-checks
34
+ ```
35
+
36
+ ## Features
37
+
38
+ - **No mocking**: Real integration tests with actual CLI commands
39
+ - **93% test coverage**: Comprehensive test suite
40
+ - **NASA05 compliance**: Defensive assertions throughout
41
+ - **clig.dev alignment**: Checks against modern CLI best practices
42
+
43
+ ## Development
44
+
45
+ ```bash
46
+ # Install dependencies
47
+ uv sync --extra test
48
+
49
+ # Run tests
50
+ uv run pytest
51
+
52
+ # Run pre-commit checks
53
+ pre-commit run --all-files
54
+ ```
55
+
56
+ ## License
57
+
58
+ MIT
@@ -0,0 +1,114 @@
1
+ [project]
2
+ name = "cliqa"
3
+ version = "0.1.1"
4
+ description = "Analyze CLI tools against clig.dev guidelines"
5
+ readme = "README.md"
6
+ requires-python = ">=3.12"
7
+ license = {text = "MIT"}
8
+ authors = [
9
+ {name = "Ben O'Mahony", email = "benomahony@users.noreply.github.com"}
10
+ ]
11
+ keywords = ["cli", "command-line", "linter", "guidelines", "clig", "analysis"]
12
+ classifiers = [
13
+ "Development Status :: 3 - Alpha",
14
+ "Intended Audience :: Developers",
15
+ "Topic :: Software Development :: Quality Assurance",
16
+ "Topic :: Software Development :: Testing",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.12",
20
+ "Programming Language :: Python :: 3.13",
21
+ "Environment :: Console",
22
+ ]
23
+ dependencies = [
24
+ "pydantic-ai>=1.47.0",
25
+ "rich>=14.2.0",
26
+ "typer>=0.21.1",
27
+ ]
28
+
29
+ [project.urls]
30
+ Homepage = "https://github.com/benomahony/cliqa"
31
+ Repository = "https://github.com/benomahony/cliqa"
32
+ Issues = "https://github.com/benomahony/cliqa/issues"
33
+
34
+ [project.optional-dependencies]
35
+ test = [
36
+ "pytest>=8.0.0",
37
+ "pytest-cov>=4.1.0",
38
+ "pytest-asyncio>=0.23.0",
39
+ ]
40
+
41
+ [project.scripts]
42
+ clint = "clint.cli:app"
43
+
44
+ [build-system]
45
+ requires = ["hatchling"]
46
+ build-backend = "hatchling.build"
47
+
48
+ [tool.hatch.build.targets.wheel]
49
+ packages = ["src/clint"]
50
+
51
+ [tool.basedpyright]
52
+ include = ["src/clint"]
53
+ pythonVersion = "3.12"
54
+ typeCheckingMode = "standard"
55
+ reportMissingTypeStubs = false
56
+ reportUnknownParameterType = false
57
+ reportUnknownArgumentType = false
58
+ reportUnknownMemberType = false
59
+ reportUnknownVariableType = false
60
+
61
+ [tool.vulture]
62
+ min_confidence = 80
63
+ paths = ["src/clint"]
64
+ ignore_names = ["app", "console*", "GUIDELINES_URL", "STANDARD_FLAGS", "CLI_ANALYZER_INSTRUCTIONS"]
65
+
66
+ [tool.bandit]
67
+ exclude_dirs = ["tests"]
68
+ skips = ["B101", "B105", "B404", "B603"]
69
+
70
+ [tool.pytest.ini_options]
71
+ testpaths = ["tests"]
72
+ asyncio_mode = "auto"
73
+ addopts = "--cov=src/clint --cov-report=term-missing --cov-report=html --cov-branch --cov-fail-under=90"
74
+
75
+ [tool.coverage.run]
76
+ branch = true
77
+ source = ["src/clint"]
78
+ omit = ["tests/*"]
79
+
80
+ [tool.coverage.report]
81
+ exclude_lines = [
82
+ "pragma: no cover",
83
+ "def __repr__",
84
+ "raise AssertionError",
85
+ "raise NotImplementedError",
86
+ "if __name__ == .__main__.:",
87
+ "if TYPE_CHECKING:",
88
+ "@abstractmethod",
89
+ ]
90
+
91
+ [tool.bumpversion]
92
+ current_version = "0.1.1"
93
+ parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
94
+ serialize = ["{major}.{minor}.{patch}"]
95
+ search = "{current_version}"
96
+ replace = "{new_version}"
97
+ commit = false
98
+ tag = false
99
+
100
+ [[tool.bumpversion.files]]
101
+ filename = "pyproject.toml"
102
+ search = 'version = "{current_version}"'
103
+ replace = 'version = "{new_version}"'
104
+
105
+ [dependency-groups]
106
+ dev = [
107
+ "bandit>=1.9.3",
108
+ "basedpyright>=1.37.2",
109
+ "dead>=2.1.0",
110
+ "nasa-lsp>=0.1.6",
111
+ "pre-commit>=4.0.0",
112
+ "ruff>=0.14.14",
113
+ "vulture>=2.14",
114
+ ]
@@ -0,0 +1,4 @@
1
+ from .models import AnalysisReport, CheckResult, Severity
2
+ from .cli import app
3
+
4
+ __all__ = ["app", "AnalysisReport", "CheckResult", "Severity"]