CI #2251
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |