From 8d5da5cfca4a075aec8681395fc61363497c12de Mon Sep 17 00:00:00 2001
From: Bogdan Dobrelya <bdobrelia@mirantis.com>
Date: Tue, 20 Dec 2016 11:03:06 +0100
Subject: [PATCH] Add gitlab CI auto builds for triggers

Signed-off-by: Bogdan Dobrelya <bdobrelia@mirantis.com>
---
 .gitlab-ci.yml        | 210 +++++++++++++++++++++++++++++++-----------
 docs/test_cases.md    |  23 +++--
 scripts/gen_matrix.sh |  10 +-
 3 files changed, 174 insertions(+), 69 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 86793ee38..94d0ed2b9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -47,7 +47,6 @@ before_script:
   GS_ACCESS_KEY_ID: $GS_KEY
   GS_SECRET_ACCESS_KEY: $GS_SECRET
   ANSIBLE_KEEP_REMOTE_FILES: "1"
-  CLUSTER_MODE: default
   BOOTSTRAP_OS: none
   LOG_LEVEL: "-vv"
 
@@ -129,33 +128,127 @@ before_script:
       -e inventory_path=${PWD}/inventory/inventory.ini
       -e cloud_region=${CLOUD_REGION}
 
+# Test matrix. Leave the comments for markup scripts.
+.coreos_calico_sep_variables: &coreos_calico_sep_variables
+# stage: deploy-gce-part1
+  KUBE_NETWORK_PLUGIN: calico
+  CLOUD_IMAGE: coreos-stable
+  CLOUD_REGION: us-west1-b
+  CLUSTER_MODE: separated
+  BOOTSTRAP_OS: coreos
+
+.debian8_canal_ha_variables: &debian8_canal_ha_variables
+# stage: deploy-gce-part1
+  KUBE_NETWORK_PLUGIN: canal
+  CLOUD_IMAGE: debian-8-kubespray
+  CLOUD_REGION: us-east1-b
+  CLUSTER_MODE: ha
+
+.rhel7_weave_variables: &rhel7_weave_variables
+# stage: deploy-gce-part1
+  KUBE_NETWORK_PLUGIN: weave
+  CLOUD_IMAGE: rhel-7
+  CLOUD_REGION: europe-west1-b
+  CLUSTER_MODE: default
+
+.centos7_flannel_variables: &centos7_flannel_variables
+# stage: deploy-gce-part2
+  KUBE_NETWORK_PLUGIN: flannel
+  CLOUD_IMAGE: centos-7
+  CLOUD_REGION: us-west1-a
+  CLUSTER_MODE: default
+
+.debian8_calico_variables: &debian8_calico_variables
+# stage: deploy-gce-part2
+  KUBE_NETWORK_PLUGIN: calico
+  CLOUD_IMAGE: debian-8-kubespray
+  CLOUD_REGION: us-central1-b
+  CLUSTER_MODE: default
+
+.coreos_canal_variables: &coreos_canal_variables
+# stage: deploy-gce-part2
+  KUBE_NETWORK_PLUGIN: canal
+  CLOUD_IMAGE: coreos-stable
+  CLOUD_REGION: us-east1-b
+  CLUSTER_MODE: default
+  BOOTSTRAP_OS: coreos
+
+.rhel7_canal_sep_variables: &rhel7_canal_sep_variables
+# stage: deploy-gce-special
+  KUBE_NETWORK_PLUGIN: canal
+  CLOUD_IMAGE: rhel-7
+  CLOUD_REGION: us-east1-b
+  CLUSTER_MODE: separated
+
+.ubuntu_weave_sep_variables: &ubuntu_weave_sep_variables
+# stage: deploy-gce-special
+  KUBE_NETWORK_PLUGIN: weave
+  CLOUD_IMAGE: ubuntu-1604-xenial
+  CLOUD_REGION: us-central1-b
+  CLUSTER_MODE: separated
+
+.centos7_calico_ha_variables: &centos7_calico_ha_variables
+# stage: deploy-gce-special
+  KUBE_NETWORK_PLUGIN: calico
+  CLOUD_IMAGE: centos-7
+  CLOUD_REGION: europe-west1-b
+  CLUSTER_MODE: ha
+
+# Builds for PRs only (auto)
 coreos-calico-sep:
   stage: deploy-gce-part1
   <<: *job
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: calico
-    CLOUD_IMAGE: coreos-stable
-    CLOUD_REGION: us-west1-b
-    CLUSTER_MODE: separated
-    BOOTSTRAP_OS: coreos
+    <<: *coreos_calico_sep_variables
   when: on_success
   except: ['triggers']
   only: [/^pr-.*$/]
 
