Skip to content
Snippets Groups Projects
.gitlab-ci.yml 4.79 KiB
Newer Older
  • Learn to ignore specific revisions
  • image: alpine:3.11
    
    stages:
     - build
     - test
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
     - notify
    
    .template:only:merge: &only-merge
      only:
        - merge_requests
    
    .template:only:master: &only-master
      only:
        refs:
          - master
    
    .template:only:tag: &only-tag
      only:
        - /^v.*$/
      except:
        - branches
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    #######################################################################################################################
    # build + test
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .template:build:
      dependencies: []
      stage: build
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      script:
    
        - mkdir -p build && cd build
        - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -GNinja ..
        - ninja
        - DESTDIR="." ninja install
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      artifacts:
        paths:
          - build/
        expire_in: 1 day
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .template:test:
      dependencies: []
      stage: test
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      script:
        - cd build
        - ctest . --output-on-failure -j $(grep -c processor /proc/cpuinfo)
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # .config:alpine: &distro_alpine
    #   <<: *only-merge
    #   image: alpine:3.11
    #
    # build:alpine:
    #   <<: *distro_alpine
    #   extends: .template:build
    #   before_script:
    #     - apk add --no-cache bash build-base cmake ninja python3 libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev
    #
    # test:alpine:
    #   <<: *distro_alpine
    #   extends: .template:test
    #   dependencies:
    #     - build:alpine
    #   before_script:
    #     - apk add --no-cache bash bc coreutils python3 cmake libexecinfo libxml2 tclap readline qt5-qtbase qt5-qtbase-x11 graphviz jsoncpp
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .config:builder: &distro_builder
      image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .build:builder:
      <<: *distro_builder
      extends: .template:build
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .test:builder:
      <<: *distro_builder
      extends: .template:test
    
    
    build:builder:gcc:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .build:builder
    
    build:builder:clang-sanitizers:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .build:builder
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        CXXFLAGS: "-fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all" # -stdlib=libc++
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    test:builder:gcc:
      extends: .test:builder
      dependencies:
        - build:builder:gcc
    
    test:builder:clang-sanitizers:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .test:builder
      dependencies:
    
        - build:builder:clang-sanitizers
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    
    #######################################################################################################################
    # doc
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    build:doc:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
    
      stage: build
      before_script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apt-get update && apt-get install -y doxygen graphviz
    
      script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - mkdir -p build && cd build
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_DOCS=1 -GNinja ..
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - ninja doxygen
    
      artifacts:
        paths:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
          - build/apidoc/
    
        expire_in: 1 day
    
    #######################################################################################################################
    # static analysis
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .template:static-analysis:
      stage: build
      image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
      before_script:
        - mkdir -p build && pushd build
    
        - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - popd
      allow_failure: true # TODO: Remove
      dependencies: []
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    static-analysis:cppcheck:
      extends: .template:static-analysis
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - cppcheck -q --enable=all --project=build/compile_commands.json --suppress="*:*/contrib/*" --error-exitcode=1
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    static-analysis:clang-tidy:
      extends: .template:static-analysis
      script:
    
        - jq ".[].file" build/compile_commands.json | tr -d "\"" | grep -v "test-src" | xargs -n1 -P$(grep -c processor /proc/cpuinfo) clang-tidy -p build/
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    #######################################################################################################################
    # notify
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .template:notify:
      stage: notify
    
      before_script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apk add --no-cache curl
      dependencies: []
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      script:
        - curl -X POST -F token="$TOKEN" -F ref=master $PARAMS https://gitlab.fit.cvut.cz/api/v4/projects/$PROJECT_ID/trigger/pipeline
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    notify:pyalib:
    
      <<: *only-master
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .template:notify
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      variables:
        TOKEN: "$TOKEN_TRIGGER_PYALIB"
        PROJECT_ID: "11497"
    
    notify:release:stable:
      <<: *only-tag
      extends: .template:notify
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      variables:
        TOKEN: "$TOKEN_TRIGGER_RELEASE"
        PROJECT_ID: "17683"
        PARAMS: "-F variables[RELEASE_REF]=$CI_COMMIT_TAG -F variables[RELEASE_MODE]=stable"
    
    
    notify:release:snapshot:
      <<: *only-master
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      variables:
        TOKEN: "$TOKEN_TRIGGER_RELEASE"
        PROJECT_ID: "17683"
        PARAMS: "-F variables[RELEASE_REF]=$CI_COMMIT_SHA -F variables[RELEASE_MODE]=snapshot"