Newer
Older
###############################################################################
## VirtualFluids CI Pipeline ##
###############################################################################
image: git.rz.tu-bs.de:4567/irmb/virtualfluids/ubuntu20_04:1.5
###############################################################################
## Builds ##
###############################################################################
.gnu_build_template:

Sören Peters
committed
expire_in: 1 hrs
- export CCACHE_BASEDIR=$CI_PROJECT_DIR
- export CCACHE_DIR=$CI_PROJECT_DIR/cache
- export CCACHE_COMPILERCHECK=content
- ccache --zero-stats
- ccache --show-stats
- $CXX --version
- $CC --version
- cmake --version
- mpirun --version
- mkdir -p $CI_PROJECT_DIR/$BUILD_FOLDER
- cd $CI_PROJECT_DIR/$BUILD_FOLDER

Soeren Peters
committed
-DBUILD_WARNINGS_AS_ERRORS=ON
-DCMAKE_CUDA_ARCHITECTURES=60

Soeren Peters
committed
-DBUILD_VF_ALL_SAMPLES=ON
###############################################################################
gcc_9:
extends: .gnu_build_template
before_script:
- export CC=gcc
- export CXX=g++
###############################################################################
before_script:
- export CC=clang
- export CXX=clang++
###############################################################################
stage: build
tags:
- win
- gpu
variables:
BUILD_CONFIGURATION: "Release"
BUILD_FOLDER: "build"
# add cmake and MSBuild.exe to the path.
# This Needs to be adapted when moved to a new build machine.
before_script:
- git --version
- $env:Path += ";C:\Program Files\CMake\bin\"
- cmake --version
- $env:Path += ";C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin"
- MSBuild.exe -version
script:
- cd $CI_PROJECT_DIR
- md -force $env:BUILD_FOLDER
- cd $env:BUILD_FOLDER

Soeren Peters
committed
- cmake .. --preset=msvc_all -DCMAKE_CUDA_ARCHITECTURES=61 -DBUILD_WARNINGS_AS_ERRORS=ON -DBUILD_VF_ALL_SAMPLES=ON
- MSBuild.exe VirtualFluids.sln /property:Configuration=$env:BUILD_CONFIGURATION /verbosity:minimal /maxcpucount:4
artifacts:

Sören Peters
committed
expire_in: 1 hrs
paths:
- $CI_PROJECT_DIR/$env:BUILD_FOLDER/
###############################################################################
## Build Python ##
###############################################################################
gcc_9_python:
stage: build_python
needs: ["gcc_9"]
key: "gcc_9-$CI_COMMIT_REF_SLUG"

Sören Peters
committed
expire_in: 1 hrs
before_script:
- export CCACHE_BASEDIR=$CI_PROJECT_DIR
- export CCACHE_DIR=$CI_PROJECT_DIR/cache
- python3 setup.py bdist_wheel build_ext --build-temp=_skbuild -- -DBUILD_VF_CPU=ON -DBUILD_VF_DOUBLE_ACCURACY=ON -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CUDA_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache
###############################################################################
## Container Upload ##
###############################################################################
image:
name: quay.io/singularity/singularity:v3.10.2
entrypoint: [""]
- if: $REMOTE_USER && $REMOTE_HOST && $PRIVATE_KEY && $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- singularity build "Containers/PoiseuilleTestContainer.sif" "Python/SlurmTests/poiseuille/PoiseuilleTestContainer.def"
###############################################################################
## Tests ##
###############################################################################
gcc_9_unit_tests:
needs: ["gcc_9"]
- cd $CI_PROJECT_DIR/build
- ctest --rerun-failed --output-on-failure

Soeren Peters
committed
###############################################################################
- $env:Path += ";C:\Program Files\CMake\bin\"
- ctest --version
- cd $CI_PROJECT_DIR/build
- ctest -C Release

