From 40cfd8e32a88270d4537af1ef4cde9aeab82f436 Mon Sep 17 00:00:00 2001
From: Tomas Pecka <tomas.pecka@fit.cvut.cz>
Date: Sun, 7 Jul 2019 15:23:11 +0200
Subject: [PATCH] CI: Redesign

---
 .gitlab-ci.yml | 658 +++++++++++++++++++++++++++----------------------
 1 file changed, 360 insertions(+), 298 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a86bf2b771..d0d8aad735 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,301 +1,380 @@
 stages:
  - build
  - test
- - deploy
- - publish
+ - package
+ - release
+ - notify
 
-# #################################################################################################
-# runs
-.config:run:compatibility_only: &config_run_only_compatibility
-  only:
-    variables:
-     - $SCHEDULED_COMPATIBILITY
-
-.config:run:nightly_only: &config_run_only_nightly
-  only:
-    variables:
-     - $SCHEDULED_NIGHTLY
 
-.config:run:nightly_except: &config_run_except_nightly
-  except:
-    variables:
-     - $SCHEDULED_NIGHTLY
+#######################################################################################################################
+#######################################################################################################################
+#######################################################################################################################
+# build + test
 
-.config:run:release_tag: &config_run_only_release
-  only:
-    - /^v.*$/
-  except:
-    - branches
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# distro.yml
 
-# #################################################################################################
-# distro builds and tests config
-.config: &config_buildbase
-  <<: *config_run_except_nightly
+.template:build:
+  dependencies: []
+  stage: build
+  script:
+    - mkdir -p build && cd build
+    - ../CMake/generate.py -wm
+    - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
+    - ninja -j $(grep -c processor /proc/cpuinfo)
+  artifacts:
+    paths:
+      - build/
+    expire_in: 1 day
 
-.config:builder: &config_builder
-  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
-  <<: *config_buildbase
+.template:test:
+  dependencies: []
+  stage: test
+  script:
+    - cd build
+    - ctest . --output-on-failure -j $(grep -c processor /proc/cpuinfo)
 
-.config:arch: &config_arch
-  image: archlinux/base
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# distro_alpine.yml
 
-.config:alpine: &config_alpine
+.config:alpine: &distro_alpine
   image: alpine:3.9
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
-
-.config:debian-testing: &config_debiantesting
-  image: amd64/debian:testing-slim
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
+  only:
+    - merge_requests
 
-.config:debian-testing:clang: &config_debiantesting_clang
-  image: amd64/debian:testing-slim
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
+# -----------------------------------------------------------------------------
 
-.config:debian-stable: &config_debianstable
-  image: amd64/debian:stable-slim
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
+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
 
-.config:opensuse-leap: &config_opensuseleap
-  image: opensuse/leap:latest
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
+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
 
-.config:ubuntu-lts: &config_ubuntults
-  image: ubuntu:latest
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# distro_arch.yml
 
-.config:ubuntu-rolling: &config_ubunturolling
-  image: ubuntu:rolling
-  <<: *config_buildbase
-  <<: *config_run_only_compatibility
+.config:archlinux: &distro_archlinux
+  image: archlinux/base
+  only:
+    - merge_requests
 
-# #################################################################################################
-# stage: build
+# -----------------------------------------------------------------------------
 
-# -----------------------------------------------
-# static tests
+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
 
-.static: &static_template
-  <<: *config_run_except_nightly
-  stage: build
-  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
+test:archlinux:
+  <<: *distro_archlinux
+  extends: .template:test
+  dependencies:
+    - build:archlinux
   before_script:
-    - mkdir -p release && pushd release
-    - ../CMake/generate.py -wm
-    - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
-    - popd
-  allow_failure: true
+    - 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
 
-static:cppcheck:
-  <<: *static_template
-  script:
-    - cppcheck -q --enable=all --project=release/compile_commands.json --suppress="*:*/contrib/*" --error-exitcode=1
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# distro_builder.yml
 
-static:clang-tidy:
-  <<: *static_template
-  script:
-    - jq ".[].file" release/compile_commands.json | tr -d "\"" | grep -v "test-src" | xargs -n1 -P$(grep -c processor /proc/cpuinfo) clang-tidy-8 -p release/
+.config:builder: &distro_builder
+  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/alt-builder:latest
+  except:
+    - tags
 
-# -----------------------------------------------
-# build
+.build:builder:
+  <<: *distro_builder
+  extends: .template:build
 
