Skip to content

Workflow file for this run

name: Build wheels and source distribution
on:
push:
branches:
- main
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build_wheels:
name: ${{ matrix.python_id }}-${{ matrix.platform_id }} wheel
runs-on: ${{ matrix.os }}
if: github.repository == 'darvid/python-hyperscan'
env:
PCRE_VERSION: "8.45"
strategy:
fail-fast: false
matrix:
include:
# TODO: Windows support
# Linux 64 bit manylinux2014
- os: ubuntu-latest
python: 3.8
python_id: cp38
platform_id: manylinux_x86_64
- os: ubuntu-latest
python: 3.9
python_id: cp39
platform_id: manylinux_x86_64
- os: ubuntu-latest
python: "3.10"
python_id: cp310
platform_id: manylinux_x86_64
- os: ubuntu-latest
python: "3.11"
python_id: cp311
platform_id: manylinux_x86_64
- os: ubuntu-latest
python: "3.12"
python_id: cp312
platform_id: manylinux_x86_64
- os: ubuntu-latest
python: 3.8
python_id: pp38
platform_id: manylinux_x86_64
- os: ubuntu-latest
python: 3.9
python_id: pp39
platform_id: manylinux_x86_64
- os: ubuntu-latest
python: "3.10"
python_id: pp310
platform_id: manylinux_x86_64
# Linux 64 bit musllinux
- os: ubuntu-latest
python: 3.8
python_id: cp38
platform_id: musllinux_x86_64
- os: ubuntu-latest
python: 3.9
python_id: cp39
platform_id: musllinux_x86_64
- os: ubuntu-latest
python: "3.10"
python_id: cp310
platform_id: musllinux_x86_64
- os: ubuntu-latest
python: "3.11"
python_id: cp311
platform_id: musllinux_x86_64
- os: ubuntu-latest
python: "3.12"
python_id: cp312
platform_id: musllinux_x86_64
# MacOS x86_64
- os: macos-latest
python: 3.8
python_id: cp38
platform_id: macosx_x86_64
- os: macos-latest
python: 3.9
python_id: cp39
platform_id: macosx_x86_64
- os: macos-latest
python: "3.10"
python_id: cp310
platform_id: macosx_x86_64
- os: macos-latest
python: "3.11"
python_id: cp311
platform_id: macosx_x86_64
- os: macos-latest
python: "3.12"
python_id: cp312
platform_id: macosx_x86_64
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: pdm-project/setup-pdm@v3
with:
python-version: ${{ matrix.python }}
cache: true
- name: Install Python deps
run: |
pdm install -G build -G release --no-self --no-lock -v
- name: Increment version
id: semantic-version
run: |
echo "version=$(pdm run semantic-release version --no-commit 2>/dev/null)" >> "$GITHUB_OUTPUT"
- name: Restore build artifacts cache
id: cache-dist
uses: actions/cache/restore@v4
with:
key: ${{ runner.os }}-${{ matrix.python_id }}-${{ matrix.platform_id }}-${{ steps.semantic-version.outputs.version }}-${{ hashFiles('./src', './build_tools/**/build_*.sh') }}
path: |
wheelhouse/*.whl
- name: Restore build dependencies cache (macOS)
id: build-deps-macos
if: matrix.os == 'macos-latest' && steps.cache-dist.outputs.cache-hit != 'true'
uses: actions/cache/restore@v4
with:
key: build-deps-${{ runner.os }}-${{ matrix.platform_id }}
path: |
/opt/hyperscan
/opt/pcre
- name: Build Hyperscan (macOS)
if: matrix.os == 'macos-latest' && steps.cache-dist.outputs.cache-hit != 'true'
run: |
./build_tools/macos/build_hyperscan.sh
env:
HYPERSCAN_VERSION: "v5.4.2"
- name: Upload build dependencies (macOS)
if: matrix.os == 'macos-latest' && steps.build-deps-macos.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
key: ${{ steps.build-deps-macos.outputs.cache-primary-key }}
path: |
/opt/hyperscan
/opt/pcre
- name: Build and test wheels
if: steps.cache-dist.outputs.cache-hit != 'true'
env:
PCRE_VERSION: "${{env.PCRE_VERSION}}"
CIBW_BUILD: ${{ matrix.python_id }}-${{ matrix.platform_id }}
CIBW_BUILD_VERBOSITY: 1
run: bash ./build_tools/wheels/build_wheels.sh
- name: Save build artifacts
uses: actions/cache/save@v4
if: steps.cache-dist.outputs.cache-hit != 'true'
with:
key: ${{ steps.cache-dist.outputs.cache-primary-key }}
path: |
wheelhouse/*.whl
- name: Upload wheels to artifacts
uses: actions/upload-artifact@v4
with:
name: wheel-${{ matrix.python_id }}-${{ matrix.platform_id }}
path: |
wheelhouse/*.whl
build_sdist:
name: Source distribution
runs-on: ubuntu-latest
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pdm-project/setup-pdm@v3
with:
python-version: "3.11"
cache: true
- name: Install Python deps
run: |
pdm install -G build -G release --no-self --no-lock -v
- name: Increment version
run: pdm run semantic-release version --no-commit
- name: Build source distribution
run: |
python setup.py sdist
- name: Upload source distribution to artifacts
uses: actions/upload-artifact@v4
with:
name: sdist
path: |
dist/*.tar.gz
release:
name: Publish package
runs-on: ubuntu-latest
concurrency: release
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: [build_wheels, build_sdist]
permissions:
id-token: write
contents: write
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{secrets.GH_PAT}}
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Prepare dist
run: |
mkdir dist
mv ./wheel-*/*.whl dist/
mv ./sdist/*.tar.gz dist/
- name: Semantic release
id: release
uses: python-semantic-release/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Publish package distributions to PyPI
if: steps.release.outputs.released == 'true'
uses: pypa/gh-action-pypi-publish@release/v1
with:
skip-existing: true
- name: Publish package distributions to GitHub Releases
# if: steps.release.outputs.released == 'true'
uses: python-semantic-release/upload-to-gh-release@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}