Merge pull request #133 from roberthdevries/pipeline-use-uv-and-ruff
Change workflow to using uv and ruff.pull/137/head
commit
1cb9b5d6c1
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
33
Makefile
33
Makefile
|
|
@ -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
|
||||
|
|
|
|||
67
README.rst
67
README.rst
|
|
@ -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 =======================================
|
||||
|
|
|
|||
|
|
@ -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 = [
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
-r prod.txt
|
||||
sphinx>=7
|
||||
sphinx-rtd-theme>=2
|
||||
|
|
@ -1 +0,0 @@
|
|||
cffi>=1.17
|
||||
|
|
@ -1 +0,0 @@
|
|||
-r prod.txt
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
-r prod.txt
|
||||
tox>=4
|
||||
pytest>=8
|
||||
types-cffi>=1.17
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
# test_chacha20poly1305.py
|
||||
#
|
||||
# Copyright (C) 2022 wolfSSL Inc.
|
||||
|
|
|
|||
Loading…
Reference in New Issue