Skip to content

CI

CI #2251

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-12, windows-latest]
python-version: [3.8, 3.9, '3.10', '3.11']
env:
GEANT4_VERSION: 'v11.2.1'
ITK_VERSION: 'v5.2.1'
steps:
- name: Checkout github repo
uses: actions/checkout@v4
- name: Checkout submodules
shell: bash -l {0}
run: |
if [[ ${{ matrix.os }} == "ubuntu-latest" ]]; then
export GIT_SSL_NO_VERIFY=1
git submodule update --init --recursive
elif [[ ${{ matrix.os }} == "macos-12" ]]; then
export GIT_SSL_NO_VERIFY=1
git submodule update --init --recursive
else
set "GIT_SSL_NO_VERIFY=1"
git submodule update --init --recursive
fi
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
- name: Get OS version
id: get-os-version
shell: bash -l {0}
run: |
if [[ ${{ matrix.os }} == "ubuntu-latest" ]]; then
varOS=`cat /etc/os-release | grep "VERSION=" | grep -oP '(?<=\").*?(?=\")'`
varOS=($varOS)
echo "release=${varOS[0]}" >> $GITHUB_OUTPUT
elif [[ ${{ matrix.os }} == "macos-12" ]]; then
varOS=`sw_vers | grep "ProductVersion:"`
varOS="${varOS#*:}"
echo "release=${varOS:1}" >> $GITHUB_OUTPUT
else
varOS=`windows`
echo "release=${varOS}" >> $GITHUB_OUTPUT
fi
- name: Cache modules
id: cache_opengate_core_dependencies
uses: actions/cache@v4
with:
path: ~/software
key: ${{ runner.os }}-${{ steps.get-os-version.outputs.release }}_geant4_${{ env.GEANT4_VERSION }}_itk_${{ env.ITK_VERSION }}_build1
restore-keys: ${{ runner.os }}-${{ steps.get-os-version.outputs.release }}_geant4_${{ env.GEANT4_VERSION }}_itk_${{ env.ITK_VERSION }}_build1
- 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 build
python -m build
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@v3
if: (matrix.os == 'macos-12') || (matrix.os == 'windows-latest')
with:
miniconda-version: "latest"
auto-update-conda: true
activate-environment: opengate_core
python-version: ${{ matrix.python-version }}
- name: Set up Homebrew
if: matrix.os == 'macos-12'
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Create opengate_core Wheel Mac
if: matrix.os == 'macos-12'
shell: bash -l {0}
run: |
brew install python@3.12 || true
brew link --overwrite python@3.12
#brew update
#rm -rf /usr/local/bin/python3.1*-config /usr/local/bin/2to3-3.1* /usr/local/bin/idle3.1* /usr/local/bin/pydoc3.1* /usr/local/bin/python3.1*
#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.17.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_USE_SYSTEM_EXPAT=OFF \
-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 /Users/runner/miniconda3/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"
elif [ ${{ matrix.python-version }} == "3.11" ]; then
export CIBW_BUILD="cp311-macosx_x86_64"
fi
export CIBW_ENVIRONMENT='MACOSX_DEPLOYMENT_TARGET=10.14'
export CIBW_BEFORE_BUILD="python -m pip install colored"
python -m cibuildwheel --output-dir dist
cd dist
cd ../..
mv core/dist .
- name: Create opengate_core Wheel Windows
if: matrix.os == 'windows-latest'
shell: bash -l {0}
run: |
choco install cmake
cmake --version
conda info
conda list
which python
python --version
export PATH="/usr/local/miniconda/envs/opengate_core/bin/:$PATH"
pip install wheel wget colored
pip install cibuildwheel==2.12.0
which pip
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 -DGEANT4_INSTALL_DATA=ON \
-DGEANT4_INSTALL_DATADIR=$HOME/software/geant4/data \
-DGEANT4_BUILD_MULTITHREADED=ON \
../src
cmake --build . --config Release
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 \
../src
cmake --build . --config Release
fi
cd $GITHUB_WORKSPACE
source $HOME/software/geant4/bin/geant4make.sh
export CMAKE_PREFIX_PATH=$HOME/software/geant4/bin:$HOME/software/itk/bin/:${CMAKE_PREFIX_PATH}
cd core
if [[ ${{ matrix.python-version }} == "3.8" ]]; then
export CIBW_BUILD="cp38-win_amd64"
elif [[ ${{ matrix.python-version }} == "3.9" ]]; then
export CIBW_BUILD="cp39-win_amd64"
elif [[ ${{ matrix.python-version }} == "3.10" ]]; then
export CIBW_BUILD="cp310-win_amd64"
elif [[ ${{ matrix.python-version }} == "3.11" ]]; then
export CIBW_BUILD="cp311-win_amd64"
fi
find $HOME/software/geant4/bin/ -iname "*.dll"
ls $HOME/software/geant4/bin/BuildProducts/Release/bin
ls $HOME/software/geant4/bin/BuildProducts/Release/lib/
export CIBW_BEFORE_BUILD="python -m pip install colored"
python -m cibuildwheel --output-dir dist
cd ..
mkdir core/dist2
pip install pefile machomachomangler
ls core/dist
python $GITHUB_WORKSPACE\\.github\\workflows\\delocateWindows.py core\\dist -w core\\dist2 -d C:\\Users\\runneradmin\\software\\geant4\\bin\\BuildProducts\\Release\\bin
mv core/dist2 dist
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: dist-${{ matrix.os }}-${{ matrix.python-version }}
path: dist/
publish_wheel:
runs-on: ubuntu-latest
needs: [build_wheel]
steps:
- name: Checkout github repo
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: dist-*
merge-multiple: true
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@release/v1
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@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_OPENGATE }}
packages_dir: dist_opengate/
skip_existing: true
# ssh_session:
# env:
# GEANT4_VERSION: 'v11.2.1'
# ITK_VERSION: 'v5.2.1'
# runs-on: macos-12
# steps:
# - name: Checkout github repo
# uses: actions/checkout@v4
# - name: Checkout submodules
# shell: bash -l {0}
# run: |
# export GIT_SSL_NO_VERIFY=1
# git submodule update --init --recursive
# - name: Set up Python
# uses: actions/setup-python@v5
# with:
# python-version: 3.9
# architecture: 'x64'
# - name: Get OS version
# id: get-os-version
# shell: bash -l {0}
# run: |
# varOS=`sw_vers | grep "ProductVersion:"`
# varOS="${varOS#*:}"
# echo "release=${varOS:1}" >> $GITHUB_OUTPUT
# - name: Cache modules
# id: cache_opengate_core_dependencies
# uses: actions/cache@v4
# with:
# path: ~/software
# key: ${{ runner.os }}-${{ steps.get-os-version.outputs.release }}_geant4_${{ env.GEANT4_VERSION }}_itk_${{ env.ITK_VERSION }}_build1
# restore-keys: ${{ runner.os }}-${{ steps.get-os-version.outputs.release }}_geant4_${{ env.GEANT4_VERSION }}_itk_${{ env.ITK_VERSION }}_build1
# - uses: conda-incubator/setup-miniconda@v3
# with:
# miniconda-version: "latest"
# auto-update-conda: true
# activate-environment: opengate_core
# python-version: 3.9
# - name: Set up Homebrew
# id: set-up-homebrew
# uses: Homebrew/actions/setup-homebrew@master
# - name: Start SSH session
# uses: luchihoratiu/debug-via-ssh@main
# with:
# NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }}
# SSH_PASS: ${{ secrets.SSH_PASS }}
test_wheel:
runs-on: ${{ matrix.os }}
needs: [build_wheel]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-12, windows-latest]
python-version: [3.8, 3.9, '3.10', '3.11']
steps:
- uses: actions/download-artifact@v4
with:
pattern: dist-*
merge-multiple: true
path: dist/
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
- name: Run tests
shell: bash {0}
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"
export PLATFORM="x86_"
pip install torch --extra-index-url https://download.pytorch.org/whl/cpu
elif [[ ${{ matrix.os }} == "macos-12" ]]; then
export OSNAME="macosx"
export PLATFORM="x86_"
which python
python --version
pip install torch
elif [[ ${{ matrix.os }} == "windows-latest" ]]; then
export OSNAME="win"
export PLATFORM="amd"
pip install torch
fi
pip install SimpleITK
pip install gaga_phsp==0.7.2
pip install spekpy
pip install dist/opengate_core-*-${PYTHONFOLDER}-${OSNAME}*_${PLATFORM}64.whl
pip install dist/opengate-*.whl
export GIT_SSL_NO_VERIFY=1
if [[ ${{ matrix.os }} == "ubuntu-latest" ]]; then
path=`opengate_library_path.py -p site_packages`
export LD_LIBRARY_PATH="${path}/opengate_core.libs":${LD_LIBRARY_PATH}
path=`opengate_library_path.py -p libG4processes`
export LD_PRELOAD=${path}:${LD_PRELOAD}
path=`opengate_library_path.py -p libG4geometry`
export LD_PRELOAD=${path}:${LD_PRELOAD}
fi
if [[ ${{ matrix.os }} == "windows-latest" ]]; then
path=`opengate_library_path.py -p site_packages`
export LD_LIBRARY_PATH="${path}/opengate_core.libs":${LD_LIBRARY_PATH}
export PATH="${path}\\opengate_core.libs":${PATH}
fi
pip freeze
if [ "${{ github.event_name }}" = "schedule" ]; then
OutputTest=$(opengate_tests)
else
OutputTest=$(opengate_tests -r)
fi
echo "$OutputTest"
OutputTest=$(echo "$OutputTest" | tail -1)
if [[ "$OutputTest" != "True" ]]; then
exit -1
else
exit 0
fi
- name: Upload results
uses: actions/upload-artifact@v4
if: always()
with:
name: results_json-${{ matrix.os }}-${{ matrix.python-version }}
path: results*.json
publish_test:
runs-on: ubuntu-latest
if: ${{ (always()) && (github.ref == 'refs/heads/master') }}
needs: [test_wheel]
steps:
- name: Checkout github repo
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: results_json-*
merge-multiple: true
path: ./
- uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: "latest"
auto-update-conda: true
activate-environment: vega-altair
python-version: '3.10'
- name: Merge the results
shell: bash -el {0}
run: |
git clone https://github.com/OpenGATE/opengate_tests_results.git
cd opengate_tests_results
echo $pwd
cp ../results_*.json .
conda install -c conda-forge altair-all
pip install pandas numpy
python compile_opengate_tests_results.py
- name: Pushes to another repository
uses: cpina/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.PUSH_OPENGATE_TESTS_RESULTS }}
with:
source-directory: 'opengate_tests_results'
destination-github-username: 'OpenGATE'
destination-repository-name: 'opengate_tests_results'
user-email: tbaudier@creatis.insa-lyon.fr
target-branch: master