feat: Windows CI #160
Workflow file for this run
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: Build and Test | |
on: | |
schedule: | |
- cron: 0 */24 * * * | |
workflow_dispatch: | |
inputs: | |
debug_enabled: | |
type: boolean | |
description: | |
Run the build with tmate debugging enabled | |
(https://github.com/marketplace/actions/debugging-with-tmate) | |
required: false | |
default: false | |
pull_request: | |
push: | |
branches: [main] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
GEANT4_VERSION: 11.2.0 | |
XERCES_VERSION: 3.2.4 | |
CPP_STANDARD: 17 | |
Geant4_DIR: ${{ github.workspace }}/geant4 | |
CMAKE_ARGS: -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded | |
jobs: | |
build-geant4: | |
name: Build Geant4 on ${{ matrix.platform }} | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- name: Setup CMake | |
uses: lukka/get-cmake@v3.27.9 | |
- name: Cache Xerces-C Installation | |
id: cache-xerces | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/xerces | |
key: xerces-${{ matrix.platform }}-cpp${{ env.CPP_STANDARD }} | |
- name: Build and Install Xerces-C | |
if: steps.cache-xerces.outputs.cache-hit != 'true' | |
run: | | |
git clone https://github.com/apache/xerces-c.git xerces-source | |
git -C xerces-source checkout tags/v${{ env.XERCES_VERSION }} | |
cmake --build xerces-build -S xerces-source --config Release -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/xerces -DCMAKE_CXX_STANDARD=${{ env.CPP_STANDARD }} -DBUILD_SHARED_LIBS=OFF ${{ matrix.platform == 'windows-latest' && '-DCMAKE_CXX_FLAGS_RELEASE="/MT"' || '-G Ninja -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_C_FLAGS=-fPIC -Dnetwork-accessor=socket -Dtranscoder=iconv' }} | |
cmake --build xerces-build --parallel $(nproc) --config Release --target install | |
- name: Cache Geant4 Installation | |
id: cache-geant4 | |
uses: actions/cache@v3 | |
with: | |
path: ${{ env.Geant4_DIR }} | |
key: | |
geant4-${{ env.GEANT4_VERSION }}-${{ matrix.platform }}-cpp${{ | |
env.CPP_STANDARD }} | |
- name: Build and Install Geant4 (without datasets) | |
if: steps.cache-geant4.outputs.cache-hit != 'true' | |
run: | | |
git clone https://github.com/Geant4/geant4.git ${{ github.workspace }}/geant4-source --depth 1 --branch v${{ env.GEANT4_VERSION }} | |
cmake --build geant4-build -S geant4-source --config Release -DCMAKE_INSTALL_PREFIX=${{ env.Geant4_DIR }} -DXERCESC_ROOT_DIR=${{ github.workspace }}/xerces -DCMAKE_CXX_STANDARD=${{ env.CPP_STANDARD }} -DGEANT4_USE_GDML=ON -DGEANT4_INSTALL_EXAMPLES=OFF -DGEANT4_INSTALL_DATA=OFF -DGEANT4_BUILD_TLS_MODEL=global-dynamic -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF ${{ matrix.platform == 'windows-latest' && '-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded' || '-G Ninja -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_C_FLAGS=-fPIC -DGEANT4_USE_SYSTEM_EXPAT=OFF' }} | |
cmake --build geant4-build --parallel $(nproc) --config Release --target install | |
install-geant4-datasets: | |
name: Download Geant4 datasets for ${{ matrix.platform }} | |
needs: [build-geant4] | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- name: Cache Geant4 Installation | |
id: cache-geant4 | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/geant4 | |
key: | |
geant4-${{ env.GEANT4_VERSION }}-${{ matrix.platform }}-cpp${{ | |
env.CPP_STANDARD }} | |
fail-on-cache-miss: true | |
- name: Cache Geant4 Datasets | |
id: cache-geant4-data | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/geant4-data | |
key: geant4-${{ env.GEANT4_VERSION }}-data | |
enableCrossOsArchive: true | |
lookup-only: true | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
if: | |
${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled | |
}} | |
with: | |
limit-access-to-actor: false | |
- name: Move Geant4 Datasets (Ubuntu/MacOS) | |
if: | |
steps.cache-geant4-data.outputs.cache-hit != 'true' && matrix.platform | |
!= 'windows-latest' | |
run: | | |
source ${{ github.workspace }}/geant4/bin/geant4.sh | |
geant4-config --install-datasets | |
geant4-config --check-datasets | |
mv ${{ github.workspace }}/geant4/share/Geant4/data ${{ github.workspace }}/geant4-data | |
- name: Move Geant4 Datasets (Windows) | |
if: | |
steps.cache-geant4-data.outputs.cache-hit != 'true' && matrix.platform | |
== 'windows-latest' | |
run: | | |
.\geant4\bin\geant4-config --install-datasets | |
ls .\geant4\share\Geant4\data | |
.\geant4\bin\geant4-config --check-datasets | |
mv .\geant4\share\Geant4\data .\geant4-data | |
build-test: | |
name: | |
Build and Test for ${{ matrix.platform }} (Python ${{ | |
matrix.python-version }}) | |
needs: [install-geant4-datasets] | |
timeout-minutes: 30 | |
runs-on: ${{ matrix.platform }} | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest, macos-latest, windows-latest] | |
python-version: | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Setup CMake | |
uses: lukka/get-cmake@v3.27.9 | |
- name: Cache Xerces-C Installation | |
id: cache-xerces | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/xerces | |
key: xerces-${{ matrix.platform }}-cpp${{ env.CPP_STANDARD }} | |
fail-on-cache-miss: true | |
- name: Cache Geant4 Installation | |
id: cache-geant4 | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/geant4 | |
key: | |
geant4-${{ env.GEANT4_VERSION }}-${{ matrix.platform }}-cpp${{ | |
env.CPP_STANDARD }} | |
fail-on-cache-miss: true | |
- name: pip install the package | |
run: | | |
python -m pip install .[test] | |
# test ability to download datasets in one job and use the cache in the others | |
- name: Cache Geant4 Datasets | |
if: matrix.python-version != '3.11' | |
id: cache-geant4-data | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/geant4-data | |
key: geant4-${{ env.GEANT4_VERSION }}-data | |
fail-on-cache-miss: true | |
enableCrossOsArchive: true | |
- name: Move datasets | |
if: matrix.python-version != '3.11' | |
run: | | |
GEANT4_DATA_DIR=$(python -c "import geant4_python_application; print(geant4_python_application.data_dir)") | |
mkdir -p ${{ github.workspace }}/geant4-data $GEANT4_DATA_DIR | |
mv ${{ github.workspace }}/geant4-data/* $GEANT4_DATA_DIR | |
- name: Check import | |
run: | | |
python -c "import geant4_python_application; geant4_python_application.Application()" | |
- name: Run tests | |
run: | | |
python -m pytest -vv --reruns 3 --reruns-delay 30 --only-rerun "(?i)http|timeout|connection|socket|resolve" |