diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5fb3aee1..01cfdafb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -101,7 +101,6 @@ jobs: - {VERSION: "pypy-3.10", TOXENV: "pypy3"} # MSRV - - {VERSION: "3.12", TOXENV: "py312", RUST_VERSION: "1.63.0"} - {VERSION: "3.12", TOXENV: "py312", RUST_VERSION: "1.64.0"} - {VERSION: "3.12", TOXENV: "py312", RUST_VERSION: "beta"} - {VERSION: "3.12", TOXENV: "py312", RUST_VERSION: "nightly"} @@ -129,8 +128,6 @@ jobs: toolchain: ${{ matrix.PYTHON.RUST_VERSION || 'stable' }} - run: pip install tox - - if: matrix.PYTHON.RUST_VERSION == '1.63.0' - run: echo 'BCRYPT_ALLOW_RUST_163=1' >> $GITHUB_ENV - run: tox env: TOXENV: ${{ matrix.PYTHON.TOXENV }} diff --git a/pyproject.toml b/pyproject.toml index 095e9cf8..9fc9980d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,8 @@ [build-system] -# Must be kept in sync with `setup_requirements` in `setup.py` requires = [ "setuptools>=42.0.0", "wheel", - "setuptools-rust", + "setuptools-rust>=1.7.0", ] # Point to the setuptools' PEP517 build backend explicitly to # disable Pip's fallback guessing @@ -50,6 +49,11 @@ readme = {file = "README.rst", content-type = "text/x-rst"} tests = ["pytest>=3.2.1,!=3.3.0"] typecheck = ["mypy"] +[[tool.setuptools-rust.ext-modules]] +target = "bcrypt._bcrypt" +path = "src/_bcrypt/Cargo.toml" +py-limited-api = "auto" +rust-version = ">=1.64.0" [tool.ruff] line-length = 79 diff --git a/setup.py b/setup.py deleted file mode 100644 index 13694c48..00000000 --- a/setup.py +++ /dev/null @@ -1,101 +0,0 @@ -import os -import platform -import re -import shutil -import subprocess -import sys - -from setuptools import setup - -try: - from setuptools_rust import RustExtension -except ImportError: - print( - """ - =============================DEBUG ASSISTANCE========================== - If you are seeing an error here please try the following to - successfully install bcrypt: - - Upgrade to the latest pip and try again. This will fix errors for most - users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip - =============================DEBUG ASSISTANCE========================== - """ - ) - raise - -if platform.python_implementation() == "PyPy": - if sys.pypy_version_info < (2, 6): - raise RuntimeError( - "bcrypt is not compatible with PyPy < 2.6. Please upgrade PyPy to " - "use this library." - ) - - -try: - setup( - rust_extensions=[ - RustExtension( - "bcrypt._bcrypt", - "src/_bcrypt/Cargo.toml", - py_limited_api="auto", - rust_version=( - ">=1.64.0" - if os.environ.get("BCRYPT_ALLOW_RUST_163", "0") != "0" - else ">=1.63.0" - ), - ), - ], - ) -except: - # Note: This is a bare exception that re-raises so that we don't interfere - # with anything the installation machinery might want to do. Because we - # print this for any exception this msg can appear (e.g. in verbose logs) - # even if there's no failure. For example, SetupRequirementsError is raised - # during PEP517 building and prints this text. setuptools raises SystemExit - # when compilation fails right now, but it's possible this isn't stable - # or a public API commitment so we'll remain ultra conservative. - - import pkg_resources - - print( - """ - =============================DEBUG ASSISTANCE============================= - If you are seeing a compilation error please try the following steps to - successfully install bcrypt: - 1) Upgrade to the latest pip and try again. This will fix errors for most - users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip - 2) Ensure you have a recent Rust toolchain installed. bcrypt requires - rustc >= 1.64.0. (1.63 may be used by setting the BCRYPT_ALLOW_RUST_163 - environment variable) - """ - ) - print(f" Python: {'.'.join(str(v) for v in sys.version_info[:3])}") - print(f" platform: {platform.platform()}") - for dist in ["pip", "setuptools", "setuptools_rust"]: - try: - version = pkg_resources.get_distribution(dist).version - except pkg_resources.DistributionNotFound: - version = "n/a" - print(f" {dist}: {version}") - version = "n/a" - if shutil.which("rustc") is not None: - try: - # If for any reason `rustc --version` fails, silently ignore it - rustc_output = subprocess.run( - ["rustc", "--version"], - capture_output=True, - timeout=0.5, - encoding="utf8", - check=True, - ).stdout - version = re.sub("^rustc ", "", rustc_output.strip()) - except subprocess.SubprocessError: - pass - print(f" rustc: {version}") - - print( - """\ - =============================DEBUG ASSISTANCE============================= - """ - ) - raise diff --git a/tox.ini b/tox.ini index ec13ebb8..dfe3e5bb 100644 --- a/tox.ini +++ b/tox.ini @@ -35,7 +35,7 @@ deps = readme_renderer commands = check-manifest - python setup.py check --metadata --restructuredtext --strict + python3 -m readme_renderer README.rst -o /dev/null [check-manifest]