-.build: &template_build
-  stage: build
-  script:
-    - mkdir -p release && cd release
-    - ../CMake/generate.py -wm
-    - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
-    - ninja -j $(grep -c processor /proc/cpuinfo)
-  artifacts:
-    paths:
-      - release/
-    expire_in: 1 day
+.test:builder:
+  <<: *distro_builder
+  extends: .template:test
+
+# -----------------------------------------------------------------------------
 
 build:builder:gcc:
-  <<: *config_builder
-  <<: *template_build
+  extends: .build:builder
 
 build:builder:clang:
-  <<: *config_builder
-  <<: *template_build
+  extends: .build:builder
   variables:
     CXX: clang++-8
 
-build:arch:
-  <<: *config_arch
-  <<: *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
+test:builder:gcc:
+  extends: .test:builder
+  dependencies:
+    - build:builder:gcc
 
-build:alpine:
-  <<: *config_alpine
-  <<: *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: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
 
-#build:debian:stable:
-#  <<: *config_debianstable
-#  <<: *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
+# -----------------------------------------------------------------------------
 
-build:debian:testing:
-  <<: *config_debiantesting
-  <<: *template_build
+build:debian:
+  <<: *distro_debian
+  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
+    - 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
 
-build:debian:testing:clang:
-  <<: *config_debiantesting_clang
-  <<: *template_build
+test:debian:
+  <<: *distro_debian
+  extends: .template:test
+  dependencies:
+    - build:debian
   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 ninja-build
-    - apt-get install -y clang-7 lld
-  variables:
-    CXX: clang++-7
+    - apt-get update
+    - apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
+
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# distro_opensuse.yml
 
-build:opensuse-leap:
-  <<: *config_opensuseleap
-  <<: *template_build
+.config:opensuse:leap: &distro_opensuse-leap
+  image: opensuse/leap:latest
+  only:
+    - merge_requests
+
+# -----------------------------------------------------------------------------
+
+build:opensuse:leap:
+  <<: *distro_opensuse-leap
+  extends: .template:build
   before_script:
     - zypper -n install python3 cmake gcc-c++ bash ninja libxml2-devel tclap readline-devel libQt5Widgets-devel libQt5Xml-devel graphviz-devel jsoncpp-devel
 
+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
+
+# -----------------------------------------------------------------------------
+
 build:ubuntu:lts:
-  <<: *config_ubuntults
-  <<: *template_build
+  <<: *distro_ubuntu-lts
+  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
+    - 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
+
+# -----------------------------------------------------------------------------
 
 build:ubuntu:rolling:
-  <<: *config_ubunturolling
-  <<: *template_build
+  <<: *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
   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
+    - apt-get update
+    - apt-get install -y build-essential bash cmake libxml2 libreadline8 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
+  dependencies:
+    - build:ubuntu:rolling
 
-# -----------------------------------------------
 
-build:doc:
-  <<: *config_run_except_nightly
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# doc.yml
+
+doc:doc:
   image: alpine:3.9
   stage: build
   before_script:
     - apk add --no-cache doxygen graphviz
   script:
     - doxygen
-  allow_failure: true
   artifacts:
     name: docs
     paths:
       - doc/
     expire_in: 1 day
 
-# #################################################################################################
-# stage: test
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# static-analysis.yml
 
-# -----------------------------------------------
-# smoke tests
+.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
 
-.test: &template_test
-  stage: test
+# -----------------------------------------------------------------------------
+
+static-analysis:cppcheck:
+  extends: .template:static-analysis
   script:
-    - cd release
-    - ctest . --output-on-failure -j $(grep -c processor /proc/cpuinfo)
+    - cppcheck -q --enable=all --project=build/compile_commands.json --suppress="*:*/contrib/*" --error-exitcode=1
 
-test:builder:gcc:
-  <<: *config_builder
-  <<: *template_test
-  dependencies:
-    - build:builder:gcc
 
-test:builder:clang:
-  <<: *config_builder
-  <<: *template_test
-  dependencies:
-    - build:builder:clang
+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/
 
-test:arch:
-  <<: *config_arch
-  <<: *template_test
-  dependencies:
-    - build:arch
-  before_script:
-    - 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
 
-test:alpine:
-  <<: *config_alpine
-  <<: *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
+#######################################################################################################################
+#######################################################################################################################
+#######################################################################################################################
+# package + release
 
