1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
|
#=============================================================================
# Azure Pipeline settings
#=============================================================================
# Nightly build master for pypi upload
schedules:
- cron: "0 0 * * *"
branches:
include:
- master
always: true
# Auto cancel old PR builds
pr:
autoCancel: true
# TODO : https://github.com/neuronsimulator/nrn/issues/1063
# paths:
# exclude:
# - docs
# - README.md
# Trigger build for certain branches only
trigger:
- master
- release/*
stages:
- stage: BuildTestDeploy
jobs:
- job: 'ManyLinuxWheels'
timeoutInMinutes: 30
pool:
vmImage: 'ubuntu-20.04'
strategy:
matrix:
Python37:
python.version: '3.7'
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
Python311:
python.version: '3.11'
Python312:
python.version: '3.12'
Python313:
python.version: '3.13'
steps:
- script: |
git submodule update --init --recursive
displayName: Init submodules
# Secure files documentation:
# https://docs.microsoft.com/en-us/azure/devops/pipelines/library/secure-files?view=azure-devops
# NOTE: when uploading new secure files, access must be permitted from the Azure pipeline interface (check message there)
- task: DownloadSecureFile@1
name: mpt_headersSF
displayName: 'Download mpt_headers secure file'
inputs:
secureFile: 'mpt_headears.2.21.tar.gz'
# Note that mpt headers must be mounted in the docker imager under `/nrnwheel/mpt`
# This path is checked by `packaging/python/build_wheels.bash` when run in the image.
- script: |
sudo mkdir -p /opt/nrnwheel/mpt
sudo tar -zxf $(mpt_headersSF.secureFilePath) --directory /opt/nrnwheel/mpt
docker run --rm \
-w /root/nrn \
-v $PWD:/root/nrn \
-v /opt/nrnwheel/mpt:/nrnwheel/mpt \
-e NEURON_NIGHTLY_TAG \
-e NRN_NIGHTLY_UPLOAD \
-e NRN_RELEASE_UPLOAD \
-e NEURON_WHEEL_VERSION \
-e NRN_BUILD_FOR_UPLOAD=1 \
'neuronsimulator/neuron_wheel:latest-x86_64' \
packaging/python/build_wheels.bash linux $(python.version) coreneuron
displayName: 'Building ManyLinux Wheel'
- script: |
sudo apt update
sudo apt install -y mpich openmpi-bin libopenmpi-dev libmpich-dev
displayName: 'Install Test System Depdendencies'
- template: ci/azure-wheel-test-upload.yml
# Jobs to build OSX wheels natively
- job: 'MacOSWheels'
timeoutInMinutes: 40
pool:
vmImage: 'macOS-13'
strategy:
matrix:
Python37:
python.version: '3.7'
python.org.version: '3.7.7'
python.installer.name: 'macosx10.9.pkg'
Python38:
python.version: '3.8'
python.org.version: '3.8.2'
python.installer.name: 'macosx10.9.pkg'
Python39:
python.version: '3.9'
python.org.version: '3.9.0'
python.installer.name: 'macosx10.9.pkg'
Python310:
python.version: '3.10'
python.org.version: '3.10.0'
python.installer.name: 'macos11.pkg'
Python311:
python.version: '3.11'
python.org.version: '3.11.1'
python.installer.name: 'macos11.pkg'
Python312:
python.version: '3.12'
python.org.version: '3.12.2'
python.installer.name: 'macos11.pkg'
Python313:
python.version: '3.13'
python.org.version: '3.13.1'
python.installer.name: 'macos11.pkg'
steps:
- script: |
git submodule update --init --recursive
displayName: Init submodules
- script: |
installer=python-$(python.org.version)-$(python.installer.name)
url=https://www.python.org/ftp/python/$(python.org.version)/$installer
curl $url -o $installer
sudo installer -pkg $installer -target /
displayName: 'Install Python from python.org'
- script: |
brew install --cask xquartz
brew install flex bison mpich
brew unlink mpich && brew install openmpi
cmake --version
# see https://github.com/BlueBrain/CoreNeuron/issues/817, uninstall libomp until we fix this
# as we are building wheels, we shouldn't enable OpenMP here anyway
brew uninstall --ignore-dependencies libomp || echo "libomp doesn't exist"
displayName: 'Install OSX System Dependencies'
# readline has been manually built with ncurses and MACOSX_DEPLOYMENT_TARGET=10.9 and stored as secure file on Azure.
# See `packaging/python/Dockerfile` for build instructions.
#
# Secure files documentation:
# https://docs.microsoft.com/en-us/azure/devops/pipelines/library/secure-files?view=azure-devops
# NOTE: when uploading new secure files, access must be permitted from the Azure pipeline interface (check message there)
- task: DownloadSecureFile@1
name: readlineSF
displayName: 'Download readline secure file'
inputs:
secureFile: 'readline7.0-ncurses6.4.tar.gz'
- script: |
export MACOSX_DEPLOYMENT_TARGET=10.15
export PATH=/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
export NRN_BUILD_FOR_UPLOAD=1
sudo mkdir /opt/nrnwheel
sudo tar -zxf $(readlineSF.secureFilePath) --directory /opt/nrnwheel/
packaging/python/build_wheels.bash osx $(python.version) coreneuron
displayName: 'Build MacOS Wheel'
- template: ci/azure-wheel-test-upload.yml
# Jobs to build NEURON installer natively
- job: 'WindowsInstaller'
timeoutInMinutes: 60
pool:
vmImage: windows-2019
variables:
MSYS2_ROOT: C:\msys64
steps:
- task: BatchScript@1
inputs:
filename: ci/win_download_deps.cmd
displayName: "Download Dependencies"
condition: succeeded()
- task: BatchScript@1
inputs:
filename: ci/win_install_deps.cmd
displayName: "Install Dependencies"
condition: succeeded()
# WSL is enabled by default in the image, with no installed linux distribution.
# WSL creates an unusable `bash.EXE` that can be resolved first from the environment.
# This is why we remove that file.
- script: |
rm.exe "C:/WINDOWS/system32/bash.EXE"
%MSYS2_ROOT%\usr\bin\bash -lc "$BUILD_SOURCESDIRECTORY/ci/win_build_cmake.sh"
displayName: "Build and Create Installer"
condition: succeeded()
- template: ci/azure-win-installer-upload.yml
- stage: Final
jobs:
- job: AzureDropURL
pool:
vmImage: 'ubuntu-20.04'
condition: eq(variables['Build.Reason'], 'PullRequest')
steps:
- checkout: none
- script: |
export AZURE_DROP_URL=`curl -v 'https://dev.azure.com/neuronsimulator/nrn/_apis/build/builds/$(Build.BuildId)/artifacts?artifactName=drop' | jq -r '.resource.downloadUrl'`
echo "Setting dropurl to $AZURE_DROP_URL"
echo "##vso[task.setvariable variable=dropurl]$AZURE_DROP_URL"
displayName: 'Resolve Azure drop URL'
- task: GitHubComment@0
inputs:
gitHubConnection: 'neuronsimulator'
repositoryName: '$(Build.Repository.Name)'
comment: |
✔️ $(system.pullRequest.sourceCommitId) -> [Azure artifacts URL]($(dropurl))
|