Skip to content

Commit

Permalink
* Adding #242 more Cython builds using cibuildwheel (thanks to Jacob …
Browse files Browse the repository at this point in the history
…Hayes)
  • Loading branch information
cdgriffith committed Feb 1, 2023
1 parent 0516d8d commit 5bac612
Show file tree
Hide file tree
Showing 11 changed files with 246 additions and 223 deletions.
85 changes: 39 additions & 46 deletions .github/workflows/pythonpublish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ name: Upload Python Package

on:
release:
types: [created]
types: [ created ]

jobs:
deploy-generic:
Expand All @@ -14,68 +14,61 @@ jobs:

steps:
- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine --upgrade
pip install poetry --upgrade
poetry config virtualenvs.create false --local
- name: Poetry Install
run: poetry install --with dev
continue-on-error: true

- name: Poetry Install 2
run: poetry install --with dev

- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}

run: |
python setup.py sdist bdist_wheel
poetry build
twine upload dist/*
deploy-cython-windows:
deploy-cython:
strategy:
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: windows-latest
os: [ ubuntu-latest, macos-12, windows-latest ]
runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine Cython --upgrade
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
python setup.py bdist_wheel
twine upload dist/*
deploy-cython-manylinux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: "3.10"

- uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux2014_x86_64
with:
python-versions: 'cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311'
build-requirements: 'cython'
- uses: actions/checkout@v3
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install twine --upgrade
- name: Build Wheels
env:
CIBW_SKIP: "cp36-* pp* *manylinux_i686"
CIBW_BUILD_VERBOSITY: 1
CIBW_TEST_REQUIRES: "pytest msgpack ruamel.yaml tomli tomli-w"
CIBW_TEST_COMMAND: "pytest {package}/test"
run: |
python -m pip install --upgrade pip
python -m pip install cibuildwheel --upgrade
python -m cibuildwheel --output-dir wheels
- name: Publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
twine upload dist/*-manylinux*.whl
- name: Publish Wheels
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
twine upload wheels/*
150 changes: 73 additions & 77 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,126 +5,122 @@ name: Tests

on:
push:
branches: [ master, development, develop, test, tests ]
branches: [ test, tests ]
pull_request:
branches: [ master, development, develop, test, tests ]

jobs:
package-checks:
build-checks:
strategy:
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "pypy-3.8"]
os: [ubuntu-latest, macos-latest, windows-latest]
os: [ubuntu-latest, macos-12, windows-latest]
runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}

- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: package-check-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-test.txt') }}
- name: Install dependencies
python-version: "3.11"

- name: Build Wheels
env:
CIBW_SKIP: "cp36-* pp* *i686"
CIBW_BUILD_VERBOSITY: 1
CIBW_TEST_REQUIRES: "pytest msgpack ruamel.yaml tomli tomli-w"
CIBW_TEST_COMMAND: "pytest {package}/test"
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements-test.txt
pip install coveralls flake8 flake8-print mypy setuptools wheel twine Cython
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors, undefined names or print statements
flake8 box --count --select=E9,F63,F7,F82,T001,T002,T003,T004 --show-source --statistics
# exit-zero treats all errors as warnings.
flake8 . --count --exit-zero --max-complexity=20 --max-line-length=120 --statistics --extend-ignore E203
- name: Run mypy
run: mypy box
- name: Build Wheel and check distrubiton log description
run: |
python setup.py sdist bdist_wheel
twine check dist/*
- name: Test packaged wheel on *nix
if: matrix.os != 'windows-latest'
run: |
pip install dist/*.whl
rm -rf box
python -m pytest
- name: Test packaged wheel on Windows
if: matrix.os == 'windows-latest'
run: |
$wheel = (Get-ChildItem dist\*.whl | Sort lastWriteTime | Select-Object -last 1).Name
pip install dist\${wheel}
Remove-item box -recurse -force
python -m pytest
python -m pip install cibuildwheel --upgrade
python -m cibuildwheel --output-dir wheels
- name: Upload wheel artifact
uses: actions/upload-artifact@v2
with:
name: python_box
path: dist/*.whl
path: wheels/*.whl

package-manylinux-checks:
lint-and-mypy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: "3.10"
- uses: actions/checkout@v3

- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: package-manylinux-check-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-test.txt') }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements-test.txt
pip install coveralls flake8 flake8-print mypy setuptools wheel twine Cython
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"

- uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux2014_x86_64
with:
python-versions: 'cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311'
build-requirements: 'cython'
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: lint-and-mypy-${{ hashFiles('pyproject.toml') }}

- name: Test packaged wheel on linux
run: |
pip install dist/*cp310-manylinux*.whl
rm -rf box
python -m pytest
- name: Install dependencies
run: |
python -m pip install poetry --upgrade
poetry config virtualenvs.create false --local
- name: Upload wheel artifact
uses: actions/upload-artifact@v2
with:
name: python_box
path: dist/*-manylinux*.whl
- name: Poetry Install
run: poetry install --with dev
continue-on-error: true

- name: Poetry Install 2
run: poetry install --with dev

- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors, undefined names or print statements
python -m flake8 box --count --select=E9,F63,F7,F82,T001,T002,T003,T004 --show-source --statistics
# exit-zero treats all errors as warnings.
python -m flake8 . --count --exit-zero --max-complexity=20 --max-line-length=120 --statistics --extend-ignore E203
- name: Run mypy
run: python -m mypy box

- name: Build Wheel and check distribution log description
run: |
poetry build
python -m twine check dist/*
test:
test-non-cython:
strategy:
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: test-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-test.txt') }}
key: test-${{ hashFiles('pyproject.toml') }}

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements-test.txt
pip install setuptools wheel Cython
python setup.py build_ext --inplace
pip install poetry --upgrade
poetry config virtualenvs.create false --local
- name: Poetry Install
run: poetry install --with dev --with test
continue-on-error: true

- name: Poetry Install 2
run: poetry install --with dev --with test

- name: Poetry Build
run: poetry build
continue-on-error: true

- name: Test with pytest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
pytest --cov=box test/
python -m pytest --cov=box test/
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ repos:
hooks:
- id: cythonize-check
name: Cythonize
entry: python setup.py build_ext --inplace
entry: python -m poetry build
language: system
types: [python]
pass_filenames: false
Expand Down
1 change: 1 addition & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Version 7.0.0
* Adding #236 iPython detection to prevent adding attribute lookup words (thanks to Nishikant Parmar)
* Adding #238 allow ``|`` and ``+`` for frozen boxes (thanks to Peter B)
* Adding new DDBox class (Default Dots Box) that is a subclass of SBox
* Adding #242 more Cython builds using cibuildwheel (thanks to Jacob Hayes)
* Fixing #235 how ``|`` and ``+`` updates were performed for right operations (thanks to aviveh21)
* Fixing #234 typos (thanks to Martin Schorfmann)
* Fixing no implicit optionals with type hinting
Expand Down
2 changes: 1 addition & 1 deletion box/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-

__author__ = "Chris Griffith"
__version__ = "7.0.0rc0"
__version__ = "7.0.0rc2"

from box.box import Box
from box.box_list import BoxList
Expand Down
34 changes: 34 additions & 0 deletions build.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from distutils.command.build_ext import build_ext

from pathlib import Path

root = os.path.abspath(os.path.dirname(__file__))

try:
from Cython.Build import cythonize
except ImportError:
# Got to provide this function. Otherwise, poetry will fail
def build(setup_kwargs):
pass


# Cython is installed. Compile
else:
# This function will be executed in setup.py:
def build(setup_kwargs):
# Build
setup_kwargs.update(
{
"ext_modules": cythonize(
[
str(file.relative_to(root))
for file in Path(root, "box").glob("*.py")
if file.name != "__init__.py"
],
compiler_directives={"language_level": 3},
),
}
)
Loading

0 comments on commit 5bac612

Please sign in to comment.