diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 4209e4a..ca381f0 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -23,21 +23,17 @@ jobs: uses: actions/setup-python@v3 with: python-version: "3.10" - - name: Install dependencies - 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 + - name: Install uv + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + with: + # Install a specific version of uv. + version: "0.11.25" + - name: Install the project + run: uv sync --dev + - name: Perform static checks + run: uv run ruff check + - name: Run tests + run: uv run pytest tests build-no-pqc: # Regression coverage for issue #2659: INVALID_DEVID is only declared @@ -54,6 +50,11 @@ jobs: uses: actions/setup-python@v3 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.25" - name: Install build deps run: | sudo apt-get update @@ -81,12 +82,12 @@ jobs: 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 -r requirements/test.txt + uv pip install -e . - name: Import smoke (regression for INVALID_DEVID) - run: python -c "from wolfcrypt.random import Random; Random()" + run: uv run 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 pytest tests diff --git a/README.rst b/README.rst index 3ce4978..9f4ec23 100644 --- a/README.rst +++ b/README.rst @@ -21,20 +21,20 @@ Install the following on Windows: * `CMake `_ * `Git `_ -* `Python 3.9 `_ +* `Python 3.10 or newer `_ * `Build Tools for Visual Studio `_. 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 You can then build the source distribution packages using: .. code-block:: sh - python setup.py sdist + uv build --sdist Linux @@ -42,11 +42,9 @@ 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: -* `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 ------------ @@ -66,7 +64,7 @@ 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 sync If building wolfcrypt-py against a local wolfSSL library, wolfcrypt-py will attempt to do native feature detection to enable/disable wolfcrypt-py @@ -75,6 +73,8 @@ features based on how native wolfSSL has been compiled. It uses the Testing ------- +.. code-block:: console + $ uv run python3 .. code-block:: python @@ -82,25 +82,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 ======================================= diff --git a/pyproject.toml b/pyproject.toml index 8f95d18..9e0abf3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,21 +40,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 = [ diff --git a/requirements/test.txt b/requirements/test.txt index 75bc4c1..9d782d0 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,4 +1,3 @@ -r prod.txt -tox>=4 pytest>=8 types-cffi>=1.17