Skip to content
Snippets Groups Projects
.gitlab-ci.yml 5.04 KiB
Newer Older
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
#  tags:
#    - altbuilder
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
#  tags:
#    - altbuilder
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
Tomáš Pecka's avatar
Tomáš Pecka committed
  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/infrastructure/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/infrastructure/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
Tomáš Pecka's avatar
Tomáš Pecka committed
  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/infrastructure/ci-docker-images/alt-builder:latest
Tomáš Pecka's avatar
Tomáš Pecka committed
  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
    - cppcheck --version
    - cppcheck -q --enable=all --project=build/compile_commands.json --suppress="*:*/lib/*" --error-exitcode=1
Tomáš Pecka's avatar
Tomáš Pecka committed
static-analysis:clang-tidy:
  extends: .template:static-analysis
Tomáš Pecka's avatar
Tomáš Pecka committed
  script:
    - clang-tidy --version
    - jq ".[].file" build/compile_commands.json | tr -d "\"" | grep -v "test-src" | xargs -n1 -P$(grep -c processor /proc/cpuinfo) clang-tidy -quiet -p build/
Tomáš Pecka's avatar
Tomáš Pecka committed
static-analysis:sources-check:
  extends: .template:static-analysis
  script:
    - python3 extra/scripts/sources-check.py .

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"