Skip to content
This repository has been archived by the owner on Aug 30, 2024. It is now read-only.

Build and upload nightly wheels #361

Build and upload nightly wheels

Build and upload nightly wheels #361

Workflow file for this run

name: Build and upload nightly wheels
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
# │ │ │ │ │
- cron: "0 0 * * 0,3" # Every Sunday and Wednesday at midnight
env:
BUILD_COMMIT: "1.9.0" # or a specific version, e.g., 1.8.0
CIBW_BUILD_VERBOSITY: 2
CIBW_TEST_REQUIRES: "-r dipy/requirements/build.txt pytest"
CIBW_TEST_COMMAND: pytest --pyargs dipy
CIBW_CONFIG_SETTINGS: "compile-args=-v"
CIBW_TEST_SKIP: "*" # skip tests for all wheels
MULTIBUILD_WHEELS_STAGING_ACCESS: ${{ secrets.MULTIBUILD_WHEELS_STAGING_ACCESS }}
SCIENTIFIC_PYTHON_NIGHTLY_WHEELS: ${{ secrets.SCIENTIFIC_PYTHON_NIGHTLY_WHEELS }}
SCIPY_WHEELS_NIGHTLY_ACCESS: ${{ secrets.SCIPY_WHEELS_NIGHTLY_ACCESS }}
permissions:
contents: read
concurrency:
group: build-${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build_linux_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", "aarch64"]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- uses: actions/setup-python@v5
name: Install Python
with:
python-version: "3.12"
- name: Setup Environment variables
shell: bash
run: |
if [ "schedule" == "${{ github.event_name }}" ]; then echo "BUILD_COMMIT=master" >> $GITHUB_ENV; else echo "BUILD_COMMIT=$BUILD_COMMIT" >> $GITHUB_ENV; fi
- name: Set up QEMU
if: ${{ matrix.cibw_arch == 'aarch64' }}
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Install cibuildwheel
run: python -m pip install cibuildwheel
- name: Build the wheel
run: python -m cibuildwheel --output-dir dist dipy
env:
CIBW_BUILD: ${{ matrix.cibw_python }}
CIBW_ARCHS_LINUX: ${{ matrix.cibw_arch }}
CIBW_SKIP: "*-musllinux_*"
CIBW_TEST_SKIP: "*" # "*_aarch64"
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.cibw_manylinux }}
CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.cibw_manylinux }}
CIBW_BEFORE_BUILD: 'git submodule foreach git checkout ${{ env.BUILD_COMMIT }}'
- name: Rename Python version
run: echo "PY_VERSION=$(echo ${{ matrix.cibw_python }} | cut -d- -f1)" >> $GITHUB_ENV
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ env.PY_VERSION }}-${{ matrix.cibw_manylinux }}-${{ matrix.cibw_arch }}
path: ./dist/*.whl
build_osx_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-14, macos-latest]
cibw_python: ["cp39-*", "cp310-*", "cp311-*", "cp312-*"]
include:
- os: macos-latest
cibw_arch: x86_64
compiler_env: CC=/usr/local/opt/llvm/bin/clang CXX=/usr/local/opt/llvm/bin/clang++ LIBRARY_PATH=/usr/local/opt/llvm/lib:$LIBRARY_PATH
- os: macos-14
cibw_arch: arm64
compiler_env: CC=/opt/homebrew/opt/llvm@17/bin/clang CXX=/opt/homebrew/opt/llvm@17/bin/clang++ LIBRARY_PATH=/opt/homebrew/opt/llvm@17/lib:$LIBRARY_PATH MACOSX_DEPLOYMENT_TARGET=14.0
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- uses: actions/setup-python@v5
name: Install Python
with:
python-version: "3.12"
- name: Setup Environment variables
shell: bash
run: |
if [ "schedule" == "${{ github.event_name }}" ]; then echo "BUILD_COMMIT=master" >> $GITHUB_ENV; else echo "BUILD_COMMIT=$BUILD_COMMIT" >> $GITHUB_ENV; fi
- name: Install cibuildwheel
run: python -m pip install cibuildwheel
- name: Build the wheel
run: python -m cibuildwheel --output-dir dist dipy
env:
CIBW_BEFORE_ALL_MACOS: "brew install llvm@17 libomp"
CIBW_BUILD: ${{ matrix.cibw_python }}
CIBW_ARCHS_MACOS: ${{ matrix.cibw_arch }}
CIBW_TEST_SKIP: "*" # "*_aarch64 *-macosx_arm64"
CIBW_BEFORE_BUILD: 'git submodule foreach git checkout ${{ env.BUILD_COMMIT }}'
CIBW_ENVIRONMENT_MACOS: ${{ matrix.compiler_env }}
- name: Rename Python version
run: echo "PY_VERSION=$(echo ${{ matrix.cibw_python }} | cut -d- -f1)" >> $GITHUB_ENV
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ env.PY_VERSION }}-${{ matrix.cibw_arch }}
path: ./dist/*.whl
build_windows_wheels:
name: Build python ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
cibw_python: ["cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_arch: ["AMD64"]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- uses: actions/setup-python@v5
name: Install Python
with:
python-version: "3.12"
- name: Setup Environment variables
shell: bash
run: |
if [ "schedule" == "${{ github.event_name }}" ]; then echo "BUILD_COMMIT=master" >> $GITHUB_ENV; else echo "BUILD_COMMIT=$BUILD_COMMIT" >> $GITHUB_ENV; fi
- name: Install cibuildwheel
run: python -m pip install cibuildwheel
- name: Build the wheel
run: python -m cibuildwheel --output-dir dist dipy
env:
CIBW_BUILD: ${{ matrix.cibw_python }}
CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_arch }}
CIBW_CONFIG_SETTINGS: "setup-args=--vsenv compile-args=-v"
CIBW_BEFORE_BUILD: 'git submodule foreach git checkout ${{ env.BUILD_COMMIT }}'
- name: Rename Python version
shell: bash
run: echo "PY_VERSION=$(echo ${{ matrix.cibw_python }} | cut -d- -f1)" >> $GITHUB_ENV
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ env.PY_VERSION }}-${{ matrix.cibw_arch }}
path: ./dist/*.whl
upload_anaconda:
permissions:
contents: write # for softprops/action-gh-release to create GitHub release
name: Upload to Anaconda
needs: [build_linux_wheels, build_osx_wheels, build_windows_wheels]
if: ${{ always() }} && github.repository_owner == 'dipy' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
id: download
with:
pattern: wheels-*
path: ./dist
merge-multiple: true
- name: Setup Upload Variables
shell: bash
run: |
if [ "schedule" == "${{ github.event_name }}" ] || [ "push" == "${{ github.event_name }}" ]; then
echo "ANACONDA_UPLOAD=true" >> $GITHUB_ENV
else
echo "ANACONDA_UPLOAD=false" >> $GITHUB_ENV
fi
if [ "schedule" == "${{ github.event_name }}" ] || [ "master" == "$BUILD_COMMIT" ]; then
echo "ANACONDA_ORG=scipy-wheels-nightly" >> $GITHUB_ENV
echo "TOKEN=$SCIPY_WHEELS_NIGHTLY_ACCESS" >> $GITHUB_ENV
echo "LABEL=dev" >> $GITHUB_ENV
else
echo "ANACONDA_ORG=multibuild-wheels-staging" >> $GITHUB_ENV
echo "TOKEN=$MULTIBUILD_WHEELS_STAGING_ACCESS" >> $GITHUB_ENV
echo "LABEL=main" >> $GITHUB_ENV
fi
- name: Upload wheel
if : ${{ env.ANACONDA_UPLOAD == 'true' }}
uses: scientific-python/upload-nightly-action@b67d7fcc0396e1128a474d1ab2b48aa94680f9fc # 0.5.0 # scientific-python/upload-nightly-action@main
with:
artifacts_path: dist
anaconda_nightly_upload_token: ${{env.TOKEN}}
anaconda_nightly_upload_organization: ${{env.ANACONDA_ORG}}
anaconda_nightly_upload_labels: ${{env.LABEL}}