+centos7-flannel:
+  stage: deploy-gce-part2
+  <<: *job
+  <<: *gce
+  variables:
+    <<: *gce_variables
+    <<: *centos7_flannel_variables
+  when: on_success
+  except: ['triggers']
+  only: [/^pr-.*$/]
+
+ubuntu-weave-sep:
+  stage: deploy-gce-special
+  <<: *job
+  <<: *gce
+  variables:
+    <<: *gce_variables
+    <<: *ubuntu_weave_sep_variables
+  when: on_success
+  except: ['triggers']
+  only: [/^pr-.*$/]
+
+# More builds for PRs/merges (manual) and triggers (auto)
 debian8-canal-ha:
   stage: deploy-gce-part1
   <<: *job
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: canal
-    CLOUD_IMAGE: debian-8-kubespray
-    CLOUD_REGION: us-east1-b
-    CLUSTER_MODE: ha
+    <<: *debian8_canal_ha_variables
   when: manual
-  only: ['master', /^pr-.*$/, 'triggers']
+  except: ['triggers']
+  only: ['master', /^pr-.*$/]
+
+debian8-canal-ha-triggers:
+  stage: deploy-gce-part1
+  <<: *job
+  <<: *gce
+  variables:
+    <<: *gce_variables
+    <<: *debian8_canal_ha_variables
+  when: on_success
+  only: ['triggers']
 
 rhel7-weave:
   stage: deploy-gce-part1
@@ -163,26 +256,20 @@ rhel7-weave:
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: weave
-    CLOUD_IMAGE: rhel-7
-    CLOUD_REGION: europe-west1-b
-    CLUSTER_MODE: default
+    <<: *rhel7_weave_variables
   when: manual
-  only: ['master', /^pr-.*$/, 'triggers']
+  except: ['triggers']
+  only: ['master', /^pr-.*$/]
 
-centos7-flannel:
-  stage: deploy-gce-part2
+rhel7-weave-triggers:
+  stage: deploy-gce-part1
   <<: *job
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: flannel
-    CLOUD_IMAGE: centos-7
-    CLOUD_REGION: us-west1-a
-    CLUSTER_MODE: default
+    <<: *rhel7_weave_variables
   when: on_success
-  except: ['triggers']
-  only: [/^pr-.*$/]
+  only: ['triggers']
 
 debian8-calico:
   stage: deploy-gce-part2
@@ -190,12 +277,20 @@ debian8-calico:
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: calico
-    CLOUD_IMAGE: debian-8-kubespray
-    CLOUD_REGION: us-central1-b
-    CLUSTER_MODE: default
+    <<: *debian8_calico_variables
   when: manual
-  only: ['master', /^pr-.*$/, 'triggers']
+  except: ['triggers']
+  only: ['master', /^pr-.*$/]
+
+debian8-calico-triggers:
+  stage: deploy-gce-part2
+  <<: *job
+  <<: *gce
+  variables:
+    <<: *gce_variables
+    <<: *debian8_calico_variables
+  when: on_success
+  only: ['triggers']
 
 coreos-canal:
   stage: deploy-gce-part2
@@ -203,13 +298,20 @@ coreos-canal:
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: canal
-    CLOUD_IMAGE: coreos-stable
-    CLOUD_REGION: us-east1-b
-    CLUSTER_MODE: default
-    BOOTSTRAP_OS: coreos
+    <<: *coreos_canal_variables
   when: manual
-  only: ['master', /^pr-.*$/, 'triggers']
+  except: ['triggers']
+  only: ['master', /^pr-.*$/]
+
+coreos-canal-triggers:
+  stage: deploy-gce-part2
+  <<: *job
+  <<: *gce
+  variables:
+    <<: *gce_variables
+    <<: *coreos_canal_variables
+  when: on_success
+  only: ['triggers']
 
 rhel7-canal-sep:
   stage: deploy-gce-special
@@ -217,26 +319,20 @@ rhel7-canal-sep:
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: canal
-    CLOUD_IMAGE: rhel-7
-    CLOUD_REGION: us-east1-b
-    CLUSTER_MODE: separated
+    <<: *rhel7_canal_sep_variables
   when: manual
-  only: ['master', /^pr-.*$/, 'triggers']
+  except: ['triggers']
+  only: ['master', /^pr-.*$/,]
 
-ubuntu-weave-sep:
+rhel7-canal-sep-triggers:
   stage: deploy-gce-special
   <<: *job
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: weave
-    CLOUD_IMAGE: ubuntu-1604-xenial
-    CLOUD_REGION: us-central1-b
-    CLUSTER_MODE: separated
+    <<: *rhel7_canal_sep_variables
   when: on_success
-  except: ['triggers']
-  only: [/^pr-.*$/]
+  only: ['triggers']
 
 centos7-calico-ha:
   stage: deploy-gce-special
@@ -244,12 +340,22 @@ centos7-calico-ha:
   <<: *gce
   variables:
     <<: *gce_variables
