diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 43cb24e..a95646a 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -17,10 +17,10 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install Rust toolchain @@ -50,11 +50,11 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] target: [x64, x86] steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} architecture: ${{ matrix.target }} @@ -83,186 +83,178 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] target: [x86_64, i686] steps: - - uses: actions/checkout@v4 - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Build Wheels - uses: messense/maturin-action@v1 - with: - target: ${{ matrix.target }} - manylinux: auto - args: -i ${{ matrix.python-version }} --release --out dist - - name: Python UnitTest - if: matrix.target == 'x86_64' - run: | - pip install gilknocker --no-index --find-links dist --force-reinstall - python -m pip install -r requirements-dev.txt - python -m pytest -vs tests - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-linux-${{ matrix.python-version }}-${{ matrix.target }} - path: dist + - uses: actions/checkout@v5 + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Build Wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + manylinux: auto + args: -i ${{ matrix.python-version }} --release --out dist + - name: Python UnitTest + if: matrix.target == 'x86_64' + run: | + pip install gilknocker --no-index --find-links dist --force-reinstall + python -m pip install -r requirements-dev.txt + python -m pytest -vs tests + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-linux-${{ matrix.python-version }}-${{ matrix.target }} + path: dist pypy-linux: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - python-version: [ pypy-3.8, pypy-3.9 ] + python-version: [pypy-3.9, pypy-3.10, pypy-3.11] steps: - - uses: actions/checkout@v4 - - uses: actions/cache@v3 - with: - path: | - ~/.cargo/bin/ - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - target/ - key: ${{ runner.os }}-${{matrix.python-version}}-cargo-${{ hashFiles('**/Cargo.lock') }} - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Build Wheels - gilknocker - uses: PyO3/maturin-action@v1 - with: - manylinux: auto - args: -i ${{ matrix.python-version }} --release --out dist - - name: Python UnitTest - gilknocker - run: | - pip install gilknocker --no-index --find-links dist - pypy -c "import gilknocker" - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-pypy-linux-${{ matrix.python-version }} - path: dist + - uses: actions/checkout@v5 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-${{matrix.python-version}}-cargo-${{ hashFiles('**/Cargo.lock') }} + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Build Wheels - gilknocker + uses: PyO3/maturin-action@v1 + with: + manylinux: auto + args: -i ${{ matrix.python-version }} --release --out dist + - name: Python UnitTest - gilknocker + run: | + pip install gilknocker --no-index --find-links dist + pypy -c "import gilknocker" + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-pypy-linux-${{ matrix.python-version }} + path: dist pypy-macos: runs-on: macos-latest strategy: fail-fast: false matrix: - python-version: [ pypy-3.8, pypy-3.9 ] + python-version: [pypy-3.9, pypy-3.10, pypy-3.11] steps: - - uses: actions/checkout@v4 - - uses: actions/cache@v3 - with: - path: | - ~/.cargo/bin/ - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - target/ - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install maturin - run: pip install maturin - - name: Build Wheels - gilknocker - uses: PyO3/maturin-action@v1 - with: - manylinux: auto - args: -i ${{ matrix.python-version }} --release --out dist - - name: Install wheel - run: | - pip install gilknocker --no-index --find-links dist - - name: Python Import test - run: pypy -c "import gilknocker" - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-pypy-macos-${{ matrix.python-version }} - path: dist + - uses: actions/checkout@v5 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Install maturin + run: pip install maturin + - name: Build Wheels - gilknocker + uses: PyO3/maturin-action@v1 + with: + manylinux: auto + args: -i ${{ matrix.python-version }} --release --out dist + - name: Install wheel + run: | + pip install gilknocker --no-index --find-links dist + - name: Python Import test + run: pypy -c "import gilknocker" + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-pypy-macos-${{ matrix.python-version }} + path: dist linux-cross: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - python-version: - - '3.8' - - '3.9' - - '3.10' - - '3.11' - - '3.12' - - '3.13' + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] target: [aarch64, armv7, s390x, ppc64le] include: - - python-version: pypy3.8 - target: aarch64 - - python-version: pypy3.9 + - python-version: pypy-3.9 target: aarch64 steps: - - uses: actions/checkout@v4 - - uses: actions/cache@v3 - with: - path: | - ~/.cargo/bin/ - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - target/ - key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Build Wheels - uses: PyO3/maturin-action@v1 - with: - target: ${{ matrix.target }} - manylinux: auto - args: -i ${{ matrix.python-version }} --release --out dist - - uses: uraimo/run-on-arch-action@v2 - # skipped cross compiled pypy wheel tests for now - if: ${{ !startsWith(matrix.python-version, 'pypy') }} - name: Install built wheel - with: - arch: ${{ matrix.target }} - distro: ubuntu20.04 - githubToken: ${{ github.token }} - # Mount the dist directory as /artifacts in the container - dockerRunArgs: | - --volume "${PWD}/dist:/artifacts" - install: | - apt-get update - apt-get install -y --no-install-recommends python3 python3-venv software-properties-common - add-apt-repository ppa:deadsnakes/ppa - apt-get update - apt-get install -y curl python3.9-venv python3.10-venv python3.11-venv python3.12-venv python3.13-venv - run: | - ls -lrth /artifacts - PYTHON=python${{ matrix.python-version }} - $PYTHON -m venv venv - venv/bin/pip install -U pip - venv/bin/pip install gilknocker --no-index --find-links /artifacts --force-reinstall - venv/bin/python -c 'import gilknocker' - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-linux-cross-${{ matrix.python-version }}-${{ matrix.target }} - path: dist + - uses: actions/checkout@v5 + - uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Build Wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + manylinux: auto + args: -i ${{ matrix.python-version }} --release --out dist + - uses: uraimo/run-on-arch-action@v3 + # skipped cross compiled pypy wheel tests for now + if: ${{ !startsWith(matrix.python-version, 'pypy') }} + name: Install built wheel + with: + arch: ${{ matrix.target }} + distro: ubuntu22.04 + githubToken: ${{ github.token }} + # Mount the dist directory as /artifacts in the container + dockerRunArgs: | + --volume "${PWD}/dist:/artifacts" + install: | + apt-get update + apt-get install -y --no-install-recommends python3 python3-venv software-properties-common gpg-agent qemu-user-static binfmt-support + add-apt-repository ppa:deadsnakes/ppa + apt-get update + apt-get install -y curl python3.9-venv python3.10-venv python3.11-venv python3.12-venv python3.13-venv python3.14-venv + run: | + ls -lrth /artifacts + PYTHON=python${{ matrix.python-version }} + $PYTHON -m venv venv + venv/bin/pip install -U pip + venv/bin/pip install gilknocker --no-index --find-links /artifacts --force-reinstall + venv/bin/python -c 'import gilknocker' + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-linux-cross-${{ matrix.python-version }}-${{ matrix.target }} + path: dist release: name: Release runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') - needs: [ macos, windows, linux ] + needs: [macos, windows, linux] steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v5 with: pattern: wheels-* merge-multiple: true - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: - python-version: 3.9 + python-version: "3.13" - name: Publish to PyPi env: TWINE_USERNAME: __token__