diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..8a1f4a4 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,32 @@ +name: Prek Auto Fix + +on: + pull_request: + branches: [main,stable] + +permissions: + contents: write + +jobs: + prek-fix: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + fetch-depth: 0 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - name: Check lock file consistency + run: uv sync --locked --all-extras --all-groups + + - name: Run prek on PR changes + run: | + uv run prek run --origin origin/${{ github.base_ref }} --source HEAD || true + + - name: Auto Commit Fixes + uses: stefanzweifel/git-auto-commit-action@v7 + with: + commit_message: "chore: auto fixes by prek" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4d09128..7a5448b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,78 +1,22 @@ repos: -- hooks: - - additional_dependencies: - - aiohttp>=3.12.15 - - apmodel>=0.5.1 - - apsig>=0.6.0 - - charset-normalizer>=3.4.3 - - coverage>=7.10.7 - - fastapi>=0.116.1 - - httpcore[http2,socks]>=1.0.9 - - httpx>=0.28.1 - - pytest-cov>=7.0.0 - - pytest>=8.4.1 - - redis>=5.0.4 - - requests>=2.32.5 - - types-requests>=2.32.4.20250913 - - uvicorn>=0.35.0 - args: - - --fix - description: Run 'ruff' for extremely fast Python linting - entry: ruff check --force-exclude - id: ruff - language: python - minimum_pre_commit_version: 2.9.2 - name: ruff - require_serial: true - types_or: - - python - - pyi - - additional_dependencies: - - aiohttp>=3.12.15 - - apmodel>=0.5.1 - - apsig>=0.6.0 - - charset-normalizer>=3.4.3 - - coverage>=7.10.7 - - fastapi>=0.116.1 - - httpcore[http2,socks]>=1.0.9 - - httpx>=0.28.1 - - pytest-cov>=7.0.0 - - pytest>=8.4.1 - - redis>=5.0.4 - - requests>=2.32.5 - - types-requests>=2.32.4.20250913 - - uvicorn>=0.35.0 - args: [] - description: Run 'ruff format' for extremely fast Python formatting - entry: ruff format --force-exclude - id: ruff-format - language: python - minimum_pre_commit_version: 2.9.2 - name: ruff-format - require_serial: true - types_or: - - python - - pyi - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.1 -- hooks: - - additional_dependencies: - - aiohttp>=3.12.15 - - apmodel>=0.5.1 - - apsig>=0.6.0 - - charset-normalizer>=3.4.3 - - coverage>=7.10.7 - - fastapi>=0.116.1 - - httpcore[http2,socks]>=1.0.9 - - httpx>=0.28.1 - - pytest-cov>=7.0.0 - - pytest>=8.4.1 - - redis>=5.0.4 - - requests>=2.32.5 - - types-requests>=2.32.4.20250913 - - uvicorn>=0.35.0 - id: pyrefly-check - name: Pyrefly (type checking) - pass_filenames: false - repo: https://github.com/facebook/pyrefly-pre-commit - rev: 0.52.0 + - repo: local + hooks: + - id: ruff + name: ruff + entry: ruff check --force-exclude --fix + language: system + types_or: [python, pyi] + require_serial: true + + - id: ruff-format + name: ruff-format + entry: ruff format --force-exclude + language: system + types_or: [python, pyi] + require_serial: true + + - id: pyrefly-check + name: Pyrefly (type checking) + entry: pyrefly check + language: system + pass_filenames: false diff --git a/Taskfile.yaml b/Taskfile.yaml index c466514..5998d4b 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -1,51 +1,74 @@ version: '3' +vars: + UV_SYNC: uv sync --all-extras --all-groups + tasks: default: + desc: Install dependencies using lockfile + cmds: + - "{{.UV_SYNC}} --locked" + silent: true + + prepare: + desc: Setup development environment (uv, Python, and dependencies) cmds: - - uv sync --locked --all-extras --all-groups + - task: default + - | + if [ -f .git/hooks/pre-commit ]; then + echo "WARNING: .git/hooks/pre-commit already exists." + echo "Please remove or back it up before installing prek." + else + uv run prek install + fi silent: true + sync: + desc: Sync dependencies cmds: - - uv sync --all-extras --all-groups + - "{{.UV_SYNC}}" silent: true + upgrade: + desc: Upgrade dependencies cmds: - uv lock --upgrade - - uv sync --locked --all-extras --all-groups + - task: default silent: true + test: - deps: - - default + desc: Run tests + deps: [default] cmds: - uv run pytest silent: true - test-coverage: - deps: - - default + + test:cov: + desc: Run tests with coverage + deps: [default] cmds: - uv run coverage run -m pytest - uv run coverage html silent: true + docs: + desc: Build documentation cmds: - uv run mkdocs build silent: true + docs:serve: + desc: Serve documentation cmds: - uv run mkdocs serve silent: true + build: + desc: Build package cmds: - - cmd: rm --rf dist + - cmd: rm -rf dist platforms: [linux, darwin] - - cmd: rmdir /s /q dist + - cmd: powershell -Command "if (Test-Path dist) { Remove-Item -Recurse -Force dist }" platforms: [windows] - uv build - silent: true - changelog: - cmds: - - uv run git cliff -o CHANGELOG.md - - git add CHANGELOG.md - - 'git commit -m "chore: update changelog [skip ci]"' - silent: true + silent: true \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index be40324..8a71443 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,15 +55,14 @@ dev = [ "pytest>=8.4.1", "pytest-asyncio>=1.3.0", "pytest-cov>=7.0.0", + "pyrefly>=0.46.0", + "ruff>=0.14.10", + "prek>=0.3.3" ] docs = [ "mkdocs>=1.6.1", "mkdocs-material>=9.6.19", ] -lint = [ - "pyrefly>=0.46.0", - "ruff>=0.14.10", -] [tool.ruff] exclude = [ diff --git a/src/apkit/_version.py b/src/apkit/_version.py index 878175f..f3c1bc9 100644 --- a/src/apkit/_version.py +++ b/src/apkit/_version.py @@ -28,7 +28,7 @@ commit_id: COMMIT_ID __commit_id__: COMMIT_ID -__version__ = version = '0.3.3.post1.dev58+ge5df88041.d20260127' -__version_tuple__ = version_tuple = (0, 3, 3, 'post1', 'dev58', 'ge5df88041.d20260127') +__version__ = version = '0.3.8.post1.dev10+g892881c3c' +__version_tuple__ = version_tuple = (0, 3, 8, 'post1', 'dev10', 'g892881c3c') __commit_id__ = commit_id = None diff --git a/uv.lock b/uv.lock index b092f0b..cc795a9 100644 --- a/uv.lock +++ b/uv.lock @@ -183,18 +183,17 @@ server = [ [package.dev-dependencies] dev = [ { name = "coverage" }, + { name = "prek" }, + { name = "pyrefly" }, { name = "pytest" }, { name = "pytest-asyncio" }, { name = "pytest-cov" }, + { name = "ruff" }, ] docs = [ { name = "mkdocs" }, { name = "mkdocs-material" }, ] -lint = [ - { name = "pyrefly" }, - { name = "ruff" }, -] [package.metadata] requires-dist = [ @@ -215,18 +214,17 @@ provides-extras = ["redis", "server"] [package.metadata.requires-dev] dev = [ { name = "coverage", specifier = ">=7.10.7" }, + { name = "prek", specifier = ">=0.3.3" }, + { name = "pyrefly", specifier = ">=0.46.0" }, { name = "pytest", specifier = ">=8.4.1" }, { name = "pytest-asyncio", specifier = ">=1.3.0" }, { name = "pytest-cov", specifier = ">=7.0.0" }, + { name = "ruff", specifier = ">=0.14.10" }, ] docs = [ { name = "mkdocs", specifier = ">=1.6.1" }, { name = "mkdocs-material", specifier = ">=9.6.19" }, ] -lint = [ - { name = "pyrefly", specifier = ">=0.46.0" }, - { name = "ruff", specifier = ">=0.14.10" }, -] [[package]] name = "apmodel" @@ -1385,6 +1383,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "prek" +version = "0.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/f1/7613dc8347a33e40fc5b79eec6bc7d458d8bbc339782333d8433b665f86f/prek-0.3.3.tar.gz", hash = "sha256:117bd46ebeb39def24298ce021ccc73edcf697b81856fcff36d762dd56093f6f", size = 343697, upload-time = "2026-02-15T13:33:28.723Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/8b/dce13d2a3065fd1e8ffce593a0e51c4a79c3cde9c9a15dc0acc8d9d1573d/prek-0.3.3-py3-none-linux_armv6l.whl", hash = "sha256:e8629cac4bdb131be8dc6e5a337f0f76073ad34a8305f3fe2bc1ab6201ede0a4", size = 4644636, upload-time = "2026-02-15T13:33:43.609Z" }, + { url = "https://files.pythonhosted.org/packages/01/30/06ab4dbe7ce02a8ce833e92deb1d9a8e85ae9d40e33d1959a2070b7494c6/prek-0.3.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:4b9e819b9e4118e1e785047b1c8bd9aec7e4d836ed034cb58b7db5bcaaf49437", size = 4651410, upload-time = "2026-02-15T13:33:34.277Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fc/da3bc5cb38471e7192eda06b7a26b7c24ef83e82da2c1dbc145f2bf33640/prek-0.3.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bf29db3b5657c083eb8444c25aadeeec5167dc492e9019e188f87932f01ea50a", size = 4273163, upload-time = "2026-02-15T13:33:42.106Z" }, + { url = "https://files.pythonhosted.org/packages/b4/74/47839395091e2937beced81a5dd2f8ea9c8239c853da8611aaf78ee21a8b/prek-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:ae09736149815b26e64a9d350ca05692bab32c2afdf2939114d3211aaad68a3e", size = 4631808, upload-time = "2026-02-15T13:33:20.076Z" }, + { url = "https://files.pythonhosted.org/packages/e2/89/3f5ef6f7c928c017cb63b029349d6bc03598ab7f6979d4a770ce02575f82/prek-0.3.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:856c2b55c51703c366bb4ce81c6a91102b70573a9fc8637db2ac61c66e4565f9", size = 4548959, upload-time = "2026-02-15T13:33:36.325Z" }, + { url = "https://files.pythonhosted.org/packages/b2/18/80002c4c4475f90ca025f27739a016927a0e5d905c60612fc95da1c56ab7/prek-0.3.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3acdf13a018f685beaff0a71d4b0d2ccbab4eaa1aced6d08fd471c1a654183eb", size = 4862256, upload-time = "2026-02-15T13:33:37.754Z" }, + { url = "https://files.pythonhosted.org/packages/c5/25/648bf084c2468fa7cfcdbbe9e59956bbb31b81f36e113bc9107d80af26a7/prek-0.3.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0f035667a8bd0a77b2bfa2b2e125da8cb1793949e9eeef0d8daab7f8ac8b57fe", size = 5404486, upload-time = "2026-02-15T13:33:39.239Z" }, + { url = "https://files.pythonhosted.org/packages/8b/43/261fb60a11712a327da345912bd8b338dc5a050199de800faafa278a6133/prek-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d09b2ad14332eede441d977de08eb57fb3f61226ed5fd2ceb7aadf5afcdb6794", size = 4887513, upload-time = "2026-02-15T13:33:40.702Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2c/581e757ee57ec6046b32e0ee25660fc734bc2622c319f57119c49c0cab58/prek-0.3.3-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:c0c3ffac16e37a9daba43a7e8316778f5809b70254be138761a8b5b9ef0df28e", size = 4632336, upload-time = "2026-02-15T13:33:25.867Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d8/aa276ce5d11b77882da4102ca0cb7161095831105043ae7979bbfdcc3dc4/prek-0.3.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a3dc7720b580c07c0386e17af2486a5b4bc2f6cc57034a288a614dcbc4abe555", size = 4679370, upload-time = "2026-02-15T13:33:22.247Z" }, + { url = "https://files.pythonhosted.org/packages/70/19/9d4fa7bde428e58d9f48a74290c08736d42aeb5690dcdccc7a713e34a449/prek-0.3.3-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:60e0fa15da5020a03df2ee40268145ec5b88267ec2141a205317ad4df8c992d6", size = 4540316, upload-time = "2026-02-15T13:33:24.088Z" }, + { url = "https://files.pythonhosted.org/packages/25/b5/973cce29257e0b47b16cc9b4c162772ea01dbb7c080791ea0c068e106e05/prek-0.3.3-py3-none-musllinux_1_1_i686.whl", hash = "sha256:553515da9586d9624dc42db32b744fdb91cf62b053753037a0cadb3c2d8d82a2", size = 4724566, upload-time = "2026-02-15T13:33:29.832Z" }, + { url = "https://files.pythonhosted.org/packages/d6/8b/ad8b2658895a8ed2b0bc630bf38686fe38b7ff2c619c58953a80e4de3048/prek-0.3.3-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:9512cf370e0d1496503463a4a65621480efb41b487841a9e9ff1661edf14b238", size = 4995072, upload-time = "2026-02-15T13:33:27.417Z" }, + { url = "https://files.pythonhosted.org/packages/fd/b7/0540c101c00882adb9d30319d22d8f879413598269ecc60235e41875efd4/prek-0.3.3-py3-none-win32.whl", hash = "sha256:b2b328c7c6dc14ccdc79785348589aa39850f47baff33d8f199f2dee80ff774c", size = 4293144, upload-time = "2026-02-15T13:33:46.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/c7/e4f11da653093040efba2d835aa0995d78940aea30887287aeaebe34a545/prek-0.3.3-py3-none-win_amd64.whl", hash = "sha256:3d7d7acf7ca8db65ba0943c52326c898f84bab0b1c26a35c87e0d177f574ca5f", size = 4652761, upload-time = "2026-02-15T13:33:32.962Z" }, + { url = "https://files.pythonhosted.org/packages/11/e4/d99dec54c6a5fb2763488bff6078166383169a93f3af27d2edae88379a39/prek-0.3.3-py3-none-win_arm64.whl", hash = "sha256:8aa87ee7628cd74482c0dd6537a3def1f162b25cd642d78b1b35dd3e81817f60", size = 4367520, upload-time = "2026-02-15T13:33:31.664Z" }, +] + [[package]] name = "propcache" version = "0.4.1"