-    KUBE_NETWORK_PLUGIN: calico
-    CLOUD_IMAGE: centos-7
-    CLOUD_REGION: europe-west1-b
-    CLUSTER_MODE: ha
+    <<: *centos7_calico_ha_variables
   when: manual
-  only: ['master', /^pr-.*$/, 'triggers']
+  except: ['triggers']
+  only: ['master', /^pr-.*$/]
+
+centos7-calico-ha-triggers:
+  stage: deploy-gce-special
+  <<: *job
+  <<: *gce
+  variables:
+    <<: *gce_variables
+    <<: *centos7_calico_ha_variables
+  when: on_success
+  only: ['triggers']
+
+#TODO(bogdando) add coreos-weave and *triggers
 
 syntax-check:
   <<: *job
diff --git a/docs/test_cases.md b/docs/test_cases.md
index 8b6dbea21..52175418c 100644
--- a/docs/test_cases.md
+++ b/docs/test_cases.md
@@ -38,17 +38,16 @@ Gitlab CI test matrix
 GCE instances
 -------------
 
-|             Stage|    Network plugin|           OS type|        GCE region|      Nodes layout|              When|
-|------------------|------------------|------------------|------------------|------------------|------------------|
-|             part1|            calico|     coreos-stable|        us-west1-b|         separated|        on_success|
-|             part1|             canal|debian-8-kubespray|        us-east1-b|                ha|            manual|
-|             part1|             weave|            rhel-7|    europe-west1-b|           default|            manual|
-|             part2|           flannel|          centos-7|        us-west1-a|           default|        on_success|
-|             part2|            calico|debian-8-kubespray|     us-central1-b|           default|            manual|
-|             part2|             canal|     coreos-stable|        us-east1-b|           default|            manual|
-|           special|             canal|            rhel-7|        us-east1-b|         separated|            manual|
-|           special|             weave|ubuntu-1604-xenial|     us-central1-b|         separated|        on_success|
-|           special|            calico|          centos-7|    europe-west1-b|                ha|            manual|
+|               Stage|      Network plugin|             OS type|          GCE region|        Nodes layout
+|--------------------|--------------------|--------------------|--------------------|--------------------|
+|               part1|              calico|       coreos-stable|          us-west1-b|           separated|
+|               part1|               canal|  debian-8-kubespray|          us-east1-b|                  ha|
+|               part1|               weave|              rhel-7|      europe-west1-b|             default|
+|               part2|             flannel|            centos-7|          us-west1-a|             default|
+|               part2|              calico|  debian-8-kubespray|       us-central1-b|             default|
+|               part2|               canal|       coreos-stable|          us-east1-b|             default|
+|             special|               canal|              rhel-7|          us-east1-b|           separated|
+|             special|               weave|  ubuntu-1604-xenial|       us-central1-b|           separated|
+|             special|              calico|            centos-7|      europe-west1-b|                  ha|
 
 The "Stage" means a build step of the build pipeline. The steps are ordered as `part1->part2->special`.
-The "When" stands for the build step trigger condition.
diff --git a/scripts/gen_matrix.sh b/scripts/gen_matrix.sh
index c3d9f588a..93f2d0026 100644
--- a/scripts/gen_matrix.sh
+++ b/scripts/gen_matrix.sh
@@ -12,13 +12,13 @@ for i in `echo $a`; do
 done
 
 echo
-a=$(perl -ne '/^\s{2}(stage:\sdeploy-gce-|when:\s)(\S+)$/ && print "$2\n";/^\s{4}(CLOUD_IMAGE|KUBE_NETWORK_PLUGIN|CLOUD_REGION|CLUSTER_MODE):\s(\S+)$/ && print "$2\n"' .gitlab-ci.yml)
+a=$(perl -ne '/^#\sstage:\sdeploy-gce-(\S+)$/ && print "$1\n";/^\s{2}(CLOUD_IMAGE|KUBE_NETWORK_PLUGIN|CLOUD_REGION|CLUSTER_MODE):\s(\S+)$/ && print "$2\n"' .gitlab-ci.yml)
 echo Gitlab-CI
-printf "|%18s|%18s|%18s|%18s|%18s|%18s|\n"  "Stage" "Network plugin" "OS type" "GCE region" "Nodes layout" "When"
-echo "|------------------|------------------|------------------|------------------|------------------|------------------|"
+printf "|%20s|%20s|%20s|%20s|%20s\n"  "Stage" "Network plugin" "OS type" "GCE region" "Nodes layout"
+echo "|--------------------|--------------------|--------------------|--------------------|--------------------|"
 c=0
 for i in `echo $a`; do
-  printf "|%18s" $i
-  [ $(($c % 6)) -eq 5 ] && printf "|\n"
+  printf "|%20s" $i
+  [ $(($c % 5)) -eq 4 ] && printf "|\n"
   c=$(( c + 1))
 done
-- 
GitLab