mirror of
https://github.com/TREX-CoE/trexio.git
synced 2024-12-22 20:35:44 +01:00
235 lines
8.2 KiB
YAML
235 lines
8.2 KiB
YAML
|
|
# Controls when the workflow will run
|
|
on:
|
|
# Run this workflow after the TREXIO CI completed
|
|
workflow_run:
|
|
workflows: [ "TREXIO CI" ]
|
|
branches: [ master ]
|
|
types:
|
|
- 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:
|
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
name: Get commit message
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
message: ${{ steps.commit_message.outputs.message }}
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v2
|
|
# 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 "::set-output name=message::$COMMIT_MSG"
|
|
|
|
|
|
build_linux_wheels:
|
|
name: Build Linux 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-latest
|
|
strategy:
|
|
matrix:
|
|
manylinux_tag: [2010_x86_64, 2014_x86_64, 2_24_x86_64]
|
|
|
|
steps:
|
|
- name: Checkout the branch
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v1
|
|
with:
|
|
python-version: '3.9'
|
|
|
|
- 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@v2
|
|
with:
|
|
name: pytrexio-manylinux-${{ matrix.manylinux_tag }}
|
|
path: ./python/wheelhouse/*.whl
|
|
|
|
build_macos_wheels:
|
|
name: Build MacOS wheels for different versions of CPython
|
|
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: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [macos-10.15]
|
|
python-version: ['3.6', '3.7', '3.8', '3.9', '3.10']
|
|
# TODO: normally, one could include macos-11 and the OS list above but the produced wheels receive an error upon installation:
|
|
# ERROR: trexio-1.1.0-cp39-cp39-macosx_11_0_x86_64.whl is not a supported wheel on this platform.
|
|
# This happens even with the MACOSX_DEPLOYMENT_TARGET trick. Perhaps it can be solved by configuring the build system
|
|
# to produce the wheels for MacOS-11 from the very beginning
|
|
#exclude:
|
|
# - os: macos-11
|
|
env:
|
|
H5_LDFLAGS: '-L/usr/local/Cellar/hdf5/1.12.1/lib'
|
|
H5_CFLAGS: '-I/usr/local/Cellar/hdf5/1.12.1/include'
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Display Python version
|
|
run: python --version
|
|
|
|
- name: Install HDF5
|
|
run: brew install hdf5@1.12
|
|
|
|
# This step is needed to produce wheels with the correct platform tag for MacOS-11 (Big Sur)
|
|
#- name: Set MACOSX_DEPLOYMENT_TARGET environment variable
|
|
# if: ${{ matrix.os == 'macos-11' }}
|
|
# run: echo "MACOSX_DEPLOYMENT_TARGET=11.0" >> $GITHUB_ENV
|
|
|
|
- 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 }}
|
|
|
|
- name: Download the Python API distribution tarball
|
|
uses: dawidd6/action-download-artifact@v2
|
|
with:
|
|
workflow: actions.yml
|
|
workflow_conclusion: success
|
|
name: pytrexio-source
|
|
path: python
|
|
|
|
- name: Extract the Python distribution
|
|
run: gzip -cd trexio-${{ env.PYTREXIO_VERSION }}.tar.gz | tar xvf -
|
|
working-directory: python
|
|
|
|
- name: Install Python dependencies
|
|
run: pip install --upgrade pip setuptools build delocate pytest
|
|
|
|
- name: Build wheel for a given version of CPython
|
|
run: |
|
|
mkdir wheelhouse/
|
|
cd trexio-${{ env.PYTREXIO_VERSION }}/
|
|
python -m build --wheel --outdir=./
|
|
delocate-wheel trexio-*.whl
|
|
mv trexio-*.whl ../wheelhouse/
|
|
working-directory: python
|
|
|
|
# Some issues with Python 3.10 wheels on MacOS-11
|
|
- name: Install the wheel
|
|
run: python -m pip install wheelhouse/trexio-*.whl
|
|
working-directory: python
|
|
|
|
- name: Test the wheel
|
|
run: pytest -v test_api.py
|
|
working-directory: python/test
|
|
|
|
- name: Upload produced wheels as artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: pytrexio-${{ matrix.os }}
|
|
path: ./python/wheelhouse/*.whl
|
|
|
|
|
|
publish_wheels:
|
|
name: Publish all wheels on PyPI
|
|
needs: [build_linux_wheels, build_macos_wheels]
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout the branch
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v1
|
|
with:
|
|
python-version: '3.9'
|
|
|
|
- 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@v2
|
|
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-manylinux-*/trexio-*.whl ./
|
|
mv pytrexio-macos-*/trexio-*.whl ./
|
|
rm -rf -- pytrexio-manylinux-*/ pytrexio-macos-*/
|
|
ls -sh -w 1
|
|
working-directory: dist
|
|
|
|
#- name: Publish distribution 📦 to Test PyPI
|
|
# uses: pypa/gh-action-pypi-publish@master
|
|
# with:
|
|
# password: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
# repository_url: https://test.pypi.org/legacy/
|
|
#verbose: true
|
|
|
|
- name: Publish distribution 📦 to PyPI
|
|
uses: pypa/gh-action-pypi-publish@master
|
|
with:
|
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
#if: startsWith(github.ref, 'refs/tags')
|