Build #149
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 | |
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: Setup macOS environment | |
if: startsWith(matrix.platform_id, 'macos') | |
run: | | |
sudo mkdir -p /opt/vectorscan /opt/pcre | |
- 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/vectorscan | |
/opt/pcre | |
- name: Build Hyperscan (macOS) | |
if: startsWith(matrix.platform_id, 'macos') && steps.build-deps-macos.outputs.cache-hit != 'true' | |
run: | | |
./build_tools/macos/build_hyperscan.sh | |
- 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/vectorscan | |
/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 |