Upload dev wheels to Anaconda.org + revamp wheels publishing workflow… #11
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: Build Wheels and Release | |
on: | |
push: | |
tags: | |
- "v*" | |
- "buildwheels*" | |
branches: | |
# Runs on every merge to master to upload .dev0 wheels to anaconda.org | |
- master | |
- v1.** | |
# Make it possible to upload wheels manually if needed | |
workflow_dispatch: | |
inputs: | |
push_wheels: | |
description: > | |
'Push wheels to Anaconda if "true". Default is "false". Warning: this will overwrite existing wheels.' | |
required: false | |
default: "false" | |
# Upload wheels to anaconda.org on a schedule | |
schedule: | |
# Run at 0300 hours on days 3 and 17 of the month | |
- cron: "0 3 3,17 * *" | |
env: | |
CIBW_BUILD_VERBOSITY: 2 | |
# CIBW_BEFORE_BUILD: pip install cython | |
CIBW_TEST_REQUIRES: pytest | |
CIBW_TEST_COMMAND: pytest --pyargs pywt -m "not slow" | |
CIBW_ENVIRONMENT: PIP_PREFER_BINARY=1 | |
jobs: | |
build_linux_x86_64_wheels: | |
name: Build python ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
cibw_python: ["cp39", "cp310", "cp311", "cp312"] | |
cibw_manylinux: [manylinux2014] | |
cibw_arch: ["x86_64"] | |
steps: | |
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: "3.9" | |
- name: Build the wheel | |
uses: pypa/cibuildwheel@8d945475ac4b1aac4ae08b2fd27db9917158b6ce # 2.17.0 | |
with: | |
output-dir: dist | |
env: | |
CIBW_BUILD: ${{ matrix.cibw_python }}-* | |
CIBW_ARCHS_LINUX: ${{ matrix.cibw_arch }} | |
CIBW_SKIP: "*-musllinux_*" | |
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.cibw_manylinux }} | |
CIBW_MANYLINUX_I686_IMAGE: "manylinux2010" | |
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: wheels_linux_${{ matrix.cibw_arch }}_${{ matrix.cibw_python }}_manylinux2014 | |
path: ./dist/*.whl | |
if-no-files-found: error | |
build_linux_aarch64_wheels: | |
name: Build python ${{ matrix.cibw_python }} aarch64 wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
cibw_python: ["cp39", "cp310", "cp311", "cp312"] | |
cibw_manylinux: [manylinux2014] | |
cibw_arch: ["aarch64"] | |
steps: | |
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: "3.9" | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: arm64 | |
- name: Build the wheel | |
uses: pypa/cibuildwheel@8d945475ac4b1aac4ae08b2fd27db9917158b6ce # 2.17.0 | |
with: | |
output-dir: dist | |
env: | |
CIBW_BUILD: ${{ matrix.cibw_python }}-* | |
CIBW_ARCHS_LINUX: ${{ matrix.cibw_arch }} | |
CIBW_SKIP: "*-musllinux_*" | |
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.cibw_manylinux }} | |
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: wheels_linux_${{ matrix.cibw_arch }}_${{ matrix.cibw_python }}_manylinux2014 | |
path: ./dist/*.whl | |
build_macos_wheels: | |
name: Build python ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest] | |
cibw_python: ["cp39", "cp310", "cp311", "cp312"] | |
cibw_arch: ["x86_64", "arm64"] | |
steps: | |
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: "3.9" | |
- name: Build wheels for CPython (macOS) | |
uses: pypa/cibuildwheel@8d945475ac4b1aac4ae08b2fd27db9917158b6ce # 2.17.0 | |
with: | |
output-dir: dist | |
env: | |
CIBW_BUILD: ${{ matrix.cibw_python }}-* | |
CIBW_ARCHS_MACOS: ${{ matrix.cibw_arch }} | |
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: wheels_macos_${{ matrix.cibw_arch }}_${{ matrix.cibw_python }} | |
path: ./dist/*.whl | |
if-no-files-found: error | |
build_windows_wheels: | |
name: Build ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest] | |
cibw_arch: ["AMD64", "x86"] | |
cibw_python: ["cp39", "cp310", "cp311", "cp312"] | |
steps: | |
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: "3.9" | |
- name: Setup MSVC (32-bit) | |
if: matrix.cibw_arch == 'x86' | |
uses: bus1/cabuild/action/msdevshell@e22aba57d6e74891d059d66501b6b5aed8123c4d # v1 | |
with: | |
architecture: x86 | |
- name: Setup MSVC (64-bit) | |
if: matrix.cibw_arch == 'AMD64' | |
uses: bus1/cabuild/action/msdevshell@e22aba57d6e74891d059d66501b6b5aed8123c4d # v1 | |
with: | |
architecture: x64 | |
- name: Build Windows wheels for CPython | |
uses: pypa/cibuildwheel@8d945475ac4b1aac4ae08b2fd27db9917158b6ce # 2.17.0 | |
with: | |
output-dir: dist | |
env: | |
CIBW_BUILD: ${{ matrix.cibw_python }}-* | |
CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_arch }} | |
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: wheels_windows_${{ matrix.cibw_arch }}_${{ matrix.cibw_python }} | |
path: ./dist/*.whl | |
if-no-files-found: error | |
deploy_pypi: | |
name: Release (PyPI) | |
needs: | |
[ | |
build_linux_x86_64_wheels, | |
build_linux_aarch64_wheels, | |
build_macos_wheels, | |
build_windows_wheels, | |
] | |
# Run only on tags pushed to the repository | |
if: github.repository == 'PyWavelets/pywt' && startsWith(github.ref, 'refs/tags/v') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: "3.9" | |
- name: Install Twine | |
run: | | |
python -m pip install --upgrade pip | |
pip install twine | |
pip install cython numpy build | |
- uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 | |
id: download | |
with: | |
pattern: "wheels_*" | |
path: ./dist | |
merge-multiple: true | |
- name: Publish the source distribution on PyPI | |
run: | | |
PYWT_VERSION=$(git describe --tags) | |
python -m build --sdist | |
ls -la ${{ github.workspace }}/dist | |
# We prefer to release wheels before source because otherwise there is a | |
# small window during which users who pip install pywt will require compilation. | |
twine upload ${{ github.workspace }}/dist/*.whl | |
twine upload ${{ github.workspace }}/dist/pywavelets-${PYWT_VERSION:1}.tar.gz | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.TWINE_TOKEN }} | |
- name: Github release | |
uses: softprops/action-gh-release@d99959edae48b5ffffd7b00da66dcdb0a33a52ee # v2.0.2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GITHUB_REPOSITORY: ${{ github.repository }} | |
deploy_anaconda: | |
name: Release (Anaconda) | |
needs: | |
[ | |
build_linux_x86_64_wheels, | |
build_linux_aarch64_wheels, | |
build_macos_wheels, | |
build_windows_wheels, | |
] | |
# Run only on pushes to the master branch, on schedule, or when triggered manually | |
if: >- | |
github.repository == 'PyWavelets/pywt' && | |
(github.event_name == 'push' && github.ref == 'refs/heads/master') || | |
(github.event_name == 'workflow_dispatch' && github.event.inputs.push_wheels == 'true') || | |
(github.event_name == 'schedule') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | |
with: | |
fetch-depth: 0 | |
- uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 | |
id: download | |
with: | |
pattern: "*_wheels" | |
path: dist/ | |
merge-multiple: true | |
- name: Push to Anaconda PyPI index | |
uses: scientific-python/upload-nightly-action@b67d7fcc0396e1128a474d1ab2b48aa94680f9fc # v0.5.0 | |
with: | |
artifacts_path: dist/ | |
anaconda_nightly_upload_token: ${{ secrets.ANACONDA_ORG_UPLOAD_TOKEN }} |