Build CPython wheels #163
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
# 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-20.04 | |
outputs: | |
message: ${{ steps.commit_message.outputs.message }} | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@v3 | |
# 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-20.04 | |
strategy: | |
matrix: | |
manylinux_tag: [2014_x86_64, 2_24_x86_64] | |
steps: | |
- name: Checkout the branch | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
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 | |
publish_wheels: | |
name: Publish all wheels on PyPI | |
needs: [build_linux_wheels] | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout the branch | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
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 ./ | |
rm -rf -- pytrexio-manylinux-*/ | |
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') |