Skip to content

Build

Build #145

Workflow file for this run

name: Build
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
# 🐧 manylinux2014 x86_64
- os: ubuntu-22.04
python: "3.9"
python_id: cp39
platform_id: manylinux_x86_64
- os: ubuntu-22.04
python: "3.10"
python_id: cp310
platform_id: manylinux_x86_64
- os: ubuntu-22.04
python: "3.11"
python_id: cp311
platform_id: manylinux_x86_64
- os: ubuntu-22.04
python: "3.12"
python_id: cp312
platform_id: manylinux_x86_64
# 🐧 manylinux2014 PyPy
- os: ubuntu-22.04
python: "3.9"
python_id: pp39
platform_id: manylinux_x86_64
- os: ubuntu-22.04
python: "3.10"
python_id: pp310
platform_id: manylinux_x86_64
# 🐧 manylinux2014 aarch64
- os: ubuntu-22.04
python: "3.9"
python_id: cp39
platform_id: manylinux_aarch64
- os: ubuntu-22.04
python: "3.10"
python_id: cp310
platform_id: manylinux_aarch64
- os: ubuntu-22.04
python: "3.11"
python_id: cp311
platform_id: manylinux_aarch64
- os: ubuntu-22.04
python: "3.12"
python_id: cp312
platform_id: manylinux_aarch64
# 🦀 musllinux x86_64
- os: ubuntu-22.04
python: "3.9"
python_id: cp39
platform_id: musllinux_x86_64
- os: ubuntu-22.04
python: "3.10"
python_id: cp310
platform_id: musllinux_x86_64
- os: ubuntu-22.04
python: "3.11"
python_id: cp311
platform_id: musllinux_x86_64
- os: ubuntu-22.04
python: "3.12"
python_id: cp312
platform_id: musllinux_x86_64
# 🦀 musllinux ARM
- os: ubuntu-22.04
python: "3.9"
python_id: cp39
platform_id: musllinux_aarch64
- os: ubuntu-22.04
python: "3.10"
python_id: cp310
platform_id: musllinux_aarch64
- os: ubuntu-22.04
python: "3.11"
python_id: cp311
platform_id: musllinux_aarch64
- os: ubuntu-22.04
python: "3.12"
python_id: cp312
platform_id: musllinux_aarch64
# 🍎 macOS x86_64
- os: macos-12-xl
python: "3.9"
python_id: cp39
platform_id: macosx_x86_64
- os: macos-12-xl
python: "3.10"
python_id: cp310
platform_id: macosx_x86_64
- os: macos-12-xl
python: "3.11"
python_id: cp311
platform_id: macosx_x86_64
- os: macos-12-xl
python: "3.12"
python_id: cp312
platform_id: macosx_x86_64
# 🍎 macOS arm64 (Apple silicon)
# see https://github.com/actions/runner-images/blob/main/README.md
# XXX: ☠️ https://github.com/actions/setup-python/issues/696
# - os: macos-13-xl
# python: "3.9"
# python_id: cp39
# platform_id: macosx_arm64
- os: macos-13-xl
python: "3.10"
python_id: cp310
platform_id: macosx_arm64
- os: macos-13-xl
python: "3.11"
python_id: cp311
platform_id: macosx_arm64
- os: macos-13-xl
python: "3.12"
python_id: cp312
platform_id: macosx_arm64
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pdm-project/setup-pdm@v4
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: startsWith(matrix.platform_id, 'macos')
uses: actions/cache/restore@v4
with:
key: build-deps-${{ runner.os }}-${{ matrix.platform_id }}
path: |
/opt/hyperscan
/opt/pcre
- name: Build Hyperscan (macOS)
if: startsWith(matrix.platform_id, 'macos') && 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: startsWith(matrix.platform_id, 'macos') && 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_ARCHS_MACOS: "${{ matrix.platform_id == 'macosx_arm64' && 'arm64' || 'x86_64' }}"
CIBW_ARCHS_LINUX: auto aarch64
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
if: steps.cache-dist.outputs.cache-hit != 'true'
with:
name: wheel-${{ matrix.python_id }}-${{ matrix.platform_id }}
path: |
wheelhouse/*.whl
build_sdist:
name: Source distribution
runs-on: ubuntu-22.04
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pdm-project/setup-pdm@v4
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-22.04
concurrency: release
if: github.repository == 'darvid/python-hyperscan'
needs: [build_wheels, build_sdist]
permissions:
id-token: write
pull-requests: write
contents: write
env:
RELEASE_PR_BRANCH: create-pull-request/patch
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
- uses: chainguard-dev/actions/setup-gitsign@main
- name: Check if release needed
id: release
uses: python-semantic-release/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
root_options: "-vv --noop"
# python-semantic-release displays what it would have
# committed if commit is true and noop is set
commit: "true"
- name: Download artifacts
uses: actions/download-artifact@v4
if: github.event_name == 'workflow_dispatch' || steps.release.outputs.released == 'true'
- name: Prepare dist
if: github.event_name == 'workflow_dispatch' || steps.release.outputs.released == 'true'
run: |
mkdir dist
mv ./wheel-*/*.whl dist/
mv ./sdist/*.tar.gz dist/
- name: Create release branch
if: steps.release.outputs.released == 'true'
run: |
# use the same default branch name that create-pull-request uses
git checkout -b ${RELEASE_PR_BRANCH}
git branch --set-upstream-to=${RELEASE_PR_BRANCH}
- name: Semantic release
uses: python-semantic-release/[email protected]
if: steps.release.outputs.released == 'true'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
root_options: "-vv"
- name: Create PR
uses: peter-evans/[email protected]
if: steps.release.outputs.released == 'true'
with:
base: main
assignees: ${{ github.repository_owner }}
title: "Release ${{ steps.release.outputs.version }}"
- name: Publish package distributions to GitHub Releases
if: github.event_name == 'workflow_dispatch' || steps.release.outputs.released == 'true'
uses: python-semantic-release/upload-to-gh-release@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.release.outputs.tag }}
- name: Publish package distributions to PyPI
if: github.event_name == 'workflow_dispatch' || steps.release.outputs.released == 'true'
uses: pypa/gh-action-pypi-publish@release/v1
with:
skip-existing: true
verbose: true