Skip to content

ci: 🎡 update macos runners (#160) #213

ci: 🎡 update macos runners (#160)

ci: 🎡 update macos runners (#160) #213

Workflow file for this run

name: Build
on:
push:
branches:
- "**"
- "!main"
workflow_call:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build_environment:
name: ${{ matrix.os }} build environment
runs-on: ${{ matrix.os }}
if: github.repository == 'darvid/python-hyperscan'
env:
PCRE_VERSION: "8.45"
strategy:
fail-fast: true
matrix:
include:
- os: ubuntu-22.04
platform_id: manylinux_x86_64
- os: ubuntu-22.04
platform_id: musllinux_x86_64
- os: ubicloud-standard-2-arm
platform_id: manylinux_aarch64
- os: macos-15-large
platform_id: macosx_x86_64
- os: macos-15
platform_id: macosx_arm64
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v4
- name: Setup macOS environment
if: contains(matrix.os, 'macos')
run: |
gid=$(id -g)
uid=$(id -u)
sudo mkdir -p /opt/vectorscan /opt/pcre
sudo chown -R $uid:$gid /opt/vectorscan /opt/pcre
- name: Restore build dependencies cache (macOS)
id: build-deps-macos
if: contains(matrix.os, 'macos')
uses: actions/cache/restore@v4
with:
key: build-deps-${{ matrix.os }}-${{ matrix.platform_id }}
path: |
/opt/vectorscan
/opt/pcre
- name: Build Hyperscan (macOS)
if: contains(matrix.os, 'macos') && steps.build-deps-macos.outputs.cache-hit != 'true'
run: |
./build_tools/macos/build_hyperscan.sh
- name: Upload build dependencies (macOS)
if: contains(matrix.os, '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
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"
needs: [build_environment]
strategy:
fail-fast: false
matrix:
include:
# TODO: Windows support
# 🐧 manylinux 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
- os: ubuntu-22.04
python: "3.13"
python_id: cp313
platform_id: manylinux_x86_64
# 🐧 manylinux aarch64
- os: ubicloud-standard-2-arm
python: "3.9"
python_id: cp39
platform_id: manylinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.10"
python_id: cp310
platform_id: manylinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.11"
python_id: cp311
platform_id: manylinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.12"
python_id: cp312
platform_id: manylinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.13"
python_id: cp313
platform_id: manylinux_aarch64
# 🐧 manylinux2014 PyPy x86_64
- 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 PyPy ARM
- os: ubicloud-standard-2-arm
python: "3.9"
python_id: pp39
platform_id: manylinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.10"
python_id: pp310
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
- os: ubuntu-22.04
python: "3.13"
python_id: cp313
platform_id: musllinux_x86_64
# 🦀 musllinux ARM
- os: ubicloud-standard-2-arm
python: "3.9"
python_id: cp39
platform_id: musllinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.10"
python_id: cp310
platform_id: musllinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.11"
python_id: cp311
platform_id: musllinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.12"
python_id: cp312
platform_id: musllinux_aarch64
- os: ubicloud-standard-2-arm
python: "3.13"
python_id: cp313
platform_id: musllinux_aarch64
# 🍎 macOS x86_64
- os: macos-15-large
python: "3.9"
python_id: cp39
platform_id: macosx_x86_64
- os: macos-15-large
python: "3.10"
python_id: cp310
platform_id: macosx_x86_64
- os: macos-15-large
python: "3.11"
python_id: cp311
platform_id: macosx_x86_64
- os: macos-15-large
python: "3.12"
python_id: cp312
platform_id: macosx_x86_64
- os: macos-15-large
python: "3.13"
python_id: cp313
platform_id: macosx_x86_64
# 🍎 macOS arm64 (Apple silicon)
- os: macos-15
python: "3.9"
python_id: cp39
platform_id: macosx_arm64
- os: macos-15
python: "3.10"
python_id: cp310
platform_id: macosx_arm64
- os: macos-15
python: "3.11"
python_id: cp311
platform_id: macosx_arm64
- os: macos-15
python: "3.12"
python_id: cp312
platform_id: macosx_arm64
- os: macos-15
python: "3.13"
python_id: cp313
platform_id: macosx_arm64
steps:
- name: Checkout python-hyperscan
uses: actions/checkout@v4
with:
fetch-depth: 0
# XXX: ☠️ https://github.com/actions/setup-python/issues/108
- if: ${{ !endsWith(matrix.os, '-arm') }}
uses: pdm-project/setup-pdm@v4
with:
python-version: ${{ matrix.python }}
cache: true
# XXX: deadsnakes does not provide Python 3.10 for ubuntu 20.04 (jammy)
# as it's already the default upstream version; so we only need to use
# it for other versions, and only on ARM.
- if: ${{ endsWith(matrix.os, '-arm') && !endsWith(matrix.python_id, '310') }}
uses: deadsnakes/[email protected]
with:
python-version: ${{ matrix.python }}
- if: ${{ endsWith(matrix.os, '-arm') }}
name: Install PDM
run: |
curl -sSL https://pdm-project.org/install-pdm.py | python3 -
- name: Install Python deps
run: |
pdm install -G build -G release --no-self --frozen-lockfile -v
- name: Setup macOS environment
if: contains(matrix.os, 'macos')
run: |
gid=$(id -g)
uid=$(id -u)
sudo mkdir -p /opt/vectorscan /opt/pcre
sudo chown -R $uid:$gid /opt/vectorscan /opt/pcre
- name: Restore build dependencies cache
if: contains(matrix.os, 'macos')
uses: actions/cache/restore@v4
with:
key: build-deps-${{ matrix.os }}-${{ matrix.platform_id }}
path: |
/opt/vectorscan
/opt/pcre
- name: Restore build artifacts cache
id: cache-wheels
uses: actions/cache/restore@v4
with:
key: ${{ runner.os }}-${{ matrix.python_id }}-${{ matrix.platform_id }}-${{ hashFiles('src/**', 'build_tools/**/build_*.sh') }}
path: |
wheelhouse/*.whl
- name: Build and test wheels
if: steps.cache-wheels.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-wheels.outputs.cache-hit != 'true'
with:
key: ${{ steps.cache-wheels.outputs.cache-primary-key }}
path: |
wheelhouse/*.whl
- name: Upload wheels to artifacts
uses: actions/upload-artifact@v4
# if: github.event_name == 'workflow_dispatch' || steps.cache-wheels.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: Restore source distribution cache
id: cache-sdist
uses: actions/cache/restore@v4
with:
key: sdist-${{ hashFiles('src/**', 'README.md', 'LICENSE', '*.py') }}
path: |
dist/*.tar.gz
- name: Checkout python-hyperscan
uses: actions/checkout@v4
with:
fetch-depth: 0
if: steps.cache-sdist.outputs.cache-hit != 'true'
- uses: pdm-project/setup-pdm@v4
with:
python-version: "3.11"
cache: true
if: steps.cache-sdist.outputs.cache-hit != 'true'
- name: Install Python deps
run: |
pdm install -G build -G release --no-self --no-lock -v
if: steps.cache-sdist.outputs.cache-hit != 'true'
- name: Increment version
run: pdm run semantic-release version --no-commit
if: steps.cache-sdist.outputs.cache-hit != 'true'
- name: Build source distribution
run: |
python setup.py sdist
if: steps.cache-sdist.outputs.cache-hit != 'true'
- name: Save source distribution cache
uses: actions/cache/save@v4
with:
key: ${{ steps.cache-sdist.outputs.cache-primary-key }}
path: |
dist/*.tar.gz
if: steps.cache-sdist.outputs.cache-hit != 'true'
- name: Upload source distribution to artifacts
uses: actions/upload-artifact@v4
# if: github.event_name == 'workflow_dispatch' || steps.cache-sdist.outputs.cache-hit != 'true'
with:
name: sdist
path: |
dist/*.tar.gz