-#test:debian:stable:
-#  <<: *config_debianstable_test
-#  <<: *template_test
-#  dependencies:
-#   - build:debian:stable
-#  before_script:
-#   - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
-
-test:debian:testing:
-  <<: *config_debiantesting
-  <<: *template_test
-  dependencies:
-    - build:debian:testing
-  before_script:
-    - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# release.yml
 
-test:debian:testing:clang:
-  <<: *config_debiantesting_clang
-  <<: *template_test
-  dependencies:
-    - build:debian:testing:clang
-  before_script:
-    - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
+.template:only:nightly: &release_nightly
+  only:
+    refs:
+      - master
+
+.template:only:tag: &release_tag
+  only:
+    - tags
+    - /^v.*$/
+
+# -----------------------------------------------------------------------------
+
+.template:package:
+  stage: package
+  dependencies: []
+
+.template:release:
+  stage: release
+  dependencies: []
+
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# release_archlinux.yml
+
+.package:arch:
+  extends: .template:package
+  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/archlinux-makepkg
+  script:
+    - pacman -Suy --noconfirm --needed base-devel gnupg
+    - echo "$GPG_PRIVATE_KEY" | sudo -u builder -- gpg --no-tty --batch --import -
+    - KEYGRIP=$(sudo -u builder -- gpg --with-keygrip -k $GPG_KEYID | grep Keygrip | cut -d= -f2 | tr -d ' ')
+    - sudo -u builder -- /usr/lib/gnupg/gpg-preset-passphrase --preset --passphrase "$GPG_PASSPHRASE" "$KEYGRIP"
+    - sudo -u builder -- makepkg --syncdeps --noconfirm --sign --key $GPG_KEYID
+  artifacts:
+    paths:
+      - "*.pkg.tar.xz*"
+    expire_in: 1 day
+  variables:
+    PACKAGER: "Tomáš Pecka <peckato1@fit.cvut.cz>"
+
+.release:arch:
+  extends: .template:release
+  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/archlinux-makepkg
 
-test:opensuse-leap:
-  <<: *config_opensuseleap
-  <<: *template_test
-  dependencies:
-    - build:opensuse-leap
   before_script:
-    - zypper -n install bash cmake libxml2 readline libQt5Widgets5 libQt5Xml5 graphviz libjsoncpp19
+    - pacman -Suy --noconfirm --needed openssh
+    - mkdir -p ~/.ssh && echo "$SSH_PRIV_KEY" > ~/.ssh/id_rsa && chmod 700 -R ~/.ssh
+    - eval $(ssh-agent -s)
+    - echo "$SSH_PASSPHRASE" | ssh-add ~/.ssh/id_rsa
+  script:
+    - scp -o StrictHostKeyChecking=no *.pkg.tar.xz* altrepo@pecka.me:~altrepo/tmp/
+    - ssh -o StrictHostKeyChecking=no altrepo@pecka.me add-packages arch "$GPG_KEYID" "$GPG_PASSPHRASE" *.pkg.tar.xz
 
-test:ubuntu:lts:
-  <<: *config_ubuntults
-  <<: *template_test
-  dependencies:
-    - build:ubuntu:lts
+# -----------------------------------------------------------------------------
+
+package:nightly:arch:
+  <<: *release_nightly
+  extends: .package:arch
   before_script:
-    - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
+    - cd extra/distro/arch/nightly/
 
-test:ubuntu:rolling:
-  <<: *config_ubunturolling
-  <<: *template_test
+package:tag:arch:
+  <<: *release_tag
+  extends: .package:arch
   before_script:
-    - apt-get update && apt-get install -y build-essential bash cmake libxml2 libreadline8 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
+    - cd extra/distro/arch/release/
+
+# -----------------------------------------------------------------------------
+
+release:nightly:arch:
+  <<: *release_nightly
+  extends: .release:arch
+  environment:
+    name: arch-nightly
+    url: https://altrepo.pecka.me/archlinux/algorithms-library/x86_64/
   dependencies:
-    - build:ubuntu:rolling
+    - package:nightly:arch
 
-# #################################################################################################
-# stage: deploy
+release:tag:arch:
+  <<: *release_tag
+  extends: .release:arch
+  environment:
+    name: arch-release
+    url: https://altrepo.pecka.me/archlinux/algorithms-library/x86_64/
+  dependencies:
+    - package:tag:arch
 
-# -----------------------------------------------
-# docker images
 
-.docker: &docker_template
-  stage: deploy
+# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+# release_docker.yml
+.package:docker:
+  extends: .template:package
   image: alpine:3.9
   cache: {}  # disable
