cd-wheel #37
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: cd-wheel | |
permissions: | |
contents: read | |
on: | |
workflow_call: | |
inputs: | |
repository: | |
description: 'mpi4py repository' | |
default: mpi4py/mpi4py | |
required: false | |
type: string | |
ref: | |
description: 'mpi4py ref' | |
default: '' | |
required: false | |
type: string | |
os-arch: | |
description: 'Target OS-Architecture' | |
default: '' | |
required: false | |
type: string | |
python-tag: | |
description: "CPython/PyPy tag ({cp,pp}3{7..12})" | |
default: '' | |
required: false | |
type: string | |
skip-tag: | |
description: "Skip build tags" | |
default: '' | |
required: false | |
type: string | |
workflow_dispatch: | |
inputs: | |
repository: | |
description: 'mpi4py repository' | |
default: mpi4py/mpi4py | |
required: true | |
type: string | |
ref: | |
description: 'mpi4py ref' | |
default: '' | |
required: false | |
type: string | |
os-arch: | |
description: "Target OS-Architecture" | |
default: Linux-x86_64 | |
required: true | |
type: choice | |
options: | |
- Linux | |
- Linux-x86_64 | |
- Linux-aarch64 | |
- Linux-ppc64le | |
- macOS | |
- macOS-x86_64 | |
- macOS-arm64 | |
- Windows | |
- Windows-AMD64 | |
python-tag: | |
description: "CPython/PyPy tag ({cp,pp}3{7..12})" | |
default: '' | |
required: false | |
type: string | |
skip-tag: | |
description: "Skip build tags" | |
default: '' | |
required: false | |
type: string | |
jobs: | |
setup: | |
runs-on: 'ubuntu-latest' | |
outputs: | |
matrix-build: ${{ steps.setup.outputs.matrix-build }} | |
matrix-merge: ${{ steps.setup.outputs.matrix-merge }} | |
os-arch-list: ${{ steps.setup.outputs.os-arch-list }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: setup | |
run: | | |
# build matrix | |
python -u .cibw/setup-build.py \ | |
--os ${{ inputs.os-arch }} \ | |
--py ${{ inputs.python-tag }} \ | |
>> "$GITHUB_OUTPUT" | |
build: | |
if: ${{ needs.setup.outputs.matrix-build != '[]' }} | |
needs: setup | |
runs-on: ${{ (matrix.os == 'Linux' && 'ubuntu-latest') || | |
(matrix.os == 'macOS' && 'macos-11' ) || | |
(matrix.os == 'Windows' && 'windows-2019' ) }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJSON(needs.setup.outputs.matrix-build) }} | |
steps: | |
- id: checkout | |
uses: actions/checkout@v4 | |
- id: checkout-project | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ inputs.repository || 'mpi4py/mpi4py' }} | |
ref: ${{ inputs.ref }} | |
path: mpi4py.git | |
- id: setup-python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3 | |
- id: setup-cython | |
run: python -m pip install -r ./conf/requirements-build-cython.txt | |
working-directory: mpi4py.git | |
- id: setup-project | |
run: python ./conf/cythonize.py | |
working-directory: mpi4py.git | |
- id: source-date-epoch | |
run: | | |
SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) | |
echo SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH >> $GITHUB_ENV | |
echo $(git log -1 --pretty=%ci) [timestamp=$SOURCE_DATE_EPOCH] | |
shell: bash | |
working-directory: mpi4py.git | |
- id: setup-qemu | |
if: ${{ runner.os == 'Linux' }} | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: all | |
- id: build | |
uses: pypa/[email protected] | |
timeout-minutes: 30 | |
with: | |
package-dir: mpi4py.git | |
output-dir: wheelhouse | |
env: | |
MPI4PY_LOCAL_VERSION: "${{ matrix.mpi-abi }}" | |
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.6" | |
CIBW_BUILD_FRONTEND: "build" | |
CIBW_BUILD: "${{ matrix.py || '*' }}-*" | |
CIBW_SKIP: "${{ inputs.skip-tag }} *musllinux*" | |
CIBW_ARCHS: "${{ matrix.arch }}" | |
CIBW_BEFORE_ALL: >- | |
bash {project}/.cibw/install-mpi.sh | |
"${{ matrix.mpi-abi }}" "${{ matrix.arch }}" | |
CIBW_BEFORE_BUILD: >- | |
bash {project}/.cibw/patch-tools.sh | |
CIBW_TEST_COMMAND: >- | |
bash {project}/.cibw/run-tests.sh | |
CIBW_TEST_SKIP: "*-macosx_arm64" | |
CIBW_ENVIRONMENT_PASS_LINUX: >- | |
MPI4PY_LOCAL_VERSION | |
MPI4PY_DIST_SUFFIX | |
SOURCE_DATE_EPOCH | |
CIBW_ENVIRONMENT_LINUX: >- | |
CFLAGS="-g0 -O" | |
CIBW_ENVIRONMENT_MACOS: >- | |
CFLAGS="-g0 -O" | |
LDFLAGS="-Wl,-headerpad_max_install_names" | |
LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/lib" | |
LDFLAGS="$LDFLAGS -Wl,-rpath,/opt/homebrew/lib" | |
LDFLAGS="$LDFLAGS -Wl,-rpath,/opt/local/lib" | |
CIBW_ENVIRONMENT_WINDOWS: >- | |
I_MPI_ROOT="$USERPROFILE\\mpi\\Library" | |
MSMPI_ROOT="$USERPROFILE\\mpi\\Library" | |
MSMPI_BIN="$MSMPI_ROOT\\bin" | |
MSMPI_INC="$MSMPI_ROOT\\include" | |
MSMPI_LIB64="$MSMPI_ROOT\\lib" | |
CIBW_BEFORE_BUILD_WINDOWS: | |
- id: check | |
run: .cibw/check-wheels.sh wheelhouse | |
shell: bash | |
- id: upload | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build-${{ runner.os }}-${{ matrix.arch }} | |
path: wheelhouse/*.whl | |
merge: | |
if: ${{ needs.setup.outputs.matrix-merge != '[]' }} | |
needs: [setup, build] | |
runs-on: ${{ (matrix.os == 'Linux' && 'ubuntu-latest' ) || | |
(matrix.os == 'macOS' && 'macos-latest' ) || | |
(matrix.os == 'Windows' && 'windows-latest' ) }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJSON(needs.setup.outputs.matrix-merge) }} | |
steps: | |
- id: checkout | |
uses: actions/checkout@v4 | |
- id: checkout-project | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ inputs.repository || 'mpi4py/mpi4py' }} | |
ref: ${{ inputs.ref }} | |
path: mpi4py.git | |
- id: source-date-epoch | |
run: | | |
SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) | |
echo SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH >> $GITHUB_ENV | |
echo $(git log -1 --pretty=%ci) [timestamp=$SOURCE_DATE_EPOCH] | |
shell: bash | |
working-directory: mpi4py.git | |
- id: setup-python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3 | |
- id: install | |
run: python -m pip install -U wheel | |
- id: download | |
uses: actions/download-artifact@v3 | |
with: | |
name: build-${{ runner.os }}-${{ matrix.arch }} | |
path: wheelhouse | |
- id: merge | |
run: python .cibw/merge-wheels.py wheelhouse dist | |
- id: sha256sum | |
run: | | |
# sha256sum | |
test $(uname) == Darwin && sha256sum() { shasum -a 256 $@; } || true | |
echo '```' >> $GITHUB_STEP_SUMMARY | |
sha256sum -b *.whl >> $GITHUB_STEP_SUMMARY | |
echo '```' >> $GITHUB_STEP_SUMMARY | |
shell: bash | |
working-directory: dist | |
- id: upload | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheel-${{ runner.os }} | |
path: dist/*.whl | |
test-Linux: | |
if: ${{ contains(needs.setup.outputs.os-arch-list, '"Linux-x86_64"') }} | |
needs: [setup, merge] | |
runs-on: ${{ matrix.runner }} | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheel-${{ runner.os }} | |
path: dist | |
- uses: docker://debian:latest | |
with: | |
entrypoint: /bin/bash | |
args: .cibw/test-Linux-debian.sh | |
- uses: docker://ubuntu:latest | |
with: | |
entrypoint: /bin/bash | |
args: .cibw/test-Linux-ubuntu.sh | |
- uses: docker://fedora:latest | |
with: | |
entrypoint: /bin/bash | |
args: .cibw/test-Linux-fedora.sh | |
test-macOS: | |
if: contains(needs.setup.outputs.os-arch-list, '"macOS-x86_64"') | |
needs: [setup, merge] | |
runs-on: ${{ matrix.runner }} | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- macos-11 | |
- macos-12 | |
- macos-13 | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheel-${{ runner.os }} | |
path: dist | |
- run: .cibw/test-${{ runner.os }}.sh | |
test-Windows: | |
if: contains(needs.setup.outputs.os-arch-list, '"Windows-AMD64"') | |
needs: [setup, merge] | |
runs-on: ${{ matrix.runner }} | |
strategy: | |
fail-fast: false | |
matrix: | |
runner: | |
- windows-2019 | |
- windows-2022 | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheel-${{ runner.os }} | |
path: dist | |
- run: .cibw/test-${{ runner.os }}.sh | |
if: ${{ runner.os != 'Windows' }} | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8' | |
update-environment: false | |
id: cp38 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.9' | |
update-environment: false | |
id: cp39 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
update-environment: false | |
id: cp310 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
update-environment: false | |
id: cp311 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.12' | |
update-environment: false | |
id: cp312 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 'pypy-3.8' | |
update-environment: false | |
id: pp38 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 'pypy-3.9' | |
update-environment: false | |
id: pp39 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 'pypy-3.10' | |
update-environment: false | |
id: pp310 | |
- run: | | |
# setup Python versions | |
setenv() { | |
local name="$1" path="${2:-}" | |
if [[ "$(uname)" =~ NT ]] && [[ -n "$path" ]]; then | |
path=$(cygpath -u "$path") | |
fi | |
echo "$name=$path" >> $GITHUB_ENV; | |
}; | |
setenv python36 "" | |
setenv python37 "" | |
setenv python38 "${{ steps.cp38.outputs.python-path }}" | |
setenv python39 "${{ steps.cp39.outputs.python-path }}" | |
setenv python310 "${{ steps.cp310.outputs.python-path }}" | |
setenv python311 "${{ steps.cp311.outputs.python-path }}" | |
setenv python312 "${{ steps.cp312.outputs.python-path }}" | |
setenv pypy36 "" | |
setenv pypy37 "" | |
setenv pypy38 "${{ steps.pp38.outputs.python-path }}" | |
setenv pypy39 "${{ steps.pp39.outputs.python-path }}" | |
setenv pypy310 "${{ steps.pp310.outputs.python-path }}" | |
- if: ${{ runner.os == 'Windows' }} | |
uses: mpi4py/setup-mpi@v1 | |
with: | |
mpi: intelmpi | |
- if: ${{ runner.os == 'Windows' }} | |
uses: mpi4py/setup-mpi@v1 | |
with: | |
mpi: msmpi | |
- run: .cibw/test-${{ runner.os }}.sh | |
# test-setup: | |
# needs: [setup, merge] | |
# runs-on: 'ubuntu-latest' | |
# outputs: | |
# matrix-test-cf: ${{ steps.setup.outputs.matrix-test-cf }} | |
# matrix-test-gh: ${{ steps.setup.outputs.matrix-test-gh }} | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - if: ${{ contains(needs.setup.outputs.os-arch-list, '"Linux-x86_64"') }} | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: build-Linux-x86_64 | |
# path: wheelhouse | |
# - if: ${{ contains(needs.setup.outputs.os-arch-list, '"macOS-x86_64"') }} | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: build-macOS-x86_64 | |
# path: wheelhouse | |
# - if: ${{ contains(needs.setup.outputs.os-arch-list, '"Windows-AMD64"') }} | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: build-Windows-AMD64 | |
# path: wheelhouse | |
# - id: setup | |
# run: python -u .cibw/setup-test.py wheelhouse >> "$GITHUB_OUTPUT" | |
# | |
# test-cf: | |
# if: ${{ needs.test-setup.outputs.matrix-test-cf != '[]' }} | |
# needs: test-setup | |
# runs-on: ${{ (matrix.os == 'Linux' && 'ubuntu-latest' ) || | |
# (matrix.os == 'macOS' && 'macos-latest' ) || | |
# (matrix.os == 'Windows' && 'windows-latest') }} | |
# strategy: | |
# fail-fast: false | |
# matrix: | |
# include: ${{ fromJSON(needs.test-setup.outputs.matrix-test-cf) }} | |
# | |
# defaults: | |
# run: | |
# shell: bash -el {0} | |
# | |
# steps: | |
# | |
# - uses: actions/checkout@v4 | |
# | |
# - uses: mamba-org/setup-micromamba@v1 | |
# with: | |
# init-shell: bash | |
# post-cleanup: none | |
# environment-name: test | |
# create-args: >- | |
# ${{ matrix.mpi }}=${{ matrix.mpi-version }} | |
# python=${{ matrix.py }} | |
# pip | |
# condarc: | | |
# show_channel_urls: true | |
# channel_priority: >- | |
# ${{ matrix.mpi == 'impi_rt' && 'flexible' || 'strict' }} | |
# channels: | |
# - conda-forge | |
# - ${{ matrix.mpi == 'impi_rt' && 'intel' || 'nodefaults' }} | |
# - nodefaults | |
# | |
# - run: | | |
# # Tweak MPI runtime | |
# case $(uname)-${{ matrix.mpi }} in | |
# Linux-*) | |
# ;; | |
# Darwin-*) | |
# ;; | |
# *NT*-impi_rt) | |
# I_MPI_ROOT=$(cygpath -w "$CONDA_PREFIX/Library") | |
# echo "I_MPI_ROOT=$I_MPI_ROOT" >> $GITHUB_ENV | |
# echo "$I_MPI_ROOT\\bin" >> $GITHUB_PATH | |
# echo "$I_MPI_ROOT\\bin\\libfabric" >> $GITHUB_PATH | |
# ;; | |
# *NT*-msmpi) | |
# MSMPI_ROOT=$(cygpath -w "$CONDA_PREFIX/Library") | |
# echo "MSMPI_BIN=$MSMPI_ROOT\\bin" >> $GITHUB_ENV | |
# echo "MSMPI_INC=$MSMPI_ROOT\\include" >> $GITHUB_ENV | |
# echo "MSMPI_LIB64=$MSMPI_ROOT\\lib" >> $GITHUB_ENV | |
# echo "$MSMPI_BIN" >> $GITHUB_PATH | |
# ;; | |
# esac | |
# | |
# - uses: actions/download-artifact@v3 | |
# with: | |
# name: wheel-${{ runner.os }} | |
# path: dist | |
# | |
# - run: python -m pip install mpi4py --no-index --find-links=dist | |
# | |
# - uses: ./.github/actions/mpi4py-test-basic | |
# timeout-minutes: 2 | |
# with: | |
# shell: bash -el {0} | |
# | |
# - if: ${{ matrix.mpi == 'mpich' || matrix.mpi == 'openmpi' }} | |
# uses: ./.github/actions/mpi4py-test-basic | |
# timeout-minutes: 2 | |
# env: | |
# MPI4PY_MPIABI: mpi31-${{ matrix.mpi }} | |
# with: | |
# shell: bash -el {0} | |
# | |
# test-gh: | |
# if: ${{ needs.test-setup.outputs.matrix-test-gh != '[]' }} | |
# needs: test-setup | |
# runs-on: ${{ matrix.runner }} | |
# strategy: | |
# fail-fast: false | |
# matrix: | |
# include: ${{ fromJSON(needs.test-setup.outputs.matrix-test-gh) }} | |
# | |
# steps: | |
# | |
# - uses: actions/checkout@v4 | |
# | |
# - uses: mpi4py/setup-mpi@v1 | |
# with: | |
# mpi: ${{ matrix.mpi }} | |
# | |
# - if: ${{ matrix.mpi == 'mpich' && runner.os == 'Linux' }} | |
# run: cd /usr/lib/$(gcc -print-multiarch) && sudo ln -s libmpi{ch,}.so.12 | |
# | |
# - uses: actions/setup-python@v4 | |
# with: | |
# python-version: ${{ matrix.py }} | |
# | |
# - run: python -m pip install --upgrade pip | |
# | |
# - uses: actions/download-artifact@v3 | |
# with: | |
# name: wheel-${{ runner.os }} | |
# path: dist | |
# | |
# - run: python -m pip install mpi4py --no-index --find-links=dist | |
# | |
# - uses: ./.github/actions/mpi4py-test-basic | |
# timeout-minutes: 2 | |
# | |
# - if: ${{ matrix.mpi == 'mpich' || matrix.mpi == 'openmpi' }} | |
# uses: ./.github/actions/mpi4py-test-basic | |
# timeout-minutes: 2 | |
# env: | |
# MPI4PY_MPIABI: mpi31-${{ matrix.mpi }} |