1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2024-11-03 20:54:07 +01:00
trexio/.github/workflows/build-wheels.yml

247 lines
8.7 KiB
YAML
Raw Normal View History

# Controls when the workflow will run
on:
# Run this workflow after the TREXIO CI completed
2022-01-07 11:03:00 +01:00
workflow_run:
workflows: [ "TREXIO CI" ]
branches: [ master ]
types:
2022-01-07 11:03:00 +01:00
- completed
# Workflow to build and publish wheels.
# in the get_commit_message job: Include [wheel build] in your commit message to trigger this build.
name: Build CPython wheels
jobs:
get_commit_message:
2022-01-07 11:03:00 +01:00
if: ${{ github.event.workflow_run.conclusion == 'success' }}
name: Get commit message
runs-on: ubuntu-22.04
outputs:
message: ${{ steps.commit_message.outputs.message }}
steps:
- name: Checkout the repo
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
# Gets the correct commit message for pull request
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Get commit message
id: commit_message
run: |
set -xe
COMMIT_MSG=$(git log --no-merges -1 --oneline)
echo "message=$COMMIT_MSG" >> $GITHUB_OUTPUT
echo github.ref ${{ github.ref }}
2024-08-17 19:41:45 +02:00
build_macos_wheels:
name: build wheels for different versions of cpython on macos
needs: get_commit_message
if: >-
contains(needs.get_commit_message.outputs.message, '[wheel build]') ||
2024-08-17 19:41:45 +02:00
(github.repository == 'trex-coe/trexio' && startswith(github.ref, 'refs/tags/v'))
runs-on: ${{ matrix.buildplat[0] }}
env:
2024-08-17 22:27:03 +02:00
HDF5_INSTALLDIR: "/Users/runner/work/trexio/trexio/hdf5"
strategy:
2024-08-17 19:41:45 +02:00
# Ensure that a wheel builder finishes even if another fails
fail-fast: false
matrix:
2024-08-17 19:41:45 +02:00
# Github Actions doesn't support pairing matrix values together, let's improvise
# https://github.com/github/feedback/discussions/7835#discussioncomment-1769026
buildplat:
- [macos-13, macosx_x86_64]
- [macos-14, macosx_arm64]
# test config
python: ["cp38", "cp39", "cp310", "cp311", "cp312"]
exclude:
- buildplat: [macos-14, macosx_arm64]
python: "cp38"
steps:
2024-08-17 19:41:45 +02:00
- uses: actions/checkout@e2f20e631ae6d7dd3b768f56a5d2af784dd54791
2024-08-17 19:41:45 +02:00
- uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1
2022-01-07 11:03:00 +01:00
with:
2024-08-17 19:41:45 +02:00
python-version: "3.x"
2024-08-17 20:20:18 +02:00
- name: install dependencies
run: |
brew install emacs
brew install automake
brew install libtool
brew install swig
2024-08-17 21:09:28 +02:00
- uses: actions/cache@v3
id: cache-hdf5
with:
path: $HDF5_INSTALLDIR
key: ${{ matrix.buildplat[0] }}-hdf5
2024-08-17 21:09:28 +02:00
- name: install hdf5
if: ${{ steps.cache-hdf5.outputs.cache-hit != 'true' }}
2024-08-17 21:09:28 +02:00
run: |
wget https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5-1_12_3.tar.gz
tar -xzf hdf5-1_12_3.tar.gz
2024-08-17 21:14:57 +02:00
cd hdf5-hdf5-1_12_3
if [[ "$ARCH" == "arm64" ]]; then
export MACOSX_DEPLOYMENT_TARGET="11.0"
else
export MACOSX_DEPLOYMENT_TARGET="10.9"
fi
2024-08-17 21:09:28 +02:00
./autogen.sh
2024-08-17 22:27:03 +02:00
./configure CC=gcc-12 --prefix $HDF5_INSTALLDIR --enable-build-mode=production --with-szlib
2024-08-17 21:09:28 +02:00
make -j3
make install
2024-08-17 20:20:18 +02:00
- name: configure with autotools
run: |
./autogen.sh
2024-08-17 22:27:03 +02:00
export PATH=${PATH}:${HDF5_INSTALLDIR}/bin
./configure FC=gfortran-12 --enable-silent-rules
2024-08-17 20:35:23 +02:00
make -j3
2024-08-17 20:45:15 +02:00
- name: prepare python
run: |
make python-install
- name: cleanup python
run: |
2024-08-17 20:35:23 +02:00
rm -rf src/ tools/
mv python/* .
2024-08-17 20:20:18 +02:00
2024-08-17 19:41:45 +02:00
- name: Build wheels
uses: pypa/cibuildwheel@bd033a44476646b606efccdd5eed92d5ea1d77ad # v2.20.0
env:
CIBW_PRERELEASE_PYTHONS: False
CIBW_FREE_THREADED_SUPPORT: False
CIBW_BUILD: ${{ matrix.python }}-${{ matrix.buildplat[1] }}
CIBW_BUILD_VERBOSITY: 1
2024-08-17 19:41:45 +02:00
CIBW_BUILD_FRONTEND: "build"
2024-08-17 22:27:03 +02:00
CIBW_ENVIRONMENT: H5_CFLAGS="-I/Users/runner/work/trexio/trexio/hdf5/include" H5_LDFLAGS="-L/Users/runner/work/trexio/trexio/hdf5/lib"
# disable pytest-ing for now - does not work as expected via CIBW on MacOS --> Ask Anthony to test locally
#CIBW_TEST_REQUIRES: pytest
#CIBW_TEST_COMMAND: "python3 -m pytest -v test/test_api.py"
2024-08-17 19:41:45 +02:00
- uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
with:
name: pytrexio-${{ matrix.python }}-${{ matrix.buildplat[1] }}-wheels
2024-08-17 19:41:45 +02:00
path: ./wheelhouse/*.whl
2024-08-17 19:41:45 +02:00
build_linux_wheels:
name: build wheels for different versions of cpython on manylinux_x86_64
needs: get_commit_message
if: >-
contains(needs.get_commit_message.outputs.message, '[wheel build]') ||
(github.repository == 'trex-coe/trexio' && startswith(github.ref, 'refs/tags/v'))
runs-on: ubuntu-22.04
strategy:
matrix:
manylinux_tag: [2014_x86_64, 2_28_x86_64]
steps:
- name: Checkout the branch
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up Python
uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f
with:
python-version: '3.10'
- name: Install build dependencies
run: python -m pip install -U setuptools
- name: Compute the PYTREXIO_VERSION environment variable
run: echo "PYTREXIO_VERSION=$(grep __version__ python/pytrexio/_version.py | cut -d\ -f3 | tr -d '"')" >> $GITHUB_ENV
- name: Print the PYTREXIO_VERSION
run: echo ${{ env.PYTREXIO_VERSION }}
# Conventional download-artifact action does not work for artifact produced in a different workflow,
# which is the case here (TREXIO CI produced the Python API distribution tarball)
- name: Download the Python API distribution tarball
uses: dawidd6/action-download-artifact@v2
with:
# Specify the name of the workflow file which uploaded the tarball
workflow: actions.yml
workflow_conclusion: success
name: pytrexio-source
path: python
# at the moment we have to pull the custom container with pre-installed HDF5
# the containers are built and stored in GitHub container registry ghcr.io/q-posev
- name: Pull the manylinux Docker container with HDF5
run: docker pull ghcr.io/q-posev/hdf5_1_12_on_${{ matrix.manylinux_tag }}:latest
- name: Build wheels for different versions of CPython inside the Docker container
run: >
docker run --rm
--env PLAT=manylinux${{ matrix.manylinux_tag }}
--volume `pwd`:/tmp
--workdir /tmp
ghcr.io/q-posev/hdf5_1_12_on_${{ matrix.manylinux_tag }}
/bin/bash build_manylinux_wheels.sh trexio-${{ env.PYTREXIO_VERSION }}.tar.gz
working-directory: python
- name: Upload produced wheels as artifacts
uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6
with:
name: pytrexio-manylinux-${{ matrix.manylinux_tag }}-wheels
path: ./python/wheelhouse/*.whl
publish_wheels:
name: Publish all wheels on PyPI
needs: [build_linux_wheels, build_macos_wheels]
runs-on: ubuntu-22.04
permissions:
# IMPORTANT: this permission is mandatory for trusted publishing
id-token: write
steps:
- name: Checkout the branch
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Set up Python
uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f
with:
python-version: '3.10'
- name: Install build dependencies
run: python -m pip install -U setuptools twine
- name: Download the build artifacts (wheels) of this workflow
uses: actions/download-artifact@v4
with:
path: dist
- name: Download the Python API distribution tarball
uses: dawidd6/action-download-artifact@v2
with:
workflow: actions.yml
workflow_conclusion: success
name: pytrexio-source
path: dist
# The artifacts have to be in dist/ directory so that
# pypa/gh-action-pypi-publish action can discover them
- name: Display and rearrange the downloaded artifacts
run: |
ls -R
mv pytrexio-*-wheels/trexio-*.whl ./
rm -rf -- pytrexio-*-wheels/
ls -sh -w 1
working-directory: dist
- name: Publish distribution 📦 to Test PyPI
uses: pypa/gh-action-pypi-publish@release/v1
2022-06-03 10:38:13 +02:00
with:
repository_url: https://test.pypi.org/legacy/
#verbose: true
#- name: Publish distribution 📦 to PyPI
# uses: pypa/gh-action-pypi-publish@release/v1
# ##if: startsWith(github.ref, 'refs/tags')