This repository has been archived by the owner on Aug 30, 2024. It is now read-only.
Build and upload nightly wheels #312
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 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.8.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: ["cp38-*", "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 }}' | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
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-latest] | |
cibw_python: ["cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"] | |
cibw_manylinux: [manylinux1] | |
cibw_arch: ["x86_64", "arm64"] | |
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_MACOS: ${{ matrix.cibw_arch }} | |
# CIBW_TEST_SKIP: "*_aarch64 *-macosx_arm64" | |
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 }}' | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
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: ["cp38-*", "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 }}' | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
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@v3 | |
id: download | |
with: | |
name: wheels | |
path: ./dist | |
- 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: skoudoro/upload-nightly-action@9b762da1a334889ef13c35cb8b0161c1e49f4749 # 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}} |