Skip to content
Snippets Groups Projects
.gitlab-ci.yml 15.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • image: alpine:3.9
    
    
    stages:
     - build
     - test
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
     - package
     - release
     - notify
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    #######################################################################################################################
    #######################################################################################################################
    #######################################################################################################################
    # build + test
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro.yml
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .template:build:
      dependencies: []
      stage: build
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      script:
    
        - extra/scripts/build.sh -d build -m Release -n
    
    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
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro_alpine.yml
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .config:alpine: &distro_alpine
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      only:
        - merge_requests
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    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
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    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
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro_arch.yml
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .config:archlinux: &distro_archlinux
      image: archlinux/base
      only:
        - merge_requests
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    build:archlinux:
      <<: *distro_archlinux
      extends: .template:build
      before_script:
        - pacman -Syu --noconfirm base-devel cmake ninja python libxml2 tclap readline qt5-base graphviz jsoncpp
        # - pacman -Syu --noconfirm binutils && strip --remove-section=.note.ABI-tag /usr/lib/libQt5Core.so.5 # qt hack
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    test:archlinux:
      <<: *distro_archlinux
      extends: .template:test
      dependencies:
        - build:archlinux
    
      before_script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - pacman -Syu --noconfirm base-devel bash bc coreutils cmake ninja python libxml2 tclap readline qt5-base graphviz jsoncpp
        # - pacman -Syu --noconfirm binutils && strip --remove-section=.note.ABI-tag /usr/lib/libQt5Core.so.5 # qt hack
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro_builder.yml
    
    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
      except:
        - tags
    
    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:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .build:builder
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        CXX: clang++-8
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    test:builder:gcc:
      extends: .test:builder
      dependencies:
        - build:builder:gcc
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    test:builder:clang:
      extends: .test:builder
      dependencies:
        - build:builder:clang
    
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro_debian.yml
    
    .config:debian: &distro_debian
      image: amd64/debian:testing-slim
      only:
        - merge_requests
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    build:debian:
      <<: *distro_debian
      extends: .template:build
    
      before_script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apt-get update
        - apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    test:debian:
      <<: *distro_debian
      extends: .template:test
      dependencies:
        - build:debian
    
      before_script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apt-get update
        - apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
    
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro_opensuse.yml
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .config:opensuse:leap: &distro_opensuse-leap
      image: opensuse/leap:latest
      only:
        - merge_requests
    
    # -----------------------------------------------------------------------------
    
    build:opensuse:leap:
      <<: *distro_opensuse-leap
      extends: .template:build
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - zypper -n install python3 cmake gcc-c++ bash ninja libxml2-devel tclap readline-devel libQt5Widgets-devel libQt5Xml-devel graphviz-devel jsoncpp-devel
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    test:opensuse:leap:
      <<: *distro_opensuse-leap
      extends: .template:test
      dependencies:
        - build:opensuse:leap
      before_script:
        - zypper -n install bash cmake libxml2 readline libQt5Widgets5 libQt5Xml5 graphviz libjsoncpp19
    
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro_ubuntu-lts.yml
    
    .config:ubuntu:lts: &distro_ubuntu-lts
      image: ubuntu:latest
      only:
        - merge_requests
    
    # -----------------------------------------------------------------------------
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *distro_ubuntu-lts
      extends: .template:build
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apt-get update
        - apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
    
    test:ubuntu:lts:
      <<: *distro_ubuntu-lts
      extends: .template:test
      dependencies:
        - build:ubuntu:lts
      before_script:
        - apt-get update
        - apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
    
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # distro_ubuntu-rolling.yml
    
    .config:ubuntu:rolling: &distro_ubuntu-rolling
      image: ubuntu:rolling
      only:
        - merge_requests
    
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *distro_ubuntu-rolling
      extends: .template:build
      before_script:
        - apt-get update
        - apt-get install -y build-essential cmake ninja-build python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
    
    test:ubuntu:rolling:
      <<: *distro_ubuntu-rolling
      extends: .template:test
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apt-get update
        - apt-get install -y build-essential bash cmake libxml2 libreadline8 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
      dependencies:
        - build:ubuntu:rolling
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # doc.yml
    
    doc:doc:
    
      stage: build
      before_script:
        - apk add --no-cache doxygen graphviz
    
      script:
    
        - doxygen
    
      artifacts:
        name: docs
        paths:
    
        expire_in: 1 day
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # static-analysis.yml
    
    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/generate.py -wm
        - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
        - popd
      allow_failure: true # TODO: Remove
      dependencies: []
      only:
        - merge_requests
        - branches
      except:
        - tags
    
    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-8 -p build/
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    #######################################################################################################################
    #######################################################################################################################
    #######################################################################################################################
    # package + release
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # release.yml
    
    .template:only:snapshot: &release_snapshot
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      only:
        refs:
          - master
    
    
    .template:only:tag: &release_stable
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      only:
        - tags
        - /^v.*$/
    
    .template:package:
      stage: package
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      dependencies: []
    
      script:
    
        - LINUX=$(echo "$CI_JOB_NAME" | cut -d":" -f2)
        - MODE=$(echo "$CI_JOB_NAME" | cut -d":" -f4)
        - export DISTRIBUTION=$(echo "$CI_JOB_NAME" | cut -d":" -f3)
        - if [[ $LINUX == "ubuntu" ]]; then LINUX="debian"; fi
        - ./extra/scripts/CD/packaging/package.sh $MODE $LINUX package .
    
    .docker: &docker
      image: docker:dind
      cache: {}  # disable
      services:
        - docker:dind
      variables:
        DOCKER_DRIVER: overlay2
        DOCKER_TLS_CERTDIR: "/certs"
    
      before_script:
    
        - apk add docker bash
        - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
        - docker info
    
    .package:docker:
      <<: *docker
      extends: .template:package
      artifacts:
        paths:
          - images.tar
        expire_in: 1 day
    
    package:docker::snapshot:
      <<: *release_snapshot
      extends: .package:docker
    
    package:docker::stable:
      <<: *release_stable
      extends: .package:docker
    
    
    
    
    .package:sources:
      image: alpine:latest
      extends: .template:package
      before_script:
        - apk add bash
      artifacts:
        paths:
          - "*.tar.gz*"
        expire_in: 1 day
    
    package:sources::snapshot:
      <<: *release_snapshot
      extends: .package:sources
    
    package:sources::stable:
      <<: *release_stable
      extends: .package:sources
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .package:archlinux:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .template:package
      artifacts:
        paths:
          - "*.pkg.tar.xz*"
        expire_in: 1 day
      variables:
        PACKAGER: "Tomáš Pecka <peckato1@fit.cvut.cz>"
    
    
    package:archlinux::snapshot:
      <<: *release_snapshot
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .package:archlinux
    
    package:archlinux::stable:
      <<: *release_stable
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .package:archlinux
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    
      extends: .template:package
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      artifacts:
        paths:
    
          - "*.deb"
          - "*.ddeb"
          - "*.changes"
          - "*.buildinfo"
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        expire_in: 1 day
    
      variables:
        LOGNAME: "peckato1"
        DEBFULLNAME: "Tomáš Pecka"
        DEBEMAIL: "peckato1@fit.cvut.cz"
    
    # ---------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    
    .package:debian:buster:
      image: amd64/debian:buster
      extends: .package:debian
    
    .package:debian:bullseye:
      image: amd64/debian:bullseye
      extends: .package:debian
    
    package:debian:buster:snapshot:
      <<: *release_snapshot
      extends: .package:debian:buster
    
    package:debian:buster:stable:
      <<: *release_stable
      extends: .package:debian:buster
    
    package:debian:bullseye:snapshot:
      <<: *release_snapshot
      extends: .package:debian:bullseye
    
    package:debian:bullseye:stable:
      <<: *release_stable
      extends: .package:debian:bullseye
    
    # ---------------------------
    
    .package:ubuntu:bionic:
      image: ubuntu:bionic
      extends: .package:debian
    
    .package:ubuntu:cosmic:
      image: ubuntu:bionic
      extends: .package:debian
    
    .package:ubuntu:disco:
      image: ubuntu:bionic
      extends: .package:debian
    
    package:ubuntu:bionic:snapshot:
      <<: *release_snapshot
      extends: .package:ubuntu:bionic
    
    package:ubuntu:bionic:stable:
      <<: *release_stable
      extends: .package:ubuntu:bionic
    
    package:ubuntu:cosmic:snapshot:
      <<: *release_snapshot
      extends: .package:ubuntu:cosmic
    
    package:ubuntu:cosmic:stable:
      <<: *release_stable
      extends: .package:ubuntu:cosmic
    
    package:ubuntu:disco:snapshot:
      <<: *release_snapshot
      extends: .package:ubuntu:disco
    
    package:ubuntu:disco:stable:
      <<: *release_stable
      extends: .package:ubuntu:disco
    
    
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # release.yml
    
    .template:release:
      stage: release
      dependencies: []
      tags:
        - altvm
      script:
        - LINUX=$(echo "$CI_JOB_NAME" | cut -d":" -f2)
        - MODE=$(echo "$CI_JOB_NAME" | cut -d":" -f4)
        - export DISTRIBUTION=$(echo "$CI_JOB_NAME" | cut -d":" -f3)
        - if [[ $LINUX == "ubuntu" ]]; then LINUX="debian"; fi
        - extra/scripts/CD/packaging/package.sh $MODE $LINUX deploy .
    
    
    
    .release:docker:
    
      <<: *docker
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .template:release
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      environment:
        name: docker-nightly
        url: https://gitlab.fit.cvut.cz/algorithms-library-toolkit/automata-library/container_registry
    
    
    release:docker::snapshot:
      <<: *release_snapshot
      extends: .release:docker
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      dependencies:
    
    release:docker::stable:
      <<: *release_stable
      extends: .release:docker
      dependencies:
        - package:docker::stable
    
    
    
    .release:archlinux:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .template:release
      environment:
    
        name: archlinux
        url: https://repository.alt.pecka.me/archlinux/
    
    release:archlinux::snapshot:
      <<: *release_snapshot
      extends: .release:archlinux
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      dependencies:
    
        - package:archlinux::snapshot
    
    release:archlinux:release:
      <<: *release_stable
      extends: .release:archlinux
      dependencies:
        - package:archlinux::stable
    
    .release:debian:
      extends: .template:release
      environment:
        name: debian
        url: https://repository.alt.pecka.me/debian/
    
    release:debian:buster:snapshot:
      <<: *release_snapshot
      extends: .release:debian
      dependencies:
        - package:debian:buster:snapshot
    
    release:debian:buster:stable:
      <<: *release_stable
      extends: .release:debian
      dependencies:
        - package:debian:buster:stable
    
    release:debian:bullseye:snapshot:
      <<: *release_snapshot
      extends: .release:debian
      dependencies:
        - package:debian:bullseye:snapshot
    
    release:debian:bullseye:stable:
      <<: *release_stable
      extends: .release:debian
      dependencies:
        - package:debian:bullseye:stable
    
    release:ubuntu:bionic:snapshot:
      <<: *release_snapshot
      extends: .release:debian
      dependencies:
        - package:ubuntu:bionic:snapshot
    
    release:ubuntu:bionic:stable:
      <<: *release_stable
      extends: .release:debian
      dependencies:
        - package:ubuntu:bionic:stable
    
    release:ubuntu:cosmic:snapshot:
      <<: *release_snapshot
      extends: .release:debian
      dependencies:
        - package:ubuntu:cosmic:snapshot
    
    release:ubuntu:cosmic:stable:
      <<: *release_stable
      extends: .release:debian
      dependencies:
        - package:ubuntu:cosmic:stable
    
    release:ubuntu:disco:snapshot:
      <<: *release_snapshot
      extends: .release:debian
      dependencies:
        - package:ubuntu:disco:snapshot
    
    release:ubuntu:disco:stable:
      <<: *release_stable
      extends: .release:debian
      dependencies:
        - package:ubuntu:disco:stable
    
    
    .release:sources:
    
      extends: .template:release
      environment:
        name: sources
        url: https://repository.alt.pecka.me/sources/
    
    release:sources::snapshot:
      <<: *release_snapshot
    
      extends: .release:sources
      dependencies:
    
    release:sources::stable:
      <<: *release_stable
    
      extends: .release:sources
      dependencies:
    
    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
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    notify:pyalib:
      extends: .template:notify
      script:
    
        - curl -X POST -F token="$TOKEN_TRIGGER_PYALIB" -F ref=master https://gitlab.fit.cvut.cz/api/v4/projects/11497/trigger/pipeline
    
    notify:website:
      extends: .template:notify
      script:
        - curl -X POST -F token="$TOKEN_TRIGGER_WEBSITE" -F ref=master https://gitlab.fit.cvut.cz/api/v4/projects/15509/trigger/pipeline