Skip to content
Snippets Groups Projects
.gitlab-ci.yml 13.8 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
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .template:only:nightly: &release_nightly
      only:
        refs:
          - master
    
    .template:only:tag: &release_tag
      only:
        - tags
        - /^v.*$/
    
    .template:package:
      stage: package
      dependencies: []
    
      script:
        - DISTRO=$(echo "$CI_JOB_NAME" | cut -d":" -f2)
        - MODE=$(echo "$CI_JOB_NAME" | cut -d":" -f3)
        - extra/scripts/CD/packaging/package.sh $MODE $DISTRO .
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    .template:release:
      stage: release
      dependencies: []
    
    
    .releaser:
      extends: .template:release
      before_script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apk add --no-cache curl tar
        - DISTRO=$(echo "$CI_JOB_NAME" | cut -d":" -f2)
        - MODE=$(echo "$CI_JOB_NAME" | cut -d":" -f3)
        - URL="$REPOMGR/upload/$DISTRO/$MODE"
        - if [[ $DISTRO != "sources" ]]; then URL="$URL/x86_64"; fi
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - tar cvf archive.tar $RELEASER_WILDCARD_UPLOAD
        - curl --fail --w "%{http_code}\n\n" -s --show-error -X POST -F "data=@archive.tar" $URL
    
    
    # -----------------------------------------------------------------------------
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # release_archlinux.yml
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .package:archlinux:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .template:package
    
      image: archlinux/base:latest
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      artifacts:
        paths:
          - "*.pkg.tar.xz*"
        expire_in: 1 day
      variables:
    
        MAKEFLAGS: "-j3"
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        PACKAGER: "Tomáš Pecka <peckato1@fit.cvut.cz>"
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    package:archlinux:nightly:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .package:archlinux
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    package:archlinux:release:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_tag
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .package:archlinux
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    .release:archlinux:
    
      extends: .releaser
      variables:
        RELEASER_WILDCARD_UPLOAD: "*.pkg.tar.xz*"
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    release:archlinux:nightly:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .release:archlinux
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      environment:
        name: arch-nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        url: https://repository.alt.pecka.me/archlinux/nightly/x86_64/
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - package:archlinux:nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    release:archlinux:release:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_tag
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .release:archlinux
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      environment:
        name: arch-release
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        url: https://repository.alt.pecka.me/archlinux/release/x86_64/
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      dependencies:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - package:archlinux:release
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # release_docker.yml
    
    
    .package:docker: &docker
      extends: .template:package
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      services:
        - docker:dind
    
      variables:
        DOCKER_DRIVER: overlay2
        DOCKER_HOST: docker
      before_script:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - apk add --no-cache docker
    
        - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    
        - docker info
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      artifacts:
        paths:
          - images.tar
        expire_in: 1 day
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    package:docker:nightly:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_nightly
    
      <<: *docker
    
      extends: .package:docker
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    package:docker:release:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_tag
    
      <<: *docker
    
      extends: .package:docker
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    # -----------------------------------------------------------------------------
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    release:docker:nightly:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_nightly
    
      <<: *docker
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .template:release
      environment:
        name: docker-nightly
        url: https://gitlab.fit.cvut.cz/algorithms-library-toolkit/automata-library/container_registry
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - docker load -i images.tar
    
        - docker push $CI_REGISTRY_IMAGE/cli:nightly
        - docker push $CI_REGISTRY_IMAGE/gui:nightly
        - docker push $CI_REGISTRY_IMAGE:nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      dependencies:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - package:docker:nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    release:docker:release:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      <<: *release_tag
    
      <<: *docker
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      extends: .template:release
      environment:
        name: docker-release
        url: https://gitlab.fit.cvut.cz/algorithms-library-toolkit/automata-library/container_registry
      script:
        - docker load -i images.tar
    
        - docker push $CI_REGISTRY_IMAGE/cli:latest
        - docker push $CI_REGISTRY_IMAGE/gui:latest
        - docker push $CI_REGISTRY_IMAGE:latest
        - docker push $CI_REGISTRY_IMAGE/cli:$CI_COMMIT_REF_NAME
        - docker push $CI_REGISTRY_IMAGE/gui:$CI_COMMIT_REF_NAME
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
      dependencies:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - package:docker:release
    
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    # release_sources.yml
    
    .package:sources:
      extends: .template:package
      artifacts:
        paths:
          - "*.tar.gz*"
        expire_in: 1 day
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    package:sources:nightly:
    
      <<: *release_nightly
      extends: .package:sources
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    package:sources:release:
    
      <<: *release_tag
      extends: .package:sources
    
    # -----------------------------------------------------------------------------
    
    .release:sources:
      extends: .releaser
      variables:
        RELEASER_WILDCARD_UPLOAD: "*.tar.gz*"
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    release:sources:nightly:
    
      <<: *release_nightly
      extends: .release:sources
      environment:
        name: sources-nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        url: https://repository.alt.pecka.me/sources/nightly/
    
      dependencies:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - package:sources:nightly
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    release:sources:release:
    
      <<: *release_tag
      extends: .release:sources
      environment:
        name: sources-release
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        url: https://repository.alt.pecka.me/sources/release/
    
      dependencies:
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
        - package:sources:release
    
    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="$PY_ALIB_TOKEN" -F ref=master https://gitlab.fit.cvut.cz/api/v4/projects/11497/trigger/pipeline
      only:
        refs:
          - master