Skip to content

Build NEURON Python wheels #47

Build NEURON Python wheels

Build NEURON Python wheels #47

Workflow file for this run

name: Build NEURON Python wheels
on:
schedule:
- cron: "0 0 * * *"
push:
branches:
- master
pull_request:
branches:
- master
workflow_dispatch:
inputs:
rel_release:
description: Release branch/commit
default: 'release/x.y'
required: true
rel_version:
description: Release version (tag name)
default: 'x.y.z'
required: true
upload:
description: Whether to upload to PyPI or not
default: 'false'
required: false
type: 'boolean'
jobs:
build-test:
name: Build Python wheels
runs-on: ${{ matrix.os }}
timeout-minutes: 60
strategy:
matrix:
os: [macos-14]
python-version: ['3.10'] # TODO update before making as ready
steps:
- name: Check out code
if: github.event_name != 'workflow_dispatch'
uses: actions/checkout@v4
- name: Check out code for release
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.inputs.rel_release }}
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install MacOS System Dependencies
if: startsWith(runner.os, 'macOS')
run: |
brew install --cask xquartz
brew install flex bison mpich
brew unlink mpich && brew install openmpi
cmake --version
# Uninstall libomp for compatibility with issue #817
brew uninstall --ignore-dependencies libomp || echo "libomp doesn't exist"
brew install cmake
echo "$(brew --prefix)/opt/cmake/bin" >> $GITHUB_PATH
echo "$(brew --prefix)/opt/flex/bin:$(brew --prefix)/opt/bison/bin" >> $GITHUB_PATH
- name: Cache readline
if: startsWith(runner.os, 'macOS')
id: cache-readline
uses: actions/cache@v3
with:
path: /opt/nrnwheel/$(uname -m)
key: readline-${{ runner.os }}-${{ hashFiles('packaging/python/build_static_readline_osx.bash') }}
restore-keys: |
readline-${{ runner.os }}-
- name: Install readline
if: startsWith(runner.os, 'macOS') && steps.cache-readline.outputs.cache-hit != 'true'
run: |
sudo mkdir -p /opt/nrnwheel/$(uname -m)
sudo bash packaging/python/build_static_readline_osx.bash
- name: Set env for nightly
if: github.event_name == 'schedule' && startsWith(github.ref, 'refs/heads/master')
run: |
echo "NRN_NIGHTLY_UPLOAD=true" >> $GITHUB_ENV
echo "NRN_RELEASE_UPLOAD=false" >> $GITHUB_ENV
echo "NEURON_NIGHTLY_TAG=-nightly" >> $GITHUB_ENV
- name: Set env for release
if: github.event_name == 'workflow_dispatch'
run: |
echo "NRN_NIGHTLY_UPLOAD=false" >> $GITHUB_ENV
echo NRN_RELEASE_UPLOAD=${{ github.event.inputs.upload }} >> $GITHUB_ENV
echo "NEURON_NIGHTLY_TAG=" >> $GITHUB_ENV
echo SETUPTOOLS_SCM_PRETEND_VERSION=${{ github.event.inputs.rel_version }} >> $GITHUB_ENV
- name: Build wheels on MacOS
if: startsWith(runner.os, 'macOS')
run: |
packaging/python/build_wheels.bash osx ${{ matrix.python-version }} coreneuron
- name: Test wheel
run: |
minor_version="$(python -c 'import sys;print(sys.version_info.minor)')"
packaging/python/test_wheels.sh $(which python) wheelhouse/*cp3${minor_version}*.whl
- name: Upload wheel files
uses: actions/upload-artifact@v3
with:
name: wheels-${{ matrix.python-version }}
path: wheelhouse/*.whl
publish-to-pypi:
name: Publish Python wheels to PyPI
# we only run this if it's a nightly upload, or if we are doing a release
if: (github.event_name == 'schedule' && startsWith(github.ref, 'refs/heads/master')) || (github.event_name == 'workflow_dispatch' && github.inputs.upload == 'true')
needs:
- build-test
runs-on: ubuntu-latest
strategy:
matrix:
# why do we need a matrix? because github uploads separate artifacts for each job above
# maybe when we start using cibuildwheel we can build all of them in one job...
python-version: ['3.10'] # make sure to keep in sync with the one from job above
environment:
name: pypi
url: https://pypi.org/p/NEURON-nightly
permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing
steps:
- name: Download all the dists
uses: actions/download-artifact@v4
with:
name: wheels-${{ matrix.python-version }}
path: wheelhouse/
#- name: Publish wheels to PyPI
# uses: pypa/gh-action-pypi-publish@release/v1
# with:
# packages-dir: wheelhouse/