+  services:
+    - docker:dind
   variables:
     DOCKER_DRIVER: overlay2
     DOCKER_HOST: docker
@@ -306,21 +385,17 @@ test:ubuntu:rolling:
     TAG_NIGHTLY: nightly
     TAG_RELEASE: $CI_COMMIT_REF_NAME
     TAG_LATEST:  latest
-  services:
-    - docker:dind
   before_script:
-    - apk add --no-cache docker curl
+    - apk add --no-cache docker
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
     - docker info
-  after_script:
-    - curl -X POST -F token="$PY_ALIB_TOKEN" -F ref=master https://gitlab.fit.cvut.cz/api/v4/projects/11497/trigger/pipeline
   dependencies: []
 
-deploy:docker:nightly: &docker_nightly_template
-  <<: *docker_template
-  <<: *config_run_only_nightly
-  environment:
-    name: docker-nightly
+# -----------------------------------------------------------------------------
+
+package:nightly:docker:
+  <<: *release_nightly
+  extends: .package:docker
   script:
     - docker build --target=deploy-cli -f extra/docker/Dockerfile.master -t "$IMAGE_CLI:$TAG_NIGHTLY" .
     - docker build --target=deploy-all -f extra/docker/Dockerfile.master -t "$IMAGE_ALL:$TAG_NIGHTLY" .
@@ -328,93 +403,80 @@ deploy:docker:nightly: &docker_nightly_template
     - docker run "$IMAGE_CLI:$TAG_NIGHTLY" /usr/bin/aql2 --help
     - docker run "$IMAGE_GUI:$TAG_NIGHTLY" /usr/bin/aql2 --help
     - docker run "$IMAGE_ALL:$TAG_NIGHTLY" /usr/bin/aql2 --help
-    - docker push "$IMAGE_CLI:$TAG_NIGHTLY"
-    - docker push "$IMAGE_GUI:$TAG_NIGHTLY"
-    - docker push "$IMAGE_ALL:$TAG_NIGHTLY"
+    - docker save -o images.tar "$IMAGE_CLI:$TAG_NIGHTLY" "$IMAGE_GUI:$TAG_NIGHTLY" "$IMAGE_ALL:$TAG_NIGHTLY"
+  artifacts:
+    paths:
+      - images.tar
+    expire_in: 1 day
 
-deploy:docker:release:
-  <<: *docker_template
-  <<: *config_run_only_release
-  environment:
-    name: docker-production
+package:tag:docker:
+  <<: *release_tag
+  extends: .package:docker
   script:
-    - docker build -f extra/docker/Dockerfile.master     -t "$IMAGE_ALL:$TAG_RELEASE" -t "$IMAGE_ALL:$TAG_LATEST" .
-    - docker build -f extra/docker/Dockerfile.master-cli -t "$IMAGE_CLI:$TAG_RELEASE" -t "$IMAGE_CLI:$TAG_LATEST" .
+    - docker build --target=deploy-cli -f extra/docker/Dockerfile.master -t "$IMAGE_CLI:$TAG_NIGHTLY" .
+    - docker build --target=deploy-all -f extra/docker/Dockerfile.master -t "$IMAGE_ALL:$TAG_NIGHTLY" .
     - docker tag "$IMAGE_ALL:$TAG_RELEASE" "$IMAGE_GUI:$TAG_RELEASE" # gui-version is now only a symlink to all-version
     - docker tag "$IMAGE_ALL:$TAG_LATEST"  "$IMAGE_GUI:$TAG_LATEST"  # gui-version is now only a symlink to all-version
     - docker run "$IMAGE_ALL:$TAG_RELEASE" /usr/bin/aql2 --help
     - docker run "$IMAGE_CLI:$TAG_RELEASE" /usr/bin/aql2 --help
     - docker run "$IMAGE_GUI:$TAG_RELEASE" /usr/bin/aql2 --help
-    - docker push "$IMAGE_ALL:$TAG_LATEST"
-    - docker push "$IMAGE_CLI:$TAG_LATEST"
-    - docker push "$IMAGE_GUI:$TAG_LATEST"
-    - docker push "$IMAGE_ALL:$TAG_RELEASE"
-    - docker push "$IMAGE_CLI:$TAG_RELEASE"
-    - docker push "$IMAGE_GUI:$TAG_RELEASE"
+    - docker save -o images.tar "$IMAGE_CLI:$TAG_RELEASE" "$IMAGE_GUI:$TAG_RELEASE" "$IMAGE_ALL:$TAG_RELEASE"
+  artifacts:
+    paths:
+      - images.tar
+    expire_in: 1 day
 
