Skip to content
Snippets Groups Projects
.gitlab-ci.yml 7.78 KiB
Newer Older
image: irmb/virtualfluids-python-deps
Soeren Peters's avatar
Soeren Peters committed

stages:
  - build
  - deploy
Sven Marcus's avatar
Sven Marcus committed
  - release
Soeren Peters's avatar
Soeren Peters committed

build:
  stage: build

  cache:
    key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
    paths:
      - _skbuild

      - _skbuild/
      - Python/venv

  before_script:
    - python3 -m venv --system-site-packages Python/venv
    - source Python/venv/bin/activate

  script:
    - python3 setup.py install


build_singularity_image:
  stage: build
  rules:
    - if: $CI_COMMIT_TAG

  artifacts:
    paths:
      - Containers/VirtualFluidsOpenMPI.sif

  script:
    - singularity build Containers/VirtualFluidsOpenMPI.sif Containers/VirtualFluidsOpenMPI.def
    - ls -sh Containers/VirtualFluidsOpenMPI.sif


virtual_fluids_basics_test:
  stage: test
Soeren Peters's avatar
Soeren Peters committed
  before_script:
    - export VF_UNITTESTS=$(find _skbuild -name basicsTests)
Soeren Peters's avatar
Soeren Peters committed

  script:
    - $VF_UNITTESTS
test_python_bindings:
  artifacts:
    when: on_failure
    paths:
      - output/mq/mq10000/

    - export PYTHONPATH="Python"
    - source Python/venv/bin/activate
Sven Marcus's avatar
Sven Marcus committed
    - python3 -m unittest discover -s Python -v

deploy_to_phoenix:
  stage: deploy
  needs: ["build"]
  before_script:
    - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - echo $SSH_PRIVATE_KEY >> ansible/private_key
    - ssh-keyscan -t rsa phoenix.hlr.rz.tu-bs.de >> ~/.ssh/known_hosts
    - pip3 install ansible
Sven Marcus's avatar
Sven Marcus committed

  script:
    - ansible-playbook -i ansible/hosts.cfg -u $REMOTE_USER ansible/playbook.yml

  parallel:
    matrix:
      - ANSIBLE_MATRIX: 0
        REMOTE_USER:
          - y0054816
Sven Marcus's avatar
Sven Marcus committed
create_release:
Sven Marcus's avatar
Sven Marcus committed
  image: registry.gitlab.com/gitlab-org/release-cli:latest
Sven Marcus's avatar
Sven Marcus committed
  stage: release
Sven Marcus's avatar
Sven Marcus committed
  needs: ["build_singularity_image"]
Sven Marcus's avatar
Sven Marcus committed
  rules:
    - if: $CI_COMMIT_TAG

  script:
    - echo "Creating release with tag $CI_COMMIT_TAG"
Sven Marcus's avatar
Sven Marcus committed
    - 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" \
Administrator's avatar
Administrator committed
      --assets-link="{'name':'VirtualFluidsSingularityImage_OpenMPI','url':'','type':'other','filepath':'Containers/VirtualFluidsOpenMPI.sif'}"
Soeren Peters's avatar
Soeren Peters committed
###############################################################################
##                                                                           ##
##    Deploy: Code analysis                                                  ##
##                                                                           ##
###############################################################################
Soeren Peters's avatar
Soeren Peters committed
clangBuildAnalyzer:
Sven Marcus's avatar
Sven Marcus committed
  only: ["schedules"]
  before_script:
    - export DEBIAN_FRONTEND=noninteractive
    - apt-get update
    - cmake --version
    - mpirun --version
    - 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 $CI_PROJECT_DIR/build
    - cd $CI_PROJECT_DIR/build
    - cmake .. -DBUILD_VF_CPU=ON -DUSE_OPENMP=OFF -DCMAKE_CXX_FLAGS=-ftime-trace
    - ClangBuildAnalyzer --start .
    - make
    - ClangBuildAnalyzer --stop . CBA
    - ClangBuildAnalyzer --analyze CBA


Soeren Peters's avatar
Soeren Peters committed
include_what_you_use:
Sven Marcus's avatar
Sven Marcus committed
  only: ["schedules"]
  before_script:
    - export DEBIAN_FRONTEND=noninteractive
    - apt-get update
    - 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 $CI_PROJECT_DIR/build
    - cd $CI_PROJECT_DIR/build
    - cmake .. -DBUILD_VF_CPU=ON -DUSE_OPENMP=OFF -DBUILD_VF_INCLUDE_WHAT_YOU_USE=ON
Soeren Peters's avatar
Soeren Peters committed
cppcheck:

  before_script:
    - export DEBIAN_FRONTEND=noninteractive
    - apt-get update
    - apt-get install -y cppcheck
    - cppcheck --version
    - cppcheck src --enable=all --xml 2> report.xml
    - cppcheck-htmlreport --file=report.xml --report-dir=html_report --source-dir=.

Soeren Peters's avatar
Soeren Peters committed
  artifacts:
    paths:
      - html_report/


