Add experimental blosc2 support #421
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: CI | |
on: | |
pull_request: | |
release: | |
types: | |
- released | |
- prereleased | |
jobs: | |
build-test: | |
runs-on: ${{ matrix.os }} | |
name: ${{ matrix.os }}-${{ matrix.package.name }}-${{ matrix.target }}-${{ matrix.python-version }} | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
package: | |
- dir: cramjam-python | |
name: cramjam | |
# - dir: cramjam-cli | |
# name: cramjam-cli | |
include: | |
- os: macos-13 | |
target: x86_64 | |
target-triple: x86_64-apple-darwin,aarch64-apple-darwin | |
features: '' | |
- os: macos-13 | |
target: universal2 | |
target-triple: x86_64-apple-darwin,aarch64-apple-darwin | |
features: '' | |
- os: ubuntu-latest | |
target: x86_64 | |
target-triple: x86_64-unknown-linux-gnu | |
# TODO: --features capi fails w/ multiple defs of compress | |
features: --features static-blosc2 | |
# - os: ubuntu-latest | |
# target: i686 | |
# target-triple: i686-unknown-linux-gnu | |
# # TODO: --features capi fails w/ multiple defs of compress | |
# features: --features static-blosc2 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target-triple }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Setup (Mac) | |
if: runner.os == 'macOS' | |
run: | | |
brew install ninja | |
echo "MACOSX_DEPLOYMENT_TARGET=10.12" >> $GITHUB_ENV | |
echo "BLOSC2_INSTALL_PREFIX=$(pwd)/blosc2" >> $GITHUB_ENV | |
echo "DYLD_FALLBACK_LIBRARY_PATH=$(pwd)/blosc2/lib64:$(pwd)/blosc2/lib" >> $GITHUB_ENV | |
- name: Setup (Ubuntu) | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt update | |
sudo apt install ninja-build -y | |
- name: Set up Clang (Ubuntu) | |
if: runner.os == 'Linux' | |
uses: egor-tensin/setup-clang@v1 | |
with: | |
version: 17 | |
- name: Audit | |
if: runner.os == 'Linux' | |
run: cargo install cargo-audit && cargo audit | |
- name: Rust Tests | |
run: cargo test --no-default-features --release ${{ matrix.features || ''}} | |
- name: Build wheel Linux | |
if: runner.os == 'Linux' | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
manylinux: auto | |
args: -i ${{ matrix.python-version }} --release --out dist --manifest-path ${{ matrix.package.dir }}/Cargo.toml ${{ matrix.features || ''}} | |
before-script-linux: yum install clang -y | |
- name: Build wheel (MacOS) | |
if: runner.os == 'macOS' | |
run: | | |
python -m pip install maturin delocate | |
maturin build \ | |
-i python \ | |
--release \ | |
--out dist \ | |
--sdist \ | |
--target ${{ matrix.target }}-apple-darwin ${{ matrix.features || '' }} \ | |
--manifest-path ${{ matrix.package.dir }}/Cargo.toml | |
delocate-wheel -v dist/*.whl | |
# Ensure wheel isn't linking to something we've built outside of it | |
rm -rf $BLOSC2_INSTALL_PREFIX | |
- name: Install built wheel | |
run: python -m pip install ${{ matrix.package.name }}[dev] --pre --find-links dist --force-reinstall | |
- name: Python Tests | |
run: python -m pytest ${{ matrix.package.dir }} -vs --ignore **/benchmarks | |
- name: Upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
# windows: | |
# runs-on: windows-latest | |
# strategy: | |
# matrix: | |
# python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12'] | |
# target: [x64, x86] | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - uses: actions/setup-python@v5 | |
# with: | |
# python-version: ${{ matrix.python-version }} | |
# architecture: ${{ matrix.target }} | |
# - name: Install Rust toolchain | |
# uses: dtolnay/rust-toolchain@stable | |
# - name: Tests | |
# if: matrix.target == 'x64' | |
# run: cargo test --no-default-features --release | |
# - name: Build wheels - cramjam-python | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# target: ${{ matrix.target }} | |
# sccache: true | |
# args: -i python --release --out dist --manifest-path cramjam-python/Cargo.toml | |
# - name: Build wheels - cramjam-cli | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# target: ${{ matrix.target }} | |
# sccache: true | |
# args: -i python --release --out dist --manifest-path cramjam-cli/Cargo.toml | |
# - name: Install built wheel | |
# run: | | |
# pip install cramjam-cli --pre --no-index --find-links dist --force-reinstall | |
# pip install cramjam[dev] --pre --find-links dist --force-reinstall | |
# - name: Python UnitTest - cramjam-python | |
# run: | | |
# python -m pytest cramjam-python -vs --ignore cramjam-python\benchmarks | |
# - name: Python UnitTest - cramjam-cli | |
# run: | | |
# python -m pytest cramjam-cli -vs --ignore cramjam-cli\benchmarks | |
# - name: Upload wheels | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: wheels | |
# path: dist | |
# linux: | |
# runs-on: ubicloud-standard-2 | |
# strategy: | |
# matrix: | |
# python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12'] | |
# target: [x86_64, i686] | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - name: Install Rust toolchain | |
# uses: dtolnay/rust-toolchain@stable | |
# - name: Tests | |
# run: cargo test --no-default-features --release --features capi | |
# - uses: actions/setup-python@v5 | |
# with: | |
# python-version: ${{ matrix.python-version }} | |
# - name: Audit | |
# run: cargo install cargo-audit && cargo audit | |
# - name: Build Wheels - cramjam-python | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# target: ${{ matrix.target }} | |
# manylinux: auto | |
# sccache: true | |
# args: -i ${{ matrix.python-version }} --release --out dist --manifest-path cramjam-python/Cargo.toml | |
# - name: Build Wheels - cramjam-cli | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# target: ${{ matrix.target }} | |
# manylinux: auto | |
# sccache: true | |
# args: -i ${{ matrix.python-version }} --release --out dist --manifest-path cramjam-cli/Cargo.toml | |
# - name: Python UnitTest - cramjam-python | |
# if: matrix.target == 'x86_64' | |
# run: | | |
# pip install cramjam[dev] --pre --find-links dist --force-reinstall | |
# python -m pytest cramjam-python -vs --ignore **/benchmarks | |
# - name: Python UnitTest - cramjam-cli | |
# if: matrix.target == 'x86_64' | |
# run: | | |
# pip install cramjam-cli --pre --no-index --find-links dist --force-reinstall | |
# python -m pytest cramjam-cli -vs --ignore **/benchmarks | |
# - name: Upload wheels | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: wheels | |
# path: dist | |
# linux-cross: | |
# runs-on: ubicloud-standard-4 | |
# strategy: | |
# matrix: | |
# python: | |
# - '3.7' | |
# - '3.8' | |
# - '3.9' | |
# - '3.10' | |
# - '3.11' | |
# - '3.12' | |
# target: [aarch64, armv7, s390x, ppc64le] | |
# include: | |
# - python: pypy3.9 | |
# target: aarch64 | |
# - python: pypy3.10 | |
# target: aarch64 | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - name: Build Wheels cramjam-python | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# target: ${{ matrix.target }} | |
# sccache: true | |
# manylinux: auto | |
# args: -i ${{ matrix.python }} --release --out dist --manifest-path cramjam-python/Cargo.toml | |
# - name: Build Wheels cramjam-cli | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# target: ${{ matrix.target }} | |
# sccache: true | |
# manylinux: auto | |
# args: -i ${{ matrix.python }} --release --out dist --manifest-path cramjam-cli/Cargo.toml | |
# - uses: uraimo/[email protected] | |
# # skipped cross compiled pypy wheel tests for now | |
# if: ${{ !startsWith(matrix.python, 'pypy') }} | |
# name: Install built wheel | |
# with: | |
# arch: ${{ matrix.target }} | |
# distro: ubuntu20.04 | |
# githubToken: ${{ github.token }} | |
# # Mount the dist directory as /artifacts in the container | |
# dockerRunArgs: | | |
# --volume "${PWD}/dist:/artifacts" | |
# install: | | |
# apt-get update | |
# apt-get install -y --no-install-recommends python3 python3-venv software-properties-common | |
# add-apt-repository ppa:deadsnakes/ppa | |
# apt-get update | |
# apt-get install -y curl python3.7-venv python3.9-venv python3.10-venv python3.11-venv python3.12-venv | |
# run: | | |
# ls -lrth /artifacts | |
# PYTHON=python${{ matrix.python }} | |
# $PYTHON -m venv venv | |
# venv/bin/pip install -U pip | |
# venv/bin/pip install cramjam --pre --no-index --find-links /artifacts --force-reinstall | |
# venv/bin/pip install cramjam-cli --pre --no-index --find-links /artifacts --force-reinstall | |
# venv/bin/python -c 'import cramjam' | |
# venv/bin/cramjam-cli --help | |
# - name: Upload wheels | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: wheels | |
# path: dist | |
# pypy: | |
# runs-on: ${{ matrix.platform.os }} | |
# strategy: | |
# fail-fast: false | |
# matrix: | |
# platform: | |
# - os: ubicloud-standard-2 | |
# flags: '' | |
# - os: macos-13 | |
# flags: '' | |
# - os: windows-latest | |
# flags: '--features generate-import-lib' | |
# python: | |
# - pypy-3.9 | |
# - pypy-3.10 | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - uses: actions/setup-python@v5 | |
# with: | |
# python-version: ${{ matrix.python }} | |
# - name: Build Wheels - cramjam-python | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# manylinux: auto | |
# sccache: true | |
# args: -i ${{ matrix.python }} --release ${{ matrix.platform.flags }} --out dist --manifest-path cramjam-python/Cargo.toml | |
# - name: Build Wheels - cramjam-cli | |
# if: ${{ matrix.platform.os != 'windows-latest' }} | |
# uses: PyO3/maturin-action@v1 | |
# with: | |
# manylinux: auto | |
# sccache: true | |
# args: -i ${{ matrix.python }} --release ${{ matrix.platform.flags }} --out dist --manifest-path cramjam-cli/Cargo.toml | |
# - name: cramjam test | |
# # TODO: I'm not sure but the actual collection of tests on windows using pypy3.10 takes forever and/or fails | |
# if: ${{ matrix.python != 'pypy-3.10' && matrix.platform.os != 'windows-latest' }} | |
# run: | | |
# pip install cramjam[dev] --pre --find-links dist --force-reinstall | |
# python -m pytest cramjam-python -vs --ignore **/benchmarks | |
# - name: cramjam-cli test | |
# if: ${{ matrix.platform.os != 'windows-latest' }} | |
# run: | | |
# pip install cramjam-cli --pre --no-index --find-links dist --force-reinstall | |
# cd cramjam-cli | |
# cramjam-cli --help | |
# - name: Upload wheels | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: wheels | |
# path: dist | |
# pypi-publish-cramjam-python: | |
# name: Upload cramjam release to PyPI | |
# runs-on: ubuntu-latest | |
# if: "startsWith(github.ref, 'refs/tags/')" | |
# needs: [ macos, windows, linux, linux-cross, pypy ] | |
# environment: | |
# name: pypi | |
# url: https://pypi.org/p/cramjam | |
# permissions: | |
# id-token: write | |
# steps: | |
# - uses: actions/download-artifact@v3 | |
# with: | |
# name: wheels | |
# - name: Only cramjam-python stuff | |
# run: rm cramjam_cli* | |
# - name: Publish package distributions to PyPI | |
# uses: pypa/gh-action-pypi-publish@release/v1 | |
# with: | |
# skip-existing: true | |
# packages-dir: ./ | |
# pypi-publish-cramjam-cli: | |
# name: Upload cramjam-cli release to PyPI | |
# runs-on: ubuntu-latest | |
# if: "startsWith(github.ref, 'refs/tags/')" | |
# needs: [ macos, windows, linux, linux-cross, pypy ] | |
# environment: | |
# name: pypi | |
# url: https://pypi.org/p/cramjam-cli | |
# permissions: | |
# id-token: write | |
# steps: | |
# - uses: actions/download-artifact@v3 | |
# with: | |
# name: wheels | |
# - name: Only cramjam-cli stuff | |
# run: | | |
# ls -l | |
# mkdir cramjam-cli | |
# mv cramjam_cli* cramjam-cli/ | |
# - name: Publish package distributions to PyPI | |
# uses: pypa/gh-action-pypi-publish@release/v1 | |
# with: | |
# skip-existing: true | |
# packages-dir: cramjam-cli/ |