-# -----------------------------------------------
-# create distro packages
-# GPG_PRIVATE_KEY and GPG_PASSPHRASE are secret variables in the ALT group. Secret vars can be used only in protected branches
-# GPG_PUBLIC_KEY and GPG_KEYID (fingerprint) are public variables in the ALT group
+# -----------------------------------------------------------------------------
 
-.deploy:package:arch: &packaging_arch
-  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/archlinux-makepkg
-  stage: deploy
+release:nightly:docker:
+  <<: *release_nightly
+  extends: .template:release
+  environment:
+    name: docker-nightly
+    url: https://gitlab.fit.cvut.cz/algorithms-library-toolkit/automata-library/container_registry
   script:
-    - pacman -Suy --noconfirm --needed base-devel gnupg
-    - echo "$GPG_PRIVATE_KEY" | sudo -u builder -- gpg --no-tty --batch --import -
-    - KEYGRIP=$(sudo -u builder -- gpg --with-keygrip -k $GPG_KEYID | grep Keygrip | cut -d= -f2 | tr -d ' ')
-    - sudo -u builder -- /usr/lib/gnupg/gpg-preset-passphrase --preset --passphrase "$GPG_PASSPHRASE" "$KEYGRIP"
-    - sudo -u builder -- makepkg --syncdeps --noconfirm --sign --key $GPG_KEYID
-  artifacts:
-    paths:
-      - "*.pkg.tar.xz*"
-    expire_in: 2 days
-  variables:
-    PACKAGER: "Tomáš Pecka <peckato1@fit.cvut.cz>"
+    - docker load -i images.tar
+    - docker push "$IMAGE_CLI:$TAG_NIGHTLY"
+    - docker push "$IMAGE_GUI:$TAG_NIGHTLY"
+    - docker push "$IMAGE_ALL:$TAG_NIGHTLY"
+  dependencies:
+    - package:nightly:docker
 
-deploy:package:nightly:arch:
-  <<: *packaging_arch
-  <<: *config_run_only_nightly
-  before_script:
-    - cp extra/distro/arch/nightly/PKGBUILD .
+release:tag:docker:
+  <<: *release_tag
+  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 "$IMAGE_CLI:$TAG_RELEASE"
+    - docker push "$IMAGE_GUI:$TAG_RELEASE"
+    - docker push "$IMAGE_ALL:$TAG_RELEASE"
+  dependencies:
+    - package:tag:docker
 
-deploy:package:release:arch:
-  <<: *packaging_arch
-  <<: *config_run_only_release
-  before_script:
-    - cp extra/distro/arch/release/PKGBUILD .
 
-# -----------------------------------------------
 
-.publish: &publish
-  stage: publish
-  when: always
 
-.publish:arch: &publish_arch
-  <<: *publish
-  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/archlinux-makepkg
-  environment:
-    name: package-arch-nightly
-    url: https://altrepo.pecka.me/archlinux/algorithms-library/x86_64/
+#######################################################################################################################
+#######################################################################################################################
+#######################################################################################################################
+# notify
 
+.template:notify:
+  stage: notify
+  image: alpine:3.9
   before_script:
-    - pacman -Suy --noconfirm --needed openssh
-    - mkdir -p ~/.ssh && echo "$SSH_PRIV_KEY" > ~/.ssh/id_rsa && chmod 700 -R ~/.ssh
-    - eval $(ssh-agent -s)
-    - echo "$SSH_PASSPHRASE" | ssh-add ~/.ssh/id_rsa
-  script:
-    - scp -o StrictHostKeyChecking=no *.pkg.tar.xz* altrepo@pecka.me:~altrepo/tmp/
-    - ssh -o StrictHostKeyChecking=no altrepo@pecka.me add-packages arch "$GPG_KEYID" "$GPG_PASSPHRASE" *.pkg.tar.xz
+    - apk add --no-cache curl
+  dependencies: []
 
-publish:nightly:arch:
-  <<: *publish_arch
-  <<: *config_run_only_nightly
-  dependencies:
-    - deploy:package:nightly:arch
+# -----------------------------------------------------------------------------
 
-publish:release:arch:
-  <<: *publish_arch
-  <<: *config_run_only_release
-  dependencies:
-    - deploy:package:release:arch
+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
-- 
GitLab