mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-10 18:41:26 -06:00
Allow to run CI checks locally
Now the developer is able to run the checks easily and locally (by following the instructions in nova3/README.md). PR #23262.
This commit is contained in:
parent
b0148ef36c
commit
c075097acd
43
.github/workflows/ci_python.yaml
vendored
43
.github/workflows/ci_python.yaml
vendored
@ -59,44 +59,25 @@ jobs:
|
|||||||
python-version: '3.9'
|
python-version: '3.9'
|
||||||
|
|
||||||
- name: Install tools (search engine)
|
- name: Install tools (search engine)
|
||||||
run: pip install bandit isort mypy pycodestyle pyflakes pyright
|
working-directory: src/searchengine/nova3
|
||||||
|
|
||||||
- name: Gather files (search engine)
|
|
||||||
run: |
|
run: |
|
||||||
export "PY_FILES=$(find . -type f -name '*.py' -path '*searchengine*' ! -name 'socks.py' -printf '%p ')"
|
pip install uv
|
||||||
echo $PY_FILES
|
uv sync
|
||||||
echo "PY_FILES=$PY_FILES" >> "$GITHUB_ENV"
|
|
||||||
|
|
||||||
- name: Check typings (search engine)
|
- name: Check typings (search engine)
|
||||||
run: |
|
working-directory: src/searchengine/nova3
|
||||||
curl \
|
run: uv run just check
|
||||||
-L \
|
|
||||||
-o src/searchengine/nova3/socks.pyi "https://github.com/python/typeshed/raw/refs/heads/main/stubs/PySocks/socks.pyi"
|
|
||||||
MYPYPATH="src/searchengine/nova3" \
|
|
||||||
mypy \
|
|
||||||
--explicit-package-bases \
|
|
||||||
--strict \
|
|
||||||
$PY_FILES
|
|
||||||
pyright \
|
|
||||||
$PY_FILES
|
|
||||||
|
|
||||||
- name: Lint code (search engine)
|
- name: Lint code (search engine)
|
||||||
run: |
|
working-directory: src/searchengine/nova3
|
||||||
pyflakes $PY_FILES
|
run: uv run just lint
|
||||||
bandit --skip B110,B310,B314,B405 $PY_FILES
|
|
||||||
|
|
||||||
- name: Format code (search engine)
|
- name: Format code (search engine)
|
||||||
|
working-directory: src/searchengine/nova3
|
||||||
run: |
|
run: |
|
||||||
pycodestyle \
|
uv run just format
|
||||||
--ignore=E265,E402 \
|
git diff --exit-code
|
||||||
--max-line-length=1000 \
|
|
||||||
--statistics \
|
|
||||||
$PY_FILES
|
|
||||||
isort \
|
|
||||||
--check \
|
|
||||||
--diff \
|
|
||||||
$PY_FILES
|
|
||||||
|
|
||||||
- name: Build code (search engine)
|
- name: Build code (search engine)
|
||||||
run: |
|
working-directory: src/searchengine/nova3
|
||||||
python -m compileall $PY_FILES
|
run: uv run just build
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
src/gui/geoip/GeoIP.dat
|
src/gui/geoip/GeoIP.dat
|
||||||
src/gui/geoip/GeoIP.dat.gz
|
src/gui/geoip/GeoIP.dat.gz
|
||||||
src/qbittorrent
|
src/qbittorrent
|
||||||
@ -10,7 +11,6 @@ CMakeLists.txt.user*
|
|||||||
qbittorrent.pro.user*
|
qbittorrent.pro.user*
|
||||||
conf.pri
|
conf.pri
|
||||||
Makefile*
|
Makefile*
|
||||||
*.pyc
|
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
# Compiled object files
|
# Compiled object files
|
||||||
|
|||||||
4
src/searchengine/.gitignore
vendored
Normal file
4
src/searchengine/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
*.egg-info
|
||||||
|
*.lock
|
||||||
|
*.pyc
|
||||||
|
*.pyi
|
||||||
46
src/searchengine/nova3/README.md
Normal file
46
src/searchengine/nova3/README.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
nova3 Engine
|
||||||
|
===
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
0. Prerequisite
|
||||||
|
|
||||||
|
* A Linux-like environment
|
||||||
|
* [Python](https://www.python.org/) installed
|
||||||
|
* [uv](https://docs.astral.sh/uv/) installed
|
||||||
|
|
||||||
|
1. Setup development environment
|
||||||
|
|
||||||
|
1. Setup virtual environment and dependencies
|
||||||
|
```shell
|
||||||
|
uv sync
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Activate virtual environment
|
||||||
|
```shell
|
||||||
|
source .venv/bin/activate
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run type check
|
||||||
|
|
||||||
|
```shell
|
||||||
|
just check
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Run static analyzer
|
||||||
|
|
||||||
|
```shell
|
||||||
|
just lint
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Apply formatting
|
||||||
|
|
||||||
|
```shell
|
||||||
|
just format
|
||||||
|
```
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
* [How to write a search plugin](https://github.com/qbittorrent/search-plugins/wiki/How-to-write-a-search-plugin)
|
||||||
|
* [just - Command runner](https://just.systems/man/en/)
|
||||||
|
* [uv - Python package and project manager](https://docs.astral.sh/uv/)
|
||||||
54
src/searchengine/nova3/justfile
Normal file
54
src/searchengine/nova3/justfile
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
PY_FILES := `find . -maxdepth 1 -type f -name '*.py' ! -name 'socks.py' -printf '%P '`
|
||||||
|
|
||||||
|
# Show available recipes to run
|
||||||
|
default:
|
||||||
|
just --list
|
||||||
|
|
||||||
|
# Run type check
|
||||||
|
check files=PY_FILES: fetch_aux
|
||||||
|
mypy \
|
||||||
|
{{ files }}
|
||||||
|
pyright \
|
||||||
|
{{ files }}
|
||||||
|
|
||||||
|
# Byte-compile files
|
||||||
|
build files=PY_FILES:
|
||||||
|
python \
|
||||||
|
-m compileall \
|
||||||
|
{{ files }}
|
||||||
|
|
||||||
|
# Fetch auxiliary files
|
||||||
|
[private]
|
||||||
|
fetch_aux:
|
||||||
|
#!/usr/bin/sh
|
||||||
|
if [ ! -f 'socks.pyi' ]; then
|
||||||
|
curl -L -o socks.pyi "https://github.com/python/typeshed/raw/refs/heads/main/stubs/PySocks/socks.pyi"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Apply formatting
|
||||||
|
format files=PY_FILES:
|
||||||
|
pycodestyle \
|
||||||
|
--ignore=E265,E402 \
|
||||||
|
--max-line-length=1000 \
|
||||||
|
--statistics \
|
||||||
|
{{ files }}
|
||||||
|
isort \
|
||||||
|
--line-length 1000 \
|
||||||
|
{{ files }}
|
||||||
|
just \
|
||||||
|
--fmt \
|
||||||
|
--unstable
|
||||||
|
|
||||||
|
# Run static analyzer
|
||||||
|
lint files=PY_FILES:
|
||||||
|
pyflakes \
|
||||||
|
{{ files }}
|
||||||
|
bandit \
|
||||||
|
--skip B110,B310,B314,B405 \
|
||||||
|
{{ files }}
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
test files='tests/*.py': fetch_aux
|
||||||
|
pytest \
|
||||||
|
--showlocals \
|
||||||
|
{{ files }}
|
||||||
25
src/searchengine/nova3/pyproject.toml
Normal file
25
src/searchengine/nova3/pyproject.toml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
[project]
|
||||||
|
name = "qBittorrent-search-engine"
|
||||||
|
description = "Search engine for qBittorrent search feature"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.9"
|
||||||
|
dynamic = ["version"]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"bandit",
|
||||||
|
"isort",
|
||||||
|
"mypy",
|
||||||
|
"pycodestyle",
|
||||||
|
"pyflakes",
|
||||||
|
"pyright",
|
||||||
|
"pytest",
|
||||||
|
"rust-just",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.mypy]
|
||||||
|
explicit_package_bases = true
|
||||||
|
strict = true
|
||||||
|
|
||||||
|
[tool.setuptools.packages.find]
|
||||||
|
where = ["./"]
|
||||||
Loading…
x
Reference in New Issue
Block a user