Skip to content

Build NEURON Python wheels #38

Build NEURON Python wheels

Build NEURON Python wheels #38

Workflow file for this run

name: Build MacOS 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 MacOS Wheels
runs-on: ${{ matrix.os }}
timeout-minutes: 60
strategy:
matrix:
os: [macos-14]
python-version: ['3.10']
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 OSX System Dependencies
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: Install readline
run: |
sudo mkdir -p /opt/nrnwheel/$(uname -m)
sudo bash packaging/python/build_static_readline_osx.bash
- name: Set env based in input
if: github.event_name == 'schedule' && startsWith(github.ref, 'refs/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 based in input 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 MacOS Wheel
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: macos-wheels-${{ matrix.python-version }}
path: wheelhouse/*.whl
# publish-to-pypi:
# name: Publish MacOS ARM Python wheels to PyPI
# 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', '3.11', '3.12'] # 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: macos-wheels-${{ matrix.python-version }}
# path: wheelhouse/
#
# - name: Publish wheels to PyPI
# uses: pypa/gh-action-pypi-publish@release/v1
# with:
# packages-dir: wheelhouse/