Soeren Peters
committed
###############################################################################
- pip3 install $VF_WHEEL
- pip3 install -r Python/requirements.txt
- python3 -m unittest discover -s Python -v
###############################################################################
gcc_9_python_hpc_test:
image: python:latest
stage: test
- if: $REMOTE_USER && $REMOTE_HOST && $PRIVATE_KEY && $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- when: manual
before_script:
- pip install hpc-rocket
script:
- hpc-rocket launch --watch Python/SlurmTests/poiseuille/rocket.yml
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
###############################################################################
build-regression-tests-ci:
image: python:3.10
stage: test
before_script:
- pip install -r utilities/ci-regression-tests/requirements.txt
script:
- python3 utilities/ci-regression-tests/generate-ci.py
artifacts:
expire_in: 1 week
paths:
- generated/
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- when: manual
allow_failure: true
needs: []
trigger:regression-tests:
stage: test
needs:
- build-regression-tests-ci
trigger:
include:
- artifact: generated/regression-tests-ci.yml
job: build-regression-tests-ci
strategy: depend
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
###############################################################################
image: python:latest
stage: test
rules:
- if: $REMOTE_USER && $REMOTE_HOST && $PRIVATE_KEY && $CI_PIPELINE_SOURCE == "schedule"
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- when: manual
allow_failure: true
before_script:
- pip install hpc-rocket
- pip install "fieldcompare[all]"
script:
- hpc-rocket launch --watch regression-tests/multigpu_test/rocket4GPU.yml
- git clone --depth 1 --filter=blob:none --sparse https://github.com/irmb/test_data
- cd test_data
- git sparse-checkout set regression_tests/gpu/DrivenCavity_4GPU_2Levels regression_tests/gpu/SphereScaling_4GPU_2Levels
- fieldcompare dir output/4GPU test_data/regression_tests/gpu/DrivenCavity_4GPU_2Levels --include-files "DrivenCavityMultiGPU*.vtu"
- fieldcompare dir output/4GPU test_data/regression_tests/gpu/SphereScaling_4GPU_2Levels --include-files "SphereScaling*.vtu"
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
###############################################################################
regression_test_8gpu:
image: python:latest
stage: test
rules:
- if: $REMOTE_USER && $REMOTE_HOST && $PRIVATE_KEY && $CI_PIPELINE_SOURCE == "schedule"
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- when: manual
allow_failure: true
before_script:
- pip install hpc-rocket
- pip install "fieldcompare[all]"
script:
- hpc-rocket launch --watch regression-tests/multigpu_test/rocket8GPU.yml
- git clone --depth 1 --filter=blob:none --sparse https://github.com/irmb/test_data
- cd test_data
- git sparse-checkout set regression_tests/gpu/DrivenCavity_8GPU_2Levels regression_tests/gpu/SphereScaling_8GPU_2Levels
- cd ..
- fieldcompare dir output/8GPU test_data/regression_tests/gpu/DrivenCavity_8GPU_2Levels --include-files "DrivenCavityMultiGPU*.vtu"
- fieldcompare dir output/8GPU test_data/regression_tests/gpu/SphereScaling_8GPU_2Levels --include-files "SphereScaling*.vtu"
###############################################################################
## Benchmark ##
###############################################################################
image: nvidia/cuda:11.1.1-devel-ubuntu20.04
needs: []
tags:
- gpu
- linux
script:
- echo NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES}
- nvidia-smi
###############################################################################
gpu_numerical_tests:
stage: benchmark

Sven Marcus
committed
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- when: manual
needs: []
tags:
- gpu
- linux
before_script:

Soeren Peters
committed
- git clone --depth 1 --filter=blob:none --sparse https://github.com/irmb/test_data
- cd test_data
- git sparse-checkout set numerical_tests_gpu/grids numerical_tests_gpu/grids
- export CCACHE_BASEDIR=$CI_PROJECT_DIR
- export CCACHE_DIR=$CI_PROJECT_DIR/cache
- ccache -s
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build

