Merge pull request #127 from ukhsa-collaboration/dev #55
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: create PyGOM distributions | |
on: | |
push: | |
branches: | |
- master | |
- dev | |
- feature/* | |
- bugfix/* | |
tags: | |
- 'v*.*.*' | |
pull_request: | |
branches: | |
- master | |
- dev | |
jobs: | |
build_wheels: | |
name: Build wheels on ${{ matrix.platform_id }} for Python v${{ matrix.python[1] }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
# Ensure that a wheel builder finishes even if another fails | |
fail-fast: false | |
matrix: | |
include: | |
# Window 64 bit | |
- os: windows-latest | |
python: [cp39, "3.9"] | |
platform_id: win_amd64 | |
- os: windows-latest | |
python: [cp310, "3.10"] | |
platform_id: win_amd64 | |
- os: windows-latest | |
python: [cp311, "3.11"] | |
platform_id: win_amd64 | |
- os: windows-latest | |
python: [cp312, "3.12"] | |
platform_id: win_amd64 | |
# Python 3.9 in the manylinux build environment requires our dependencies to be | |
# built from source so we won't supply a wheel for 3.9 (source build will prevent lib | |
# version conflicts). | |
# NumPy on Python 3.10 only supports 64bit and is only available with manylinux2014 | |
- os: ubuntu-latest | |
python: [cp310, "3.10"] | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: [cp311, "3.11"] | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
- os: ubuntu-latest | |
python: [cp312, "3.12"] | |
platform_id: manylinux_x86_64 | |
manylinux_image: manylinux2014 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
# We need quite a deep fetch so that we get the versioning right | |
fetch-depth: 500 | |
# Fetch tag manually because fetch-tags option for checkout@v4 does not work | |
- name: Fetch tag annotations | |
run: | | |
# Fetch tag manually because fetch-tags option for checkout@v4 does not work | |
git fetch --force --tags --depth 1 | |
- id: read_tag | |
name: Set VERSION env variable | |
if: ${{ startsWith(github.ref, 'refs/tags') }} | |
run: | | |
# Set tag from GitHub: using git describe for tags inside the run script | |
# seems not working | |
echo "VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r requirements.txt | |
# Used to host cibuildwheel | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python[1] }} | |
- name: Install cibuildwheel | |
run: python -m pip install cibuildwheel>=2.19.2 | |
# Need to duplicate these two lines as it seems Windows and Linux echo treats qutotes differently | |
- name: Build and test the wheels | |
if: matrix.os == 'ubuntu-latest' | |
run: python -m cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BUILD: ${{ matrix.python[0] }}-${{ matrix.platform_id }}* | |
CIBW_TEST_COMMAND: python -W default -m unittest discover --start-directory {project}/tests | |
# setuptools_scm workaround for https://github.com/pypa/setuptools_scm/issues/455 | |
CIBW_BEFORE_BUILD: ${{ github.ref == 'refs/heads/dev' && 'echo ''local_scheme = "no-local-version"'' >> pyproject.toml && git diff --color=always && git update-index --assume-unchanged pyproject.toml' || '' }} | |
- name: Build and test the wheels | |
if: matrix.os == 'windows-latest' | |
run: python -m cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BUILD: ${{ matrix.python[0] }}-${{ matrix.platform_id }}* | |
CIBW_TEST_COMMAND: python -W default -m unittest discover --start-directory {project}/tests | |
# setuptools_scm workaround for https://github.com/pypa/setuptools_scm/issues/455 | |
CIBW_BEFORE_BUILD: ${{ github.ref == 'refs/heads/dev' && 'echo local_scheme = "no-local-version" >> pyproject.toml && git diff --color=always && git update-index --assume-unchanged pyproject.toml' || '' }} | |
# Upload the results | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-${{ matrix.platform_id }}-${{ matrix.python[0] }} | |
path: ./wheelhouse/*.whl | |
build_sdist: | |
name: Build source distribution | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
# We need quite a deep fetch so that we get the versioning right | |
fetch-depth: 500 | |
# Fetch tag manually because fetch-tags option for checkout@v4 does not work | |
- name: Fetch tag annotations | |
run: | | |
# Fetch tag manually because fetch-tags option for checkout@v4 does not work | |
git fetch --force --tags --depth 1 | |
- id: read_tag | |
name: Set VERSION env variable | |
if: ${{ startsWith(github.ref, 'refs/tags') }} | |
run: | | |
# Set tag from GitHub: using git describe for tags inside the run script | |
# seems not working | |
echo "VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
# setuptools_scm workaround for https://github.com/pypa/setuptools_scm/issues/455 | |
- name: Disable local version identifier on develop CI | |
if: github.ref == 'refs/heads/dev' | |
run: | | |
echo 'local_scheme = "no-local-version"' >> pyproject.toml | |
git diff --color=always | |
git update-index --assume-unchanged pyproject.toml | |
- name: Build sdist | |
run: pipx run build --sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-sdist | |
path: dist/*.tar.gz | |
upload_pypi: | |
name: Upload release to PyPI | |
needs: [build_wheels, build_sdist] | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
permissions: | |
id-token: write | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
# unpacks all CIBW artifacts into dist/ | |
pattern: cibw-* | |
path: dist | |
merge-multiple: true | |
# This is the live push to PyPI on tagging the master branch | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
# Upload to PyPI on every tag starting with 'v' | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | |
with: | |
repository-url: https://upload.pypi.org/legacy/ | |
# Upload to PyPI *testing* every dev branch commit | |
- uses: pypa/gh-action-pypi-publish@release/v1 | |
# Upload to testing only if we are on the dev branch | |
if: github.ref == 'refs/heads/dev' | |
with: | |
# Testing only at this point | |
repository-url: https://test.pypi.org/legacy/ |