use cmake ninja #95
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.ref }} | |
cancel-in-progress: true | |
jobs: | |
build-geant4: | |
name: "Geant4 Install - No Datasets" | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest, macos-latest] | |
geant4-version: | |
- 11.1.3 | |
steps: | |
- uses: lukka/get-cmake@latest | |
- name: Cache Xerces-C Installation | |
id: cache-xerces | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/xerces | |
key: xerces-${{ matrix.platform }} | |
- 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/v3.2.4 | |
cmake -G Ninja -B xerces-build -S xerces-source -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/xerces -DCMAKE_CXX_STANDARD=20 -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -Dnetwork-accessor=socket -Dtranscoder=iconv -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_C_FLAGS=-fPIC | |
cmake --build xerces-build -j$(nproc) --target install | |
- name: Cache Geant4 Installation | |
id: cache-geant4 | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/geant4 | |
key: geant4-${{ matrix.geant4-version }}-${{ matrix.platform }} | |
- 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${{ matrix.geant4-version }} | |
cmake -G Ninja -B geant4-build -S geant4-source -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/geant4 -DXERCESC_ROOT_DIR=${{ github.workspace }}/xerces -DCMAKE_CXX_STANDARD=20 -DCMAKE_BUILD_TYPE=Release -DGEANT4_USE_GDML=ON -DGEANT4_INSTALL_EXAMPLES=OFF -DGEANT4_INSTALL_DATA=OFF -DGEANT4_BUILD_TLS_MODEL=global-dynamic -DCMAKE_CXX_FLAGS=-fPIC -DCMAKE_C_FLAGS=-fPIC -DGEANT4_USE_SYSTEM_EXPAT=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF | |
cmake --build geant4-build -j$(nproc) --target install | |
install-geant4-datasets: | |
name: "Geant4 Datasets" | |
needs: [build-geant4] | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest, macos-latest] | |
geant4-version: | |
- 11.1.3 | |
steps: | |
- name: Cache Geant4 Installation | |
id: cache-geant4 | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/geant4 | |
key: geant4-${{ matrix.geant4-version }}-${{ matrix.platform }} | |
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-${{ matrix.geant4-version }}-data | |
enableCrossOsArchive: true | |
lookup-only: true | |
- name: Move Geant4 Datasets | |
if: steps.cache-geant4-data.outputs.cache-hit != 'true' | |
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 | |
build-test: | |
name: "Build and Test" | |
needs: [install-geant4-datasets] | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest, macos-latest] | |
geant4-version: | |
- 11.1.3 | |
python-version: | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
runs-on: ${{ matrix.platform }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: lukka/get-cmake@latest | |
- name: Cache Xerces-C Installation | |
id: cache-xerces | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/xerces | |
key: xerces-${{ matrix.platform }} | |
fail-on-cache-miss: true | |
- name: Cache Geant4 Installation | |
id: cache-geant4 | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/geant4 | |
key: geant4-${{ matrix.geant4-version }}-${{ matrix.platform }} | |
fail-on-cache-miss: true | |
- name: pip install the package | |
run: | | |
source ${{ github.workspace }}/geant4/bin/geant4.sh | |
python -m pip install .[test] | |
- name: Check import | |
run: | | |
python -c "import geant4_python_application; geant4_python_application.Application()" | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
if: | |
${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled | |
}} | |
with: | |
limit-access-to-actor: false | |
# 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-${{ matrix.geant4-version }}-data | |
fail-on-cache-miss: true | |
enableCrossOsArchive: true | |
- name: Move datasets | |
run: | | |
GEANT4_DATA_DIR=$(python -c "import geant4_python_application; print(geant4_python_application.datasets.data_dir)") | |
mkdir -p ${{ github.workspace }}/geant4-data $GEANT4_DATA_DIR | |
mv ${{ github.workspace }}/geant4-data $GEANT4_DATA_DIR | |
- name: Run tests | |
run: | | |
find ./tests -name "test_*.py" -exec python -m pytest -vv --reruns 3 --reruns-delay 30 --only-rerun "(?i)http|timeout|connection|socket|resolve" {} \; | |
- name: Build Wheel | |
run: | | |
source ${{ github.workspace }}/geant4/bin/geant4.sh | |
python -m pip install build | |
python -m build --wheel . | |
- name: Upload Wheel | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist/*.whl | |
- name: Cache Wheel | |
uses: actions/cache@v3 | |
with: | |
path: dist | |
key: | |
dist-${{ matrix.python-version }}-${{ matrix.geant4-version }}-${{ | |
matrix.platform }}-${{ github.run_id }} | |
wheel-test: | |
name: "Install wheel and test" | |
needs: [build-test] | |
timeout-minutes: 30 | |
runs-on: ${{ matrix.platform }} | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest, macos-latest] | |
geant4-version: | |
- 11.1.3 | |
python-version: | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Restore wheel | |
uses: actions/cache@v3 | |
with: | |
path: dist | |
key: | |
dist-${{ matrix.python-version }}-${{ matrix.geant4-version }}-${{ | |
matrix.platform }}-${{ github.run_id }} | |
fail-on-cache-miss: true | |
- name: Install wheel | |
run: | | |
python -m pip install dist/*.whl | |
- name: Save datasets location to env | |
run: | | |
GEANT4_DATA_DIR=$(python -c "import geant4_python_application; print(geant4_python_application.datasets.data_dir)") | |
echo "GEANT4_DATA_DIR=${GEANT4_DATA_DIR}" >> $GITHUB_ENV |