Soeren Peters's avatar
Soeren Peters committed
deploy_cppcheck_to_elladan:
  stage: deploy
  needs: ["cppcheck"]

  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_PRIVATE_KEY_ELLADAN" | tr -d '\r' | ssh-add -
Soeren Peters's avatar
Soeren Peters committed
    - ssh-keyscan -t rsa elladan.irmb.bau.tu-bs.de >> ~/.ssh/known_hosts
    - pip3 install ansible

  script:
    - ansible-playbook -i ansible/hosts.cfg -u public_pages ansible/playbook_cppcheck.yml
# lizard - Cyclomatic Complexity Analyzer
# Ignore warnings is manually set to 191. This job will fail when new warnings are added.
Soeren Peters's avatar
Soeren Peters committed
lizard:
  stage: test

  before_script:
    - export DEBIAN_FRONTEND=noninteractive
    - apt-get update
    - cd /tmp
    - git clone https://github.com/terryyin/lizard.git
    - cd lizard
    - python3 setup.py install
Soeren Peters's avatar
Soeren Peters committed
    - which lizard
    - lizard --version

  script:
    - cd $CI_PROJECT_DIR
    - lizard -l cpp src/ > lizard.txt --ignore_warnings 191
Soeren Peters's avatar
Soeren Peters committed

  artifacts:
    paths:
      - lizard.txt
Soeren Peters's avatar
Soeren Peters committed

# code coverage
gcov:
  stage: test

  before_script:
    - export DEBIAN_FRONTEND=noninteractive
    - apt-get update
    - pip3 install gcovr
    - gcovr --version
    - apt-get install -y libboost-serialization-dev
    - cd /tmp
    - apt-get install unzip
    - wget https://github.com/NVIDIA/cuda-samples/archive/10.1.2.zip
    - unzip 10.1.2.zip
    - export NVCUDASAMPLES_ROOT=$(pwd)/cuda-samples-10.1.2
Soeren Peters's avatar
Soeren Peters committed

  script:
    - mkdir -p $CI_PROJECT_DIR/gcov_build
    - cd $CI_PROJECT_DIR/gcov_build
    - cmake .. -DBUILD_VF_CPU=ON -DBUILD_VF_GPU=ON -DBUILD_VF_COVERAGE=ON -DBUILD_VF_UNIT_TESTS=ON
Soeren Peters's avatar
Soeren Peters committed
    - make -j4
    - ./bin/basicsTests
    - cd ..
    - mkdir coverage
Soeren Peters's avatar
Soeren Peters committed
    - gcovr -r $CI_PROJECT_DIR -k gcov_build -f "src" --print-summary --html coverage/coverage.html --html-details --xml coverage/coverage.xml
Soeren Peters's avatar
Soeren Peters committed
  artifacts:
    paths:
      - coverage/
Soeren Peters's avatar
Soeren Peters committed
    reports:
      cobertura: coverage/coverage.xml
Soeren Peters's avatar
Soeren Peters committed
  cache:
    key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-gcov"
    paths:
      - gcov_build/


deploy_gcov_to_elladan:
  stage: deploy
  needs: ["gcov"]

  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_PRIVATE_KEY_ELLADAN" | tr -d '\r' | ssh-add -
    - ssh-keyscan -t rsa elladan.irmb.bau.tu-bs.de >> ~/.ssh/known_hosts
    - pip3 install ansible

  script:
Soeren Peters's avatar
Soeren Peters committed
    - ansible-playbook -i ansible/hosts.cfg -u public_pages ansible/playbook_gcov.yml


# windows
windows:
  stage: build

  tags:
    - windows10

  before_script:
    - git --version
Soeren Peters's avatar
Soeren Peters committed
    - $env:Path += ";C:\Program Files\CMake\bin\"
Soeren Peters's avatar
Soeren Peters committed
    - cmake --version
Soeren Peters's avatar
Soeren Peters committed
    - $env:Path += ";C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin"
    - MSBuild.exe -version
Soeren Peters's avatar
Soeren Peters committed

  script:
    - cd $CI_PROJECT_DIR
    - md -force build
Soeren Peters's avatar
Soeren Peters committed
    - cd build
Soeren Peters's avatar
Soeren Peters committed
    - cmake .. -DBUILD_VF_CPU=OFF -DBUILD_VF_GPU=ON -DBUILD_VF_UNIT_TESTS=ON -G "$env:CMAKE_GENERATOR" ..
    - MSBuild.exe VirtualFluids.sln /property:Configuration=$env:BUILD_CONFIGURATION /verbosity:minimal /maxcpucount:4
Soeren Peters's avatar
Soeren Peters committed
    - . ".\bin\$env:BUILD_CONFIGURATION\basicsTests.exe"
Soeren Peters's avatar
Soeren Peters committed

  variables:
Soeren Peters's avatar
Soeren Peters committed
    CMAKE_GENERATOR: "Visual Studio 16 2019"
    BUILD_CONFIGURATION: "Release"

  cache:
    key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG-windows"
    paths:
      - $CI_PROJECT_DIR/build/