Skip to content

CI

CI #25

Workflow file for this run

name: CI
on:
push:
branches: [ master ]
tags:
- '*'
pull_request:
branches: [ master ]
schedule:
- cron: '0 0 * * 0,3'
workflow_dispatch:
jobs:
build_wheel:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [3.8, 3.9, '3.10', '3.11']
exclude:
- os: macos-latest
python-version: '3.11'
env:
GEANT4_VERSION: 'v11.1.1'
ITK_VERSION: 'v5.2.1'
steps:
- name: Checkout github repo
uses: actions/checkout@v3
- name: Checkout submodules
run: |
export GIT_SSL_NO_VERIFY=1
git submodule update --init --recursive
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
- name: Get OS version
id: get-os-version
run: |
if [ ${{ matrix.os }} == "ubuntu-latest" ]; then
varOS=`cat /etc/os-release | grep "VERSION=" | grep -oP '(?<=\").*?(?=\")'`
varOS=($varOS)
echo "release=${varOS[0]}" >> $GITHUB_OUTPUT
else
varOS=`sw_vers | grep "ProductVersion:"`
varOS="${varOS#*:}"
echo "release=${varOS:1}" >> $GITHUB_OUTPUT
fi
shell: bash
- name: Cache modules
id: cache_opengate_core_dependencies
uses: actions/cache@v3
with:
path: ~/software
key: ${{ runner.os }}-${{ steps.get-os-version.outputs.release }}_geant4_${{ env.GEANT4_VERSION }}_itk_${{ env.ITK_VERSION }}_build3
restore-keys: ${{ runner.os }}-${{ steps.get-os-version.outputs.release }}_geant4_${{ env.GEANT4_VERSION }}_itk_${{ env.ITK_VERSION }}_build3
- name: Create opengate Wheel
if: matrix.os == 'ubuntu-latest'
run: |
if [ ${{ matrix.python-version }} == "3.9" ]; then
rm -rf $GITHUB_WORKSPACE/opengate/tests/data
cp $GITHUB_WORKSPACE/.git/modules/gam-tests/data/HEAD $GITHUB_WORKSPACE/opengate/tests/
pip install wheel
python setup.py sdist bdist_wheel
mv dist dist_opengate
fi
- name: Create opengate_core Wheel Linux
if: matrix.os == 'ubuntu-latest'
run: |
if [ ${{ matrix.python-version }} == "3.8" ]; then
export PYTHONFOLDER="cp38-cp38"
elif [ ${{ matrix.python-version }} == "3.9" ]; then
export PYTHONFOLDER="cp39-cp39"
elif [ ${{ matrix.python-version }} == "3.10" ]; then
export PYTHONFOLDER="cp310-cp310"
elif [ ${{ matrix.python-version }} == "3.11" ]; then
export PYTHONFOLDER="cp311-cp311"
fi
mkdir -p $HOME/software
docker run --rm -e "PYTHONFOLDER=${PYTHONFOLDER}" -v $GITHUB_WORKSPACE:/home tbaudier/opengate_core:${{ env.GEANT4_VERSION }} /home/.github/workflows/createWheelLinux.sh
ls wheelhouse
rm -rf dist
mv wheelhouse dist
sudo chown -R runner:docker dist
if [ ${{ matrix.python-version }} == "3.9" ]; then
ls -lrt .
ls -lrt dist/
ls -lrt dist_opengate/
mv dist_opengate/* dist/
fi
- uses: conda-incubator/setup-miniconda@v2
if: matrix.os == 'macos-latest'
with:
auto-update-conda: true
activate-environment: opengate_core
python-version: ${{ matrix.python-version }}
- name: Create opengate_core Wheel Mac
if: matrix.os == 'macos-latest'
shell: bash -l {0}
run: |
brew update
rm -rf /usr/local/bin/python3.11-config /usr/local/bin/2to3-3.11 /usr/local/bin/idle3.11 /usr/local/bin/pydoc3.11 /usr/local/bin/python3.11
rm -rf /usr/local/bin/python3-config /usr/local/bin/2to3 /usr/local/bin/idle3 /usr/local/bin/pydoc3 /usr/local/bin/python3
brew install --force --verbose --overwrite \
ccache \
fftw \
libomp \
xquartz \
xerces-c \
wget
brew uninstall --ignore-dependencies libxext
brew uninstall --ignore-dependencies libx11
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include -fopenmp"
conda info
conda list
which python
python --version
export PATH="/usr/local/miniconda/envs/opengate_core/bin/:$PATH"
pip install wget colored
pip install cibuildwheel==2.12.0
conda install -c conda-forge qt==5.15.6
mkdir -p $HOME/software
if [ "${{ steps.cache_opengate_core_dependencies.outputs.cache-hit }}" != 'true' ]; then
cd $HOME/software
mkdir geant4
cd geant4
mkdir src bin data
git clone --branch $GEANT4_VERSION https://github.com/Geant4/geant4.git --depth 1 src
cd bin
cmake -DCMAKE_CXX_FLAGS=-std=c++17 \
-DGEANT4_INSTALL_DATA=OFF \
-DGEANT4_INSTALL_DATADIR=$HOME/software/geant4/data \
-DGEANT4_USE_QT=ON \
-DGEANT4_USE_OPENGL_X11=ON \
-DGEANT4_BUILD_MULTITHREADED=ON \
-DGEANT4_USE_GDML=ON \
../src
make -j4
cd $HOME/software
mkdir itk
cd itk
mkdir src bin
git clone --branch $ITK_VERSION https://github.com/InsightSoftwareConsortium/ITK.git --depth 1 src
cd bin
cmake -DCMAKE_CXX_FLAGS=-std=c++17 \
-DBUILD_TESTING=OFF \
-DITK_USE_FFTWD=ON \
-DITK_USE_FFTWF=ON \
-DITK_USE_SYSTEM_FFTW:BOOL=ON \
../src
make -j4
fi
cd $GITHUB_WORKSPACE
ls /usr/local/miniconda/envs/opengate_core/plugins/platforms
source $HOME/software/geant4/bin/geant4make.sh
export CMAKE_PREFIX_PATH=$HOME/software/geant4/bin:$HOME/software/itk/bin/:${CMAKE_PREFIX_PATH}
cd core
mkdir opengate_core/plugins
mkdir opengate_core/plugins/miniconda
rm -rf dist
if [ ${{ matrix.python-version }} == "3.8" ]; then
export CIBW_BUILD="cp38-macosx_x86_64"
elif [ ${{ matrix.python-version }} == "3.9" ]; then
export CIBW_BUILD="cp39-macosx_x86_64"
elif [ ${{ matrix.python-version }} == "3.10" ]; then
export CIBW_BUILD="cp310-macosx_x86_64"
fi
export CIBW_BEFORE_BUILD="python -m pip install colored"
python -m cibuildwheel --output-dir dist
cd dist
cd ../..
mv core/dist .
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/
publish_wheel:
runs-on: ubuntu-latest
needs: [build_wheel]
steps:
- name: Checkout github repo
uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: dist
path: dist/
- name: Separate the wheels
run: |
mkdir dist_opengate_core dist_opengate
mv dist/opengate_core-* dist_opengate_core/
mv dist/opengate-* dist_opengate/
- name: Publish to PyPI opengate_core
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/')
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_OPENGATE_CORE }}
packages_dir: dist_opengate_core/
skip_existing: true
- name: Publish to PyPI opengate
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/')
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_OPENGATE }}
packages_dir: dist_opengate/
skip_existing: true
test_wheel:
runs-on: ${{ matrix.os }}
needs: [build_wheel]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [3.8, 3.9, '3.10', '3.11']
exclude:
- os: macos-latest
python-version: '3.11'
steps:
- uses: actions/download-artifact@v3
with:
name: dist
path: dist/
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
- name: Run tests
run: |
if [ ${{ matrix.python-version }} == "3.8" ]; then
export PYTHONFOLDER="cp38-cp38"
elif [ ${{ matrix.python-version }} == "3.9" ]; then
export PYTHONFOLDER="cp39-cp39"
elif [ ${{ matrix.python-version }} == "3.10" ]; then
export PYTHONFOLDER="cp310-cp310"
pip install --pre itk
elif [ ${{ matrix.python-version }} == "3.11" ]; then
export PYTHONFOLDER="cp311-cp311"
pip install --pre itk
fi
if [ ${{ matrix.os }} == "ubuntu-latest" ]; then
export OSNAME="manylinux"
pip install torch --extra-index-url https://download.pytorch.org/whl/cpu
elif [ ${{ matrix.os }} == "macos-latest" ]; then
export OSNAME="macosx"
pip install torch
fi
pip install gaga_phsp
pip install garf
pip install dist/opengate_core-*-${PYTHONFOLDER}-${OSNAME}*_x86_64.whl
pip install dist/opengate-*.whl
export GIT_SSL_NO_VERIFY=1
if [ "${{ matrix.os }}" == "ubuntu-latest" ]; then
path=`opengate_tests_utils -p site_packages`
export LD_LIBRARY_PATH="${path}/opengate_core.libs":${LD_LIBRARY_PATH}
path=`opengate_tests_utils -p libG4processes`
export LD_PRELOAD=${path}:${LD_PRELOAD}
path=`opengate_tests_utils -p libG4geometry`
export LD_PRELOAD=${path}:${LD_PRELOAD}
fi
OutputTest=$(opengate_tests)
echo "$OutputTest"
OutputTest=$(echo "$OutputTest" | tail -1)
if [ "$OutputTest" != "True" ]; then
exit -1
else
exit 0
fi