diff --git a/.github/workflows/branchbuild.yml b/.github/workflows/branchbuild.yml index b411650..464324e 100644 --- a/.github/workflows/branchbuild.yml +++ b/.github/workflows/branchbuild.yml @@ -11,7 +11,7 @@ jobs: runs-on: "ubuntu-latest" strategy: matrix: - python-version: ["3.6", "3.9", "3.10"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] os: [ubuntu-latest, windows-latest, macos-latest] steps: diff --git a/.github/workflows/releasebuild.yml b/.github/workflows/releasebuild.yml index ca41fc8..f78e0db 100644 --- a/.github/workflows/releasebuild.yml +++ b/.github/workflows/releasebuild.yml @@ -9,176 +9,207 @@ on: - published jobs: + build_sdist: + name: Build source distribution + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: 'true' + + - uses: actions/setup-python@v4 + with: + python-version: "3.12" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install Cython==3.0.7 + + # The cythonized files allow installation from the sdist without cython + - name: Generate cython + run: | + chmod +x ./src/cython/generate.sh + ./src/cython/generate.sh + + - name: Build sdist + run: | + pip3 install build; python3 -m build --sdist + # test whether tarball contains all files required for compiling + pip3 install dist/cydifflib-*.tar.gz + pip3 uninstall cydifflib --yes + + - uses: actions/upload-artifact@v3 + with: + path: dist/*.tar.gz + build_wheels_windows: name: Build wheel on ${{ matrix.os }}/auto/${{matrix.python_tag}} + needs: [build_sdist] runs-on: windows-latest strategy: fail-fast: false matrix: - arch: [auto32, auto64] - python_tag: ["cp36-*", "cp37-*", "cp38-*", "cp39-*", "cp310-*", "pp37-*", "pp38-*"] + arch: [auto32, auto64, ARM64] + python_tag: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*", "pp38-*", "pp39-*"] exclude: # PyPy only supports x86_64 on Windows - arch: auto32 - python_tag: "pp37-*" + python_tag: "pp39-*" - arch: auto32 - python_tag: "pp38-*" + python_tag: "pp39-*" - # PyPy Windows is currently broken in scikit-build - - arch: auto64 - python_tag: "pp37-*" - - arch: auto64 + # ARM64 only supported only supported on cpython >= 3.9 + - arch: ARM64 python_tag: "pp38-*" + - arch: ARM64 + python_tag: "pp39-*" + - arch: ARM64 + python_tag: "cp38-*" env: CIBW_BUILD: ${{matrix.python_tag}} CIBW_ARCHS: ${{matrix.arch}} + CIBW_TEST_SKIP: "*-win32" CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: pytest {package}/tests CIBW_BUILD_VERBOSITY: 3 steps: - - uses: actions/checkout@v2 + - uses: actions/download-artifact@v3 with: - submodules: 'true' + name: artifact + path: dist - - uses: actions/setup-python@v2 + - name: Copy wheel + run: copy dist/*.tar.gz cydifflib.tar.gz + + - uses: actions/setup-python@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.3.1 + uses: pypa/cibuildwheel@v2.15.0 with: + package-dir: cydifflib.tar.gz output-dir: wheelhouse - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: path: ./wheelhouse/*.whl build_wheels_macos: name: Build wheel on ${{ matrix.os }}/auto/${{matrix.python_tag}} + needs: [build_sdist] runs-on: macos-latest strategy: fail-fast: false matrix: arch: [x86_64, arm64, universal2] - python_tag: ["cp36-*", "cp37-*", "cp38-*", "cp39-*", "cp310-*"] + python_tag: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*", "pp38-*", "pp39-*"] exclude: - # MacOS Arm only supported since Python 3.8 + # PyPy not supported on MacOS Arm - arch: arm64 - python_tag: "cp36-*" + python_tag: "pp38-*" - arch: arm64 - python_tag: "cp37-*" + python_tag: "pp39-*" - arch: universal2 - python_tag: "cp36-*" + python_tag: "pp38-*" - arch: universal2 - python_tag: "cp37-*" + python_tag: "pp39-*" env: CIBW_BUILD: ${{matrix.python_tag}} CIBW_ARCHS: ${{matrix.arch}} + CIBW_TEST_SKIP: "{*-macosx_{arm64,universal2},pp*-macosx_*}" CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: pytest {package}/tests CIBW_BUILD_VERBOSITY: 3 steps: - - uses: actions/checkout@v2 + - uses: actions/download-artifact@v3 with: - submodules: 'true' + name: artifact + path: dist - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 + + - name: Copy wheel + run: cp dist/*.tar.gz cydifflib.tar.gz - name: Build wheels - uses: pypa/cibuildwheel@v2.3.1 + uses: pypa/cibuildwheel@v2.15.0 with: + package-dir: cydifflib.tar.gz output-dir: wheelhouse - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: path: ./wheelhouse/*.whl build_wheels_linux: name: Build wheels on ubuntu-latest/${{matrix.arch}}/${{matrix.python_tag}} + needs: [build_sdist] runs-on: ubuntu-latest strategy: fail-fast: false matrix: - # disable s390x and ppc64le wheels while they are not provided by numpy - # arch: [auto, aarch64, ppc64le, s390x] - arch: [auto, aarch64] - python_tag: [ "cp36-*", "cp37-*", "cp38-*", "cp39-*", "cp310-*", "pp37-*", "pp38-*"] + arch: [auto, aarch64, ppc64le, s390x] + python_tag: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*", "pp38-*", "pp39-*"] + exclude: + # PyPy builds not available for these platforms + - arch: ppc64le + python_tag: "pp38-*" + - arch: ppc64le + python_tag: "pp39-*" + - arch: s390x + python_tag: "pp38-*" + - arch: s390x + python_tag: "pp39-*" env: CIBW_ARCHS_LINUX: ${{matrix.arch}} CIBW_BUILD: ${{matrix.python_tag}} - CIBW_SKIP: "*musllinux_*" - CIBW_TEST_SKIP: "*-manylinux_{aarch64,ppc64le,s390x}" + CIBW_TEST_SKIP: "{*_{aarch64,ppc64le,s390x},*musllinux_*,pp38-*}" CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: pytest {package}/tests CIBW_BUILD_VERBOSITY: 3 steps: - - uses: actions/checkout@v2 + - uses: actions/download-artifact@v3 with: - submodules: 'true' + name: artifact + path: dist + + - uses: actions/setup-python@v4 - - uses: actions/setup-python@v2 + - name: Copy wheel + run: cp dist/*.tar.gz cydifflib.tar.gz - - uses: docker/setup-qemu-action@v1 + - uses: docker/setup-qemu-action@v2 name: Set up QEMU - name: Build wheel - uses: pypa/cibuildwheel@v2.3.1 + uses: pypa/cibuildwheel@v2.15.0 with: + package-dir: cydifflib.tar.gz output-dir: wheelhouse - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: path: ./wheelhouse/*.whl - build_sdist: - name: Build source distribution - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - submodules: 'true' - - - uses: actions/setup-python@v2 - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install Cython==3.0.0b02 - - # The cythonized files allow installation from the sdist without cython - - name: Generate cython - run: | - chmod +x ./src/cython/generate.sh - ./src/cython/generate.sh - - - name: Build sdist - run: | - pip3 install build; python3 -m build --sdist - # test whether tarball contains all files required for compiling - pip3 install dist/cydifflib-*.tar.gz - pip3 uninstall cydifflib --yes - - - uses: actions/upload-artifact@v2 - with: - path: dist/*.tar.gz - deploy-wheels: if: github.event_name == 'release' && github.event.action == 'published' needs: [build_wheels_windows, build_wheels_macos, build_wheels_linux, build_sdist] name: deploy wheels to pypi - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest + environment: pypi-release + permissions: + id-token: write steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: artifact path: dist - - uses: pypa/gh-action-pypi-publish@master - with: - user: __token__ - password: ${{ secrets.pypi_password }} + - uses: pypa/gh-action-pypi-publish@v1.8.11 diff --git a/.gitignore b/.gitignore index f939c16..ce77e38 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,4 @@ bench_results/ *.cxx # temp files from benchmarks -bench/temp/ \ No newline at end of file +bench/temp/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c896e1e..65dee4c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -128,4 +128,3 @@ repos: language: pygrep entry: PyBind|Numpy|Cmake|CCache|PyTest exclude: ^\.pre-commit-config.yaml$ - diff --git a/setup.py b/setup.py index a8dcc5b..8cfdc6e 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="cydifflib", - version="1.0.1", + version="1.1.0", url="https://github.com/rapidfuzz/cydifflib", author="Max Bachmann", author_email="pypi@maxbachmann.de", @@ -28,5 +28,5 @@ package_dir={"": "src"}, zip_safe=True, include_package_data=True, - python_requires=">=3.6", + python_requires=">=3.8", )