Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' | |
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: | |
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' && !startsWith(github.ref, 'refs/tags') | |
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 }} |