diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml new file mode 100644 index 0000000..9c5515d --- /dev/null +++ b/.github/workflows/wheels.yml @@ -0,0 +1,109 @@ +name: Wheels + +on: + workflow_dispatch: + push: + branches: [ main ] + paths: + - ".github/workflows/wheels.yml" + - "cmake/**" + - "src/**" + - "test/**" + - "CMakeLists.txt" + - "conanfile.txt" + - "pyproject.toml" + - "setup.cfg" + - "setup.py" + tags: + - 'v*.*.*' + + pull_request: + paths: + - ".github/workflows/wheels.yml" + - "cmake/**" + - "src/**" + - "test/**" + - "CMakeLists.txt" + - "conanfile.txt" + - "pyproject.toml" + - "setup.cfg" + - "setup.py" + + release: + types: + - published + +# https://stackoverflow.com/a/72408109 +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +defaults: + run: + shell: bash + +env: + CONAN_HOME: "${{ github.workspace }}/conan/" + +jobs: + build_sdist: + name: Build SDist + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Build SDist + run: pipx run build --sdist + + - name: Check metadata + run: pipx run twine check dist/* + + - uses: actions/upload-artifact@v3 + with: + path: dist/*.tar.gz + + + build_wheels: + name: Wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + + steps: + - uses: actions/checkout@v3 + + - uses: pypa/cibuildwheel@v2.14 + env: + CIBW_ARCHS_MACOS: auto universal2 + CIBW_PRERELEASE_PYTHONS: "1" + + - name: Verify clean directory + run: git diff --exit-code + + - name: Upload wheels + uses: actions/upload-artifact@v3 + with: + path: wheelhouse/*.whl + + + upload_all: + name: Upload if release + needs: [build_wheels, build_sdist] + runs-on: ubuntu-latest + if: github.event_name == 'release' && github.event.action == 'published' + + steps: + - uses: actions/setup-python@v4 + with: + python-version: "3.x" + + - uses: actions/download-artifact@v3 + with: + name: artifact + path: dist + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.pypi_password }} diff --git a/pyproject.toml b/pyproject.toml index 285842d..2d5b69b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,11 +35,16 @@ filterwarnings = [ testpaths = ["tests"] [tool.cibuildwheel] -test-command = "pytest {project}/tests" -test-extras = ["test"] -test-skip = ["*universal2:arm64"] # Setuptools bug causes collision between pypy and cpython artifacts -before-build = "rm -rf {project}/build" +before-build = ["rm -rf {project}/build", +"""conan install {project} \\ + -s build_type=Release \\ + -s compiler.cppstd=17 \\ + --output-folder "{project}/conan_build" \\ + -o '*/*:shared=True' \\ + --build=missing""" +] +environment = """CMAKE_ARGS="-DCMAKE_PREFIX_PATH='{project}/conan_build'" """ [tool.ruff] extend-select = [