Soeren Peters
committed
- rm -rf ./*
-DCMAKE_CUDA_ARCHITECTURES=60
- make -j4
- $CI_PROJECT_DIR/build/bin/NumericalTests $CI_PROJECT_DIR/apps/gpu/tests/NumericalTests/configK17chim_nu10tm3.txt /tmp/test_data/numerical_tests_gpu/ 2>&1 | tee -a numerical_tests_gpu_results.txt
cache:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/cache
artifacts:
paths:
- $CI_PROJECT_DIR/numerical_tests_gpu_results.txt
###############################################################################
###############################################################################
clang_build_analyzer_clang_10:
stage: analyze
before_script:
- export CC=clang
- export CXX=clang++
- $CXX --version
- cd /tmp
- git clone https://github.com/aras-p/ClangBuildAnalyzer.git
- cd ClangBuildAnalyzer
- cmake .
- make
- export PATH+=:$(pwd)
script:
- cd $CI_PROJECT_DIR/build

Soeren Peters
committed
- cmake ..
-DCMAKE_CUDA_ARCHITECTURES=60

Soeren Peters
committed
-DCMAKE_CXX_FLAGS=-ftime-trace
- ClangBuildAnalyzer --start .
- make
- ClangBuildAnalyzer --stop . CBA

Soeren Peters
committed
###############################################################################
include_what_you_use_clang_10:

Soeren Peters
committed
- export CC=clang
- export CXX=clang++
- $CXX --version
- cd /tmp
- git clone https://github.com/include-what-you-use/include-what-you-use.git
- cd include-what-you-use
- git checkout clang_10
- cmake . -DCMAKE_PREFIX_PATH=/usr/lib/llvm-10
- make
- export PATH+=:$(pwd)/bin
script:

Soeren Peters
committed
- cmake ..
-DCMAKE_CUDA_ARCHITECTURES=60

Soeren Peters
committed
-DBUILD_VF_INCLUDE_WHAT_YOU_USE=ON
- make

Soeren Peters
committed
###############################################################################
rules: # dont create MR pipeline, run always on irmb/develop and manual in all other cases
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- if: '$CI_PROJECT_NAMESPACE == "irmb" && $CI_COMMIT_BRANCH == "develop"'
allow_failure: true

Soeren Peters
committed
cppcheck:
stage: analyze
extends: .analyze_template
before_script:
script:
- cd $CI_PROJECT_DIR
- cppcheck src --enable=all --xml 2> cppcheck.xml

Soeren Peters
committed
###############################################################################
# lizard - Cyclomatic Complexity Analyzer
# Ignore warnings is manually set to 191. This job will fail when new warnings are added.

Soeren Peters
committed
before_script:
- cd /tmp
- git clone https://github.com/terryyin/lizard.git
- cd lizard
- lizard --version
script:
- cd $CI_PROJECT_DIR

Sören Peters
committed
- lizard -l cpp src/ > lizard.txt --warnings_only --ignore_warnings 400

Soeren Peters
committed
###############################################################################

Soeren Peters
committed
before_script:
- gcovr --version
script:

Soeren Peters
committed
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build
- cmake ..
-DCMAKE_CUDA_ARCHITECTURES=60

Soeren Peters
committed
-DBUILD_VF_COVERAGE=ON
- make -j4
- ./bin/basicsTests
- cd ..
- mkdir coverage

Soeren Peters
committed
- gcovr -r $CI_PROJECT_DIR -k build -f "src" --print-summary --html coverage/coverage.html --html-details --xml coverage/coverage.xml

Soeren Peters
committed
coverage_report:
coverage_format: cobertura
path: coverage/coverage.xml

Soeren Peters
committed
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"

Soeren Peters
committed
- build

Soeren Peters
committed
###############################################################################

Soeren Peters
committed
# this job also produces a compile commands json file.

Soeren Peters
committed
before_script:
- run-clang-tidy -h
script:

Soeren Peters
committed
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build
- cmake ..
-DBUILD_VF_CPU=ON
-DBUILD_VF_GPU=OFF
- python3 ../utilities/filterCompileCommands.py compile_commands.json

Soeren Peters
committed
- build/clangtidy.txt
- build/compile_commands.json
###############################################################################
# doxgen

Sören Peters
committed
pages:
image: alpine
only:
- develop@irmb/VirtualFluids_dev
needs: []
script:
- apk update && apk add doxygen
- doxygen docs/Doxyfile
###############################################################################
## Deploy ##
###############################################################################
stage: deploy
before_script:
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
- apt-get install -y rsync
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- eval $(ssh-agent -s)
- echo "$SSH_KEY" | tr -d '\r' | ssh-add -
- echo $SSH_KEY >> ansible/private_key
- ssh-keyscan -t rsa $HOST >> ~/.ssh/known_hosts
variables:
SSH_KEY: ""
HOST: ""
###############################################################################
vf_to_phoenix:
extends: .deploy_template
stage: deploy
needs: ["gcc_9_python", "gcc_9_unit_tests", "gcc_9_python_bindings_test"]
when: manual
variables:
SSH_KEY: "$SSH_PRIVATE_KEY"
HOST: "phoenix.hlr.rz.tu-bs.de"
- ansible-playbook -i ansible/hosts.cfg -u $REMOTE_USER ansible/playbook_vf_deploy.yml
parallel:
matrix:
- ANSIBLE_MATRIX: 0
REMOTE_USER:
- y0054816

Soeren Peters
committed
###############################################################################
vf_wheel_to_jupyterhub:
needs: ["gcc_9_python", "gcc_9_unit_tests", "gcc_9_python_bindings_test"]
variables:
HOST: "gitlab-runner01.irmb.bau.tu-bs.de"
SSH_KEY: "$SSH_PRIVATE_KEY"
REMOTE_USER: "runner"
jupyter_host: "runner"
script:
- ansible-playbook -i ansible/hosts.cfg -u $REMOTE_USER ansible/playbook_jupyter_update.yml

Soeren Peters
committed
###############################################################################
# the reports in this file needs to match the artifacts.

Soeren Peters
committed
# This job only run on the development branch of the parent repository, not on forks!

Soeren Peters
committed
#- develop
- develop@irmb/VirtualFluids_dev

Soeren Peters
committed
SONAR_HOST_URL: "http://gitlab-runner01.irmb.bau.tu-bs.de/sonarqube/"
needs: ["cppcheck","clang-tidy","gcov_gcc_9"]
before_script:
- cd /tmp
- apt-get install unzip
- wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
- unzip sonar-scanner-cli-4.0.0.1744-linux.zip
- cd sonar-scanner-4.0.0.1744-linux/
- echo "sonar.host.url=$SONAR_HOST_URL" >> conf/sonar-scanner.properties
- echo "sonar.sourceEncoding=UTF-8" >> conf/sonar-scanner.properties
- cat conf/sonar-scanner.properties
- export PATH+=:$(pwd)/bin
- sonar-scanner -X -Dsonar.verbose=true -Dsonar.login=$SONAR_SECURITY_TOKEN