Skip to content

[WIP] Move CI infrastructure to GitHub Actions #69

[WIP] Move CI infrastructure to GitHub Actions

[WIP] Move CI infrastructure to GitHub Actions #69

Workflow file for this run

name: Build NEURON Python wheels
on:
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
jobs:
build-test-macos:
name: Build Python ${{ matrix.python-version }} wheel on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 60
strategy:
matrix:
os: [macos-13, macos-14]
include:
- python-version: '3.9'
python.org.version: '3.9.13'
python.installer.name: 'macos11.pkg'
#- python-version: '3.10'
# python.org.version: '3.10.11'
# python.installer.name: 'macos11.pkg'
#- python-version: '3.11'
# python.org.version: '3.11.7'
# python.installer.name: 'macos11.pkg'
#- python-version: '3.12'
# python.org.version: '3.12.0'
# python.installer.name: 'macos11.pkg'
- python-version: '3.13'
python.org.version: '3.13.0'
python.installer.name: 'macos11.pkg'
steps:
- name: Check out code
if: github.event_name != 'workflow_dispatch'
uses: actions/checkout@v4
with:
submodules: recursive
- name: Check out code for release
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.inputs.rel_release }}
submodules: recursive
- name: Install Python from python.org
run: |
installer=python-${{ matrix.python.org.version }}-${{ matrix.python.installer.name }}
url="https://www.python.org/ftp/python/${{ matrix.python.org.version }}/${installer}
curl $url -o $installer
sudo installer -pkg $installer -target /
- name: Install System Dependencies
run: |
brew install --cask xquartz
brew install flex bison cmake 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"
echo "$(brew --prefix)/opt/cmake/bin:$(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 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@v4
with:
name: wheels-${{ matrix.python-version }}-${{ matrix.os }}
path: wheelhouse/*.whl
build-test-linux:
name: Build Python ${{ matrix.python-version }} wheel on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 60
container: ${{ matrix.base_image }}
strategy:
matrix:
python-version: ['3.9', '3.13']
include:
- os: 'ubuntu-22.04'
base_image: 'docker.io/neuronsimulator/neuron_wheel:manylinux_2_28_x86_64'
- os: 'ubuntu-22.04-arm'
base_image: 'docker.io/neuronsimulator/neuron_wheel:manylinux_2_28_aarch64'
steps:
- name: Check out code
if: github.event_name != 'workflow_dispatch'
uses: actions/checkout@v4
with:
submodules: recursive
- name: Check out code for release
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.inputs.rel_release }}
submodules: recursive
- name: Build Manylinux wheel
run: |
packaging/python/build_wheels.bash linux ${{ matrix.python-version }} coreneuron
- name: Test wheel
run: |
minor_version="$(python${{ matrix.python-version }} -c 'import sys;print(sys.version_info.minor)')"
packaging/python/test_wheels.sh $(which python${{ matrix.python-version }}) wheelhouse/*cp3${minor_version}*.whl
- name: Upload wheel files
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.python-version }}-${{ matrix.os }}
path: wheelhouse/*.whl
merge:
runs-on: ubuntu-latest
needs: [build-test-macos, build-test-linux]
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@v4
with:
delete-merged: true
name: wheels
pattern: wheels-*