Merge pull request #133 from roberthdevries/pipeline-use-uv-and-ruff

Change workflow to using uv and ruff.
pull/137/head
David Garske 2026-07-08 12:26:11 -07:00 committed by GitHub
commit 1cb9b5d6c1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 97 additions and 88 deletions

View File

@ -18,26 +18,26 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v7
- name: Set up Python 3.10
uses: actions/setup-python@v3
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Install dependencies
- name: Install uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
# Install a specific version of uv.
version: "0.11.26"
- name: Build the wheel
run: uv build --wheel
- name: Install the project
run: uv sync --dev
- name: Perform static checks
run: uv run ruff check
- name: Run tests using the locally built wheel
run: |
python -m pip install --upgrade pip
pip install flake8 pytest tox
pip install -r requirements/test.txt
# Won't pass flake8 yet
# - name: Lint with flake8
# run: |
# # stop the build if there are Python syntax errors or undefined names
# flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
# flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with tox
run: |
tox
uv pip install --reinstall dist/*.whl
uv run --no-sync pytest tests
build-no-pqc:
# Regression coverage for issue #2659: INVALID_DEVID is only declared
@ -45,15 +45,22 @@ jobs:
# without those features must still import wolfcrypt.random successfully.
runs-on: ubuntu-latest
env:
USE_LOCAL_WOLFSSL: ${{ github.workspace }}/wolfssl-install
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v7
with:
submodules: recursive
- name: Set up Python 3.10
uses: actions/setup-python@v3
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Install uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
# Install a specific version of uv.
version: "0.11.26"
- name: Install build deps
run: |
sudo apt-get update
@ -63,7 +70,7 @@ jobs:
cd lib/wolfssl
./autogen.sh
./configure --enable-cryptonly --disable-shared \
--disable-kyber --disable-dilithium \
--disable-mlkem --disable-mldsa \
--enable-aes --enable-aesgcm --enable-aessiv \
--enable-aesctr --enable-aesgcm-stream \
--enable-des3 --enable-chacha --enable-poly1305 \
@ -78,15 +85,15 @@ jobs:
make
make install
- name: Install wolfcrypt-py against the local wolfSSL
env:
USE_LOCAL_WOLFSSL: ${{ github.workspace }}/wolfssl-install
run: |
python -m pip install --upgrade pip
pip install -r requirements/test.txt
pip install -e .
uv venv
uv pip install pytest
uv pip install -e .
- name: Check absence of ML-KEM and ML-DSA support
run: |
uv run --no-sync python -c "from wolfcrypt._ffi import lib as _lib; assert _lib.ML_KEM_ENABLED == 0, 'ML-KEM should be disabled'"
uv run --no-sync python -c "from wolfcrypt._ffi import lib as _lib; assert _lib.ML_DSA_ENABLED == 0, 'ML-DSA should be disabled'"
- name: Import smoke (regression for INVALID_DEVID)
run: python -c "from wolfcrypt.random import Random; Random()"
run: uv run --no-sync python -c "from wolfcrypt.random import Random; Random()"
- name: Run tests
env:
USE_LOCAL_WOLFSSL: ${{ github.workspace }}/wolfssl-install
run: pytest tests/
run: uv run --no-sync pytest tests

View File

@ -7,6 +7,5 @@ include windows/fips_ready/user_settings.h
include windows/non_fips/user_settings.h
recursive-include tests *
recursive-include requirements *
recursive-include docs *.rst conf.py Makefile

View File

@ -49,19 +49,21 @@ clean-test: ## remove test and coverage artifacts
rm -f .coverage
rm -fr htmlcov/
lint: ## check style with flake8
flake8 src tests
pylint src tests/*
lint: ## check style with ruff
uv run ruff check
test: install ## run tests quickly with the default Python
py.test tests
test: ## run tests quickly with the default Python
uv run py.test tests
check: test ## run tests quickly with the default Python
test-all: ## run tests on every Python version with tox
tox
test-all: ## run tests on every Python version with uv
for version in 3.10 3.11 3.12 3.13 3.14; do \
echo "=== Python $$version ==="; \
uv run --python $$version pytest tests || exit 1; \
done
check-all: test-all ## run tests on every Python version with tox
check-all: test-all ## run tests on every Python version with uv
cov: ## check code coverage quickly with the default Python
uv run pytest --cov=wolfcrypt tests
@ -69,21 +71,21 @@ cov: ## check code coverage quickly with the default Python
uv run coverage html
$(BROWSER) htmlcov/index.html
docs: install ## generate Sphinx HTML documentation, including API docs
docs: ## generate Sphinx HTML documentation, including API docs
$(MAKE) -C docs clean
$(MAKE) -C docs html
uv run $(MAKE) -C docs html
$(BROWSER) docs/_build/html/index.html
doctest: install ## generate Sphinx HTML documentation, including API docs
doctest: ## generate Sphinx HTML documentation, including API docs
$(MAKE) -C docs clean
$(MAKE) -C docs doctest
uv run $(MAKE) -C docs doctest
servedocs: docs ## compile the docs watching for changes
watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D .
dist: clean ## builds source and wheel package
python setup.py sdist
uv build --sdist
./make/osx/build_wheels.sh
./make/manylinux1/build_wheels.sh
@ -92,6 +94,3 @@ dist: clean ## builds source and wheel package
release: ## package and upload a release
twine upload dist/*
install: clean ## install the package to the active Python's site-packages
python setup.py install

View File

@ -21,32 +21,32 @@ Install the following on Windows:
* `CMake <https://cmake.org/download/>`_
* `Git <https://git-scm.com/download/win>`_
* `Python 3.9 <https://www.python.org/downloads/windows/>`_
* `Python 3.10 or newer <https://www.python.org/downloads/windows/>`_
* `Build Tools for Visual Studio <https://visualstudio.microsoft.com/downloads/>`_. This is in the "Tools for Visual Studio" section at the bottom of the page. The "Desktop development with C++" pack is needed from the installer.
Then from the command line install tox and CFFI using:
Then from the command line install `uv` using:
.. code-block:: sh
pip install tox cffi
pip install uv
Or by following the installation instructions on the astral web site. `<https://docs.astral.sh/uv/getting-started/installation/>`_
You can then build the source distribution packages using:
.. code-block:: sh
python setup.py sdist
uv build --sdist
Linux
^^^^^
The `setup.py` file covers most things you will need to do to build and install from source. As pre-requisites you will need to install either from your OS repository or pip. You'll also need the Python development package for your Python version:
The `setup.py` file covers most things you will need to do to build and install from source. As pre-requisites you will need to install either from your OS repository or with uv. You'll also need the Python development package for your Python version:
* `cffi`
* `tox`
* `pytest`
* `uv`
To build a source package run `python setup.py sdist`, to build a wheel package run `python setup.py bdist_wheel`. To test the build run `tox`. The `tox` tests rely on Python 3.9 being installed, if you do not have this version we recommend using `pyenv` to install it.
To build a source package run `uv build --sdist`, to build a wheel package run `uv build --wheel`. To test the build run `uv run pytest`. The tests rely on Python 3.10 or later being installed.
Installation
------------
@ -61,20 +61,29 @@ To build wolfcrypt-py against a local installation of the native C wolfSSL
library, use the USE_LOCAL_WOLFSSL variable. This variable should be
wolfcrypt-py can be built against a local version of the native wolfSSL
library by using pip with the USE_LOCAL_WOLFSSL variable. USE_LOCAL_WOLFSSL
library by using uv build --wheel with the USE_LOCAL_WOLFSSL variable. USE_LOCAL_WOLFSSL
should be set equal to the installation path for the wolfSSL library:
.. code-block:: bash
$ USE_LOCAL_WOLFSSL=/path/to/wolfssl/install pip install .
$ USE_LOCAL_WOLFSSL=/path/to/wolfssl/install uv build --wheel
If building wolfcrypt-py against a local wolfSSL library, wolfcrypt-py
will attempt to do native feature detection to enable/disable wolfcrypt-py
features based on how native wolfSSL has been compiled. It uses the
<wolfssl/options.h> header to do feature detection.
After this the local build can be installed from the locally built wheel in dist.
.. code-block:: bash
$ pip install dist/wolfcrypt*.whl
Testing
-------
.. code-block:: console
$ uv run python3
.. code-block:: python
@ -82,25 +91,41 @@ Testing
>>> Sha256('wolfcrypt').hexdigest()
b'96e02e7b1cbcd6f104fe1fdb4652027a5505b68652b70095c6318f9dce0d1844'
Testing ``wolfcrypt``'s source code with ``tox``
------------------------------------------------
Testing ``wolfcrypt``'s source code with ``pytest``
---------------------------------------------------
To run the unit tests in the source code, you'll need ``tox`` and a few other
To run the unit tests in the source code, you'll need ``uv`` and a few other
requirements.
1. Make sure that the testing requirements are installed:
.. code-block:: console
$ sudo -H pip install -r requirements/test.txt
$ uv sync --dev
2. Run ``tox``:
2. Run ``pytest``:
.. code-block:: console
$ tox
...
_________________________________ summary _________________________________
py3: commands succeeded
congratulations :)
$ uv run pytest
======================================= test session starts =======================================
platform linux -- Python 3.10.12, pytest-9.1.1, pluggy-1.6.0
rootdir: /some_directory/wolfcrypt-py
configfile: pyproject.toml
collected 165 items
tests/test_aesgcmstream.py ......... [ 5%]
tests/test_asn.py .. [ 6%]
tests/test_chacha20poly1305.py ...... [ 10%]
tests/test_ciphers.py ........................................... [ 36%]
tests/test_delete_descriptor_binding.py ................. [ 46%]
tests/test_error_string.py .... [ 49%]
tests/test_hashes.py ........................... [ 65%]
tests/test_hkdf.py ........ [ 70%]
tests/test_mldsa.py .............................. [ 88%]
tests/test_mlkem.py ............ [ 95%]
tests/test_pwdbased.py . [ 96%]
tests/test_random.py ...... [100%]
======================================= 165 passed in 7.09s =======================================

View File

@ -42,21 +42,10 @@ dev = [
"ruff",
"sphinx",
"sphinx-rtd-theme",
"tox >= 4",
"ty",
"types-cffi",
]
[tool.tox]
requires = ["tox>=4"]
env_list = ["py3"]
[tool.tox.env_run_base]
package = "wheel"
deps = ["-rrequirements/test.txt"]
commands = [["py.test", "tests/"]]
[tool.ruff]
# Exclude a variety of commonly ignored directories.
exclude = [

View File

@ -1,3 +0,0 @@
-r prod.txt
sphinx>=7
sphinx-rtd-theme>=2

View File

@ -1 +0,0 @@
cffi>=1.17

View File

@ -1 +0,0 @@
-r prod.txt

View File

@ -1,4 +0,0 @@
-r prod.txt
tox>=4
pytest>=8
types-cffi>=1.17

View File

@ -1,4 +1,3 @@
# test_chacha20poly1305.py
#
# Copyright (C) 2022 wolfSSL Inc.