stages: - pretest - test - deploy # -------------------------- Tests ------------------------------------------------------------------------------------ # Normal test - runs on every commit all but "long run" tests tests-and-coverage: stage: pretest except: variables: - $ENABLE_NIGHTLY_BUILDS image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full script: - pip install sympy --upgrade - env - pip list - export NUM_CORES=$(nproc --all) - mkdir -p ~/.config/matplotlib - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - mkdir public - py.test -v -n $NUM_CORES --cov-report html --cov-report term --cov=. -m "not longrun" --html test-report/index.html --junitxml=report.xml - python3 -m coverage xml tags: - docker - cuda11 - AVX artifacts: when: always paths: - coverage_report - test-report reports: cobertura: coverage.xml junit: report.xml # pipeline with latest python version latest-python: stage: test except: variables: - $ENABLE_NIGHTLY_BUILDS image: i10git.cs.fau.de:5005/pycodegen/pycodegen/latest_python script: - env - pip list - export NUM_CORES=$(nproc --all) - mkdir -p ~/.config/matplotlib - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - mkdir public - py.test -v -n $NUM_CORES -m "not longrun" --junitxml=report.xml tags: - docker - AVX artifacts: when: always reports: junit: report.xml # Nightly test - runs "long run" jobs only test-longrun: stage: test only: variables: - $ENABLE_NIGHTLY_BUILDS image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full script: - export NUM_CORES=$(nproc --all) - mkdir -p ~/.config/matplotlib - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - py.test -v -n $NUM_CORES --cov-report html --cov-report term --cov=. --html test-report/index.html --junitxml=report.xml tags: - docker - cuda11 - AVX artifacts: when: always paths: - coverage_report - test-report reports: junit: report.xml # Minimal tests in windows environment minimal-windows: stage: test except: variables: - $ENABLE_NIGHTLY_BUILDS tags: - win script: - export NUM_CORES=$(nproc --all) - source /cygdrive/c/Users/build/Miniconda3/Scripts/activate - source activate pystencils - pip install joblib - pip list - python -c "import numpy" - py.test -v -m "not (notebook or longrun)" ubuntu: stage: test except: variables: - $ENABLE_NIGHTLY_BUILDS image: i10git.cs.fau.de:5005/pycodegen/pycodegen/ubuntu before_script: # - apt-get -y remove python3-sympy - ln -s /usr/include/locale.h /usr/include/xlocale.h # - pip3 install `grep -Eo 'sympy[>=]+[0-9\.]+' setup.py | sed 's/>/=/g'` script: - export NUM_CORES=$(nproc --all) - mkdir -p ~/.config/matplotlib - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - sed -i 's/--doctest-modules //g' pytest.ini - env - pip3 list - pytest-3 -v -n $NUM_CORES -m "not longrun" --junitxml=report.xml tags: - docker - cuda11 - AVX artifacts: when: always reports: junit: report.xml .multiarch_template: stage: test except: variables: - $ENABLE_NIGHTLY_BUILDS before_script: &multiarch_before_script - python3 -c "import pystencils as ps; ps.cpu.cpujit.read_config()" - sed -i '/^fail_under.*/d' pytest.ini script: - export NUM_CORES=$(nproc --all) - mkdir -p ~/.config/matplotlib - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - sed -i 's/--doctest-modules //g' pytest.ini - env - pip3 list - pytest-3 -v -n $NUM_CORES --cov-report html --cov-report term --cov=. --junitxml=report.xml pystencils_tests/test_*vec*.py pystencils_tests/test_random.py - python3 -m coverage xml tags: - docker - AVX artifacts: when: always paths: - coverage_report reports: cobertura: coverage.xml junit: report.xml arm64v8: extends: .multiarch_template image: i10git.cs.fau.de:5005/pycodegen/pycodegen/arm64 variables: PYSTENCILS_SIMD: "neon" before_script: - *multiarch_before_script - sed -i s/march=native/march=armv8-a/g ~/.config/pystencils/config.json ppc64le: extends: .multiarch_template image: i10git.cs.fau.de:5005/pycodegen/pycodegen/ppc64le variables: PYSTENCILS_SIMD: "vsx" before_script: - *multiarch_before_script - sed -i s/mcpu=native/mcpu=power8/g ~/.config/pystencils/config.json arm64v9: # Compiler support for SVE is still pretty rough: GCC 10+11 produce incorrect code for fixed-width vectors, # while Clang 12 produces memory-corrupting heisenbugs unless we enable the address sanitizer. # In the RNG tests, GCC 10+11 produce an internal compiler error. # The memory corruption seems to only happen with qemu-user, not with qemu-system. # Once the compilers and QEMU have improved, this job should be cleaned up to match the others. extends: .multiarch_template image: i10git.cs.fau.de:5005/pycodegen/pycodegen/arm64 variables: PYSTENCILS_SIMD: "sve256,sve512,sve" ASAN_OPTIONS: detect_leaks=0 LD_PRELOAD: /usr/lib/aarch64-linux-gnu/libasan.so.6 before_script: - *multiarch_before_script - sed -i s/march=native/march=armv8-a+sve/g ~/.config/pystencils/config.json - sed -i s/g\+\+/clang++/g ~/.config/pystencils/config.json riscv64: # The RISC-V vector extension is still experimental and needs special compiler flags. # Once they are officially released, this job should be cleaned up to match the others. extends: .multiarch_template image: i10git.cs.fau.de:5005/pycodegen/pycodegen/riscv64 variables: PYSTENCILS_SIMD: "rvv" QEMU_CPU: "rv64,x-v=true" before_script: - *multiarch_before_script - sed -i 's/march=native/march=rv64imfdv0p10 -menable-experimental-extensions/g' ~/.config/pystencils/config.json - sed -i s/g\+\+/clang++/g ~/.config/pystencils/config.json - sed -i 's/fopenmp/fopenmp=libgomp -I\/usr\/include\/riscv64-linux-gnu/g' ~/.config/pystencils/config.json minimal-conda: stage: pretest except: variables: - $ENABLE_NIGHTLY_BUILDS image: i10git.cs.fau.de:5005/pycodegen/pycodegen/minimal_conda script: - python setup.py quicktest tags: - docker - cuda minimal-sympy-master: stage: test except: variables: - $ENABLE_NIGHTLY_BUILDS image: i10git.cs.fau.de:5005/pycodegen/pycodegen/minimal_conda script: - python -m pip install --upgrade git+https://github.com/sympy/sympy.git - python setup.py quicktest allow_failure: true tags: - docker - cuda pycodegen-integration: image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full stage: test when: manual allow_failure: true script: - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pycodegen.git - cd pycodegen - git submodule sync --recursive - git submodule update --init --recursive - git submodule foreach git fetch origin # compare the latest master version! - git submodule foreach git reset --hard origin/master - cd pystencils - git remote add test $CI_REPOSITORY_URL - git fetch test - git reset --hard $CI_COMMIT_SHA - cd .. - pip install -e pystencils/ - pip install -e lbmpy/ - pip install -e pygrandchem/ - ./install_walberla.sh - export NUM_CORES=$(nproc --all) - mkdir -p ~/.config/matplotlib - echo "backend:template" > ~/.config/matplotlib/matplotlibrc - cd pystencils - py.test -v -n $NUM_CORES --junitxml=report.xml . - cd ../lbmpy - py.test -v -n $NUM_CORES --junitxml=report.xml . - cd ../pygrandchem - py.test -v -n $NUM_CORES --junitxml=report.xml . - cd ../walberla/build/ - make -j $NUM_CORES CodegenJacobiCPU CodegenJacobiGPU CodegenPoissonCPU CodegenPoissonGPU MicroBenchmarkGpuLbm LbCodeGenerationExample - make -j $NUM_CORES multiphaseCPU multiphaseGPU FluctuatingMRT FlowAroundSphereCodeGen - cd apps/benchmarks/UniformGridGPU - make -j $NUM_CORES - cd ../UniformGridGenerated - make -j $NUM_CORES tags: - docker - cuda11 - AVX artifacts: when: always reports: junit: pycodegen/*/report.xml # -------------------- Linter & Documentation -------------------------------------------------------------------------- flake8-lint: stage: pretest except: variables: - $ENABLE_NIGHTLY_BUILDS image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full script: - flake8 pystencils tags: - docker build-documentation: stage: test image: i10git.cs.fau.de:5005/pycodegen/pycodegen/documentation script: - export PYTHONPATH=`pwd` - mkdir html_doc - sphinx-build -b html doc html_doc - sphinx-build -W -b html doc html_doc tags: - docker artifacts: paths: - html_doc pages: image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full stage: deploy script: - ls -l - mv coverage_report html_doc - mv html_doc public # folder has to be named "public" for gitlab to publish it artifacts: paths: - public tags: - docker only: - master@pycodegen/pystencils