ci: 🎡 more CI release fixes #193
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_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-12-xl | |
platform_id: macosx_x86_64 | |
- os: flyci-macos-large-latest-m1 | |
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 | |
# 🐧 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 | |
# 🐧 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 | |
# 🦀 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 | |
# 🍎 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) | |
# XXX: ☠️ https://github.com/actions/setup-python/issues/696 | |
# - os: flyci-macos-large-latest-m1 | |
# python: "3.9" | |
# python_id: cp39 | |
# platform_id: macosx_arm64 | |
- os: flyci-macos-large-latest-m1 | |
python: "3.10" | |
python_id: cp310 | |
platform_id: macosx_arm64 | |
- os: flyci-macos-large-latest-m1 | |
python: "3.11" | |
python_id: cp311 | |
platform_id: macosx_arm64 | |
- os: flyci-macos-large-latest-m1 | |
python: "3.12" | |
python_id: cp312 | |
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: Increment version if releasing | |
id: semantic-version | |
run: | | |
current_version=$(grep '^version =' pyproject.toml | head -1 | cut -d '"' -f 2) | |
next_version=$(pdm run semantic-release version --patch --print 2>/dev/null) | |
echo "version=$next_version" >> "$GITHUB_OUTPUT" | |
if [ $next_version != $current_version ]; then | |
pdm run semantic-release version --patch --skip-build --no-commit --no-tag --no-vcs-release --no-changelog | |
fi | |
- 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 }}-${{ steps.semantic-version.outputs.version }}-${{ 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 |