-
Sven Marcus authoredSven Marcus authored
.gitlab-ci.yml 15.37 KiB
image: irmb/virtualfluids-python-deps
stages:
- build
- build_python
- test
- benchmark
- analyze
- deploy
- release
###############################################################################
## Builds ##
###############################################################################
.gnu_build_template:
stage: build
image: irmb/virtualfluids-deps-ubuntu20.04
tags:
- gpu
- linux
cache:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $BUILD_FOLDER
artifacts:
paths:
- $BUILD_FOLDER
before_script:
- export CC=gcc
- export CXX=g++
script:
- $CXX --version
- $CC --version
- cmake --version
- mpirun --version
- mkdir -p $CI_PROJECT_DIR/$BUILD_FOLDER
- cd $CI_PROJECT_DIR/$BUILD_FOLDER
- cmake ..
-DBUILD_VF_CPU=ON
-DBUILD_VF_GPU=OFF
- cmake . -LAH
- make -j4
variables:
BUILD_FOLDER: "build"
###############################################################################
gcc_9:
extends: .gnu_build_template
###############################################################################
clang_10:
extends: .gnu_build_template
before_script:
- export CC=clang
- export CXX=clang++
###############################################################################
gcc_9_rebuild:
stage: build
image: irmb/virtualfluids-deps-ubuntu20.04
tags:
- gpu
- linux
before_script:
- export CCACHE_BASEDIR=$CI_PROJECT_DIR
- export CCACHE_DIR=$CI_PROJECT_DIR/cache
- ccache -s
script:
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build
- rm -r -f ./*
- cmake ..
-DBUILD_VF_CPU=ON
-DBUILD_VF_GPU=ON
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
-DCMAKE_CUDA_COMPILER_LAUNCHER=ccache
-DCMAKE_C_COMPILER_LAUNCHER=ccache
- make -j4 2>&1 | tee gcc_warnings.txt
- ccache -s
artifacts:
paths:
- build/gcc_warnings.txt
cache:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/cache
###############################################################################
msvc_16:
stage: build
tags:
- win
- gpu
variables:
CMAKE_GENERATOR: "Visual Studio 16 2019"
BUILD_CONFIGURATION: "Release"
BUILD_FOLDER: "build"
BUILD_VF_CPU: "ON"
BUILD_VF_GPU: "ON"
BUILD_VF_UNIT_TESTS: "ON"
# 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 (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin"
- MSBuild.exe -version
script:
- cd $CI_PROJECT_DIR
- md -force $env:BUILD_FOLDER
- cd $env:BUILD_FOLDER
- cmake .. -DBUILD_VF_CPU=$env:BUILD_VF_CPU -DBUILD_VF_GPU=$env:BUILD_VF_GPU -DBUILD_VF_UNIT_TESTS=$env:BUILD_VF_UNIT_TESTS -G "$env:CMAKE_GENERATOR" ..
- MSBuild.exe VirtualFluids.sln /property:Configuration=$env:BUILD_CONFIGURATION /verbosity:minimal /maxcpucount:4
cache:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- $CI_PROJECT_DIR/$env:BUILD_FOLDER/
artifacts:
paths:
- $CI_PROJECT_DIR/$env:BUILD_FOLDER/
###############################################################################
build_singularity_image:
stage: build
tags:
- priviliged
- linux
rules:
- if: $CI_COMMIT_TAG
artifacts:
paths:
- Containers/VirtualFluidsOpenMPI.sif
script:
- singularity build --fakeroot Containers/VirtualFluidsOpenMPI.sif Containers/VirtualFluidsOpenMPI.def
- ls -sh Containers/VirtualFluidsOpenMPI.sif
###############################################################################
## Build Python ##
###############################################################################
gcc_9_python:
stage: build_python
needs: ["gcc_9"]
artifacts:
paths:
- build/
- dist/
script:
- python3 setup.py bdist_wheel
###############################################################################
## Tests ##
###############################################################################
gcc_9_unit_tests:
stage: test
needs: ["gcc_9"]
before_script:
- export VF_UNITTESTS=$(find build_gcc9 -name basicsTests)
script:
- $VF_UNITTESTS
###############################################################################
msvc_16_unit_tests:
stage: test
tags:
- win
- gpu
needs: ["msvc_16"]
before_script:
- cd $CI_PROJECT_DIR/build
script:
- .\bin\Release\basicsTests.exe
###############################################################################
gcc_9_python_bindings_test:
stage: test
needs: ["gcc_9_python"]
before_script:
- export PYTHONPATH="Python"
- export VF_WHEEL=$(find dist/*.whl)
- pip3 install $VF_WHEEL
- pip3 install -r Python/requirements.txt
script:
- python3 -m unittest discover -s Python -v
###############################################################################
## Benchmark ##
###############################################################################
nvidia_test:
stage: benchmark
needs: []
tags:
- gpu
- linux
image: nvidia/cuda:11.1.1-devel-ubuntu20.04
script:
- echo NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES}
- nvidia-smi
###############################################################################
gpu_numerical_tests:
stage: benchmark
image: irmb/virtualfluids-deps-ubuntu20.04
when: manual
needs: []
tags:
- gpu
- linux
before_script:
- cd /tmp
- git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@git.rz.tu-bs.de/irmb/test_data.git
- 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
- rm -r -f ./*
- cmake ..
-DBUILD_VF_CPU=OFF
-DBUILD_VF_GPU=ON
-DBUILD_VF_DOUBLE_ACCURACY=ON
-DBUILD_NUMERIC_TESTS=ON
-DPATH_NUMERICAL_TESTS=/tmp/test_data/numerical_tests_gpu
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
-DCMAKE_CUDA_COMPILER_LAUNCHER=ccache
-DCMAKE_C_COMPILER_LAUNCHER=ccache
- make -j4
- ccache -s
script:
- cd $CI_PROJECT_DIR
- ./build/bin/NumericalTests $CI_PROJECT_DIR/apps/gpu/tests/NumericalTests/configK15_nu10tm2.txt 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
###############################################################################
## Code analysis ##
###############################################################################
clang_build_analyzer_clang_10:
stage: analyze
image: irmb/virtualfluids-deps-ubuntu20.04
only: ["schedules"]
needs: []
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:
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build
- cmake ..
-DBUILD_VF_CPU=ON
-DBUILD_VF_GPU=ON
-DUSE_OPENMP=OFF
-DCMAKE_CXX_FLAGS=-ftime-trace
- ClangBuildAnalyzer --start .
- make
- ClangBuildAnalyzer --stop . CBA
- ClangBuildAnalyzer --analyze CBA
###############################################################################
include_what_you_use_clang_10:
stage: analyze
image: irmb/virtualfluids-deps-ubuntu20.04
only: ["schedules"]
needs: []
before_script:
- 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:
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build
- cmake ..
-DBUILD_VF_CPU=ON
-DBUILD_VF_GPU=ON
-DUSE_OPENMP=OFF
-DBUILD_VF_INCLUDE_WHAT_YOU_USE=ON
- make
###############################################################################
cppcheck:
stage: analyze
image: irmb/virtualfluids-deps-ubuntu20.04
needs: []
before_script:
- export DEBIAN_FRONTEND=noninteractive
- apt-get update
- apt-get install -y cppcheck
script:
- cd $CI_PROJECT_DIR
- cppcheck --version
- cppcheck src --enable=all --xml 2> cppcheck.xml
- cppcheck-htmlreport --file=cppcheck.xml --report-dir=html_report --source-dir=.
artifacts:
paths:
- html_report/
- cppcheck.xml
###############################################################################
# lizard - Cyclomatic Complexity Analyzer
# Ignore warnings is manually set to 191. This job will fail when new warnings are added.
lizard:
stage: analyze
image: irmb/virtualfluids-python-deps-ubuntu20.04
needs: []
before_script:
- cd /tmp
- git clone https://github.com/terryyin/lizard.git
- cd lizard
- python3 setup.py install
- lizard --version
script:
- cd $CI_PROJECT_DIR
- lizard -l cpp src/ > lizard.txt --ignore_warnings 191
artifacts:
paths:
- lizard.txt
###############################################################################
# code coverage
gcov_gcc_9:
stage: analyze
image: irmb/virtualfluids-python-deps-ubuntu20.04
needs: []
before_script:
- export DEBIAN_FRONTEND=noninteractive
- apt-get update
- pip3 install gcovr
- gcovr --version
script:
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build
- cmake ..
-DBUILD_VF_CPU=ON
-DBUILD_VF_GPU=ON
-DBUILD_VF_COVERAGE=ON
-DBUILD_VF_UNIT_TESTS=ON
- make -j4
- ./bin/basicsTests
- cd ..
- mkdir coverage
- gcovr -r $CI_PROJECT_DIR -k build -f "src" --print-summary --html coverage/coverage.html --html-details --xml coverage/coverage.xml
artifacts:
paths:
- coverage/
- build/
reports:
cobertura: coverage/coverage.xml
cache:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- build
###############################################################################
# this job also produces a compile commands json file.
clang-tidy:
stage: analyze
image: irmb/virtualfluids-python-deps-ubuntu20.04
needs: []
before_script:
- run-clang-tidy -h
script:
- mkdir -p $CI_PROJECT_DIR/build
- cd $CI_PROJECT_DIR/build
- cmake ..
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DBUILD_VF_CPU=ON
-DBUILD_VF_GPU=OFF
- python3 ../utilities/filterCompileCommands.py compile_commands.json
- run-clang-tidy -quiet > clangtidy.txt
artifacts:
paths:
- build/clangtidy.txt
- build/compile_commands.json
###############################################################################
## Deploy ##
###############################################################################
.deploy_template:
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
- pip3 install ansible
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"
script:
- ansible-playbook -i ansible/hosts.cfg -u $REMOTE_USER ansible/playbook_vf_deploy.yml
parallel:
matrix:
- ANSIBLE_MATRIX: 0
REMOTE_USER:
- y0054816
###############################################################################
vf_wheel_to_jupyterhub:
extends: .deploy_template
stage: deploy
only: ["schedules"]
needs: ["gcc_9_python", "gcc_9_unit_tests", "gcc_9_python_bindings_test"]
variables:
HOST: "finrod.irmb.bau.tu-bs.de"
SSH_KEY: "$SSH_PRIVATE_KEY_JUPYTER_HOST_AT_FINROD"
REMOTE_USER: "jupyter_host"
jupyter_host: "jupyter_host"
script:
- ansible-playbook -i ansible/hosts.cfg -u $REMOTE_USER ansible/playbook_jupyter_update.yml
cppcheck_to_elladan:
extends: .deploy_template
stage: deploy
needs: ["cppcheck"]
when: manual
variables:
SSH_KEY: "$SSH_PRIVATE_KEY_ELLADAN"
HOST: "elladan.irmb.bau.tu-bs.de"
script:
- ansible-playbook -i ansible/hosts.cfg -u public_pages ansible/playbook_cppcheck.yml
###############################################################################
gcov_to_elladan:
extends: .deploy_template
stage: deploy
needs: ["gcov_gcc_9"]
when: manual
variables:
SSH_KEY: "$SSH_PRIVATE_KEY_ELLADAN"
HOST: "elladan.irmb.bau.tu-bs.de"
script:
- ansible-playbook -i ansible/hosts.cfg -u public_pages ansible/playbook_gcov.yml
###############################################################################
# sonar-scanner runs sonar-project.properties
# the reports in this file needs to match the artifacts.
# This job only run on the development branch of the parent repository, not on forks!
sonar-scanner:
stage: deploy
only:
- develop@irmb/VirtualFluids_dev
variables:
SONAR_HOST_URL: "http://gitlab-runner01.irmb.bau.tu-bs.de/sonarqube/"
needs: ["cppcheck","clang-tidy","gcov_gcc_9","gcc_9_rebuild"]
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 -v
script:
- cd $CI_PROJECT_DIR
- sonar-scanner -Dsonar.login=$SONAR_SECURITY_TOKEN
###############################################################################
## Release ##
###############################################################################
create_release:
image: registry.gitlab.com/gitlab-org/release-cli:latest
stage: release
needs: ["build_singularity_image"]
rules:
- if: $CI_COMMIT_TAG
script:
- echo "Creating release with tag $CI_COMMIT_TAG"
- release-cli create --name "VirtualFluids $CI_COMMIT_TAG" \
--description "VirtualFluids CFD Simulator" \
--tag-name "$CI_COMMIT_TAG" \
--ref "$CI_COMMIT_SHA" \
--job-token "$CI_JOB_TOKEN" \
--assets-link="{'name':'VirtualFluidsSingularityImage_OpenMPI','url':'','type':'other','filepath':'Containers/VirtualFluidsOpenMPI.sif'}"
- build/bin/basicsTests