From 2865c944fd0b2a5a321ca6294671e1135c8bf8db Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.anjos@idiap.ch>
Date: Thu, 5 Sep 2019 11:22:45 +0200
Subject: [PATCH] [data/gitlab-ci] Apply DRY on build templates

---
 bob/devtools/data/gitlab-ci/docs.yaml         | 66 ++++++++-----------
 bob/devtools/data/gitlab-ci/nightlies.yaml    | 46 +++++++------
 .../data/gitlab-ci/single-package.yaml        | 61 ++++++++---------
 3 files changed, 81 insertions(+), 92 deletions(-)

diff --git a/bob/devtools/data/gitlab-ci/docs.yaml b/bob/devtools/data/gitlab-ci/docs.yaml
index 45a80f44..608ebdc8 100644
--- a/bob/devtools/data/gitlab-ci/docs.yaml
+++ b/bob/devtools/data/gitlab-ci/docs.yaml
@@ -15,81 +15,67 @@ stages:
   - deploy
 
 
-# Build targets
-.build_template: &build_job
-  stage: build
-  script:
-    - yum -y install dejavu-sans-fonts
+# All stages are prepared the same, with a base set of commands
+.bootstrap:
+  before_script:
     - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
     - python3 bootstrap.py -vv channel base
     - source ${CONDA_ROOT}/etc/profile.d/conda.sh
     - conda activate base
-    - bdt ci docs -vv packages.txt
-    - bdt ci clean -vv
-  cache: &build_caches
+  cache:
     paths:
       - miniconda.sh
       - ${CONDA_ROOT}/pkgs/*.tar.bz2
       - ${CONDA_ROOT}/pkgs/urls.txt
 
 
-.build_linux_template: &linux_build_job
-  <<: *build_job
-  tags:
-    - docker
-  image: continuumio/conda-concourse-ci
-  artifacts:
-    expire_in: 1 week
-    paths:
-      - ${CONDA_ROOT}/conda-bld/linux-64/*.tar.bz2
-  cache:
-    <<: *build_caches
-    key: "linux-cache"
-
-
-build_linux_37:
-  <<: *linux_build_job
+# Build target
+build:
+  extends: .bootstrap
+  stage: build
   variables:
     GITLAB_CHECKOUT_STRATEGY: "https://gitlab-ci-token:${CI_BUILD_TOKEN}@gitlab.idiap.ch/"
     PYTHON_VERSION: "3.7"
     BUILD_EGG: "true"
+  script:
+    - yum -y install dejavu-sans-fonts
+    - bdt ci docs -vv packages.txt
+    - bdt ci clean -vv
   artifacts:
     expire_in: 1 week
     paths:
       - sphinx
       - ${CONDA_ROOT}/conda-bld/linux-64/*.tar.bz2
+  tags:
+    - docker
+  image: continuumio/conda-concourse-ci
+  cache:
+    key: "build"
 
 
-# Deploy targets
-.deploy_template: &deploy_job
+# Deploy target
+.deploy:
+  extends: .bootstrap
   stage: deploy
   script:
-    - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
-    - python3 bootstrap.py channel base
-    - source ${CONDA_ROOT}/etc/profile.d/conda.sh
-    - conda activate base
     - bdt ci deploy -vv
     - bdt ci clean -vv
   dependencies:
-    - build_linux_37
+    - build
   tags:
     - docker
-  cache: &build_caches
-    paths:
-      - miniconda.sh
-      - ${CONDA_ROOT}/pkgs/*.tar.bz2
-      - ${CONDA_ROOT}/pkgs/urls.txt
-
+  image: continuumio/conda-concourse-ci
+  cache:
+    key: "deploy"
 
 deploy_beta:
-  <<: *deploy_job
+  extends: .deploy
   environment: beta
   only:
     - master
 
-
 deploy_stable:
-  <<: *deploy_job
+  extends: .deploy
   environment: stable
   only:
     - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
diff --git a/bob/devtools/data/gitlab-ci/nightlies.yaml b/bob/devtools/data/gitlab-ci/nightlies.yaml
index 61dd3644..e18e674f 100644
--- a/bob/devtools/data/gitlab-ci/nightlies.yaml
+++ b/bob/devtools/data/gitlab-ci/nightlies.yaml
@@ -14,32 +14,39 @@ stages:
   - cleanup
 
 
-# Build targets
-.build_template:
-  stage: build
-  variables:
-    CONDA_ROOT: "${CI_PROJECT_DIR}/miniconda"
-    PYTHONUNBUFFERED: 1
-  script:
+# All stages are prepared the same, with a base set of commands
+.bootstrap:
+  before_script:
     - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
     - python3 bootstrap.py -vv channel base
     - source ${CONDA_ROOT}/etc/profile.d/conda.sh
     - conda activate base
-    - bdt ci nightlies -vv order.txt
-    - bdt ci clean -vv
   cache:
-    key: "$CI_JOB_NAME"
     paths:
       - miniconda.sh
       - ${CONDA_ROOT}/pkgs/*.tar.bz2
       - ${CONDA_ROOT}/pkgs/urls.txt
 
+
+# Build targets
+.build_template:
+  extends: .bootstrap
+  stage: build
+  variables:
+    CONDA_ROOT: "${CI_PROJECT_DIR}/miniconda"
+    PYTHONUNBUFFERED: 1
+  script:
+    - bdt ci nightlies -vv order.txt
+    - bdt ci clean -vv
+
 build_linux_36:
   extends: .build_template
   variables:
     PYTHON_VERSION: "3.6"
   tags:
     - docker
+  cache:
+    key: 'build-py36'
 
 build_linux_37:
   extends: .build_template
@@ -47,6 +54,9 @@ build_linux_37:
     PYTHON_VERSION: "3.7"
   tags:
     - docker
+  cache:
+    key: 'build-py37'
+
 
 build_macosx_36:
   extends: .build_template
@@ -54,6 +64,8 @@ build_macosx_36:
     PYTHON_VERSION: "3.6"
   tags:
     - macosx
+  cache:
+    key: 'build-py36'
 
 build_macosx_37:
   extends: .build_template
@@ -61,33 +73,27 @@ build_macosx_37:
     PYTHON_VERSION: "3.7"
   tags:
     - macosx
+  cache:
+    key: 'build-py37'
 
 
 # Periodic cleanup of beta packages
 .cleanup_template:
+  extends: .bootstrap
   stage: cleanup
   tags:
     - docker
   image: continuumio/conda-concourse-ci
   script:
-    - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
-    - python3 bootstrap.py -vv channel base
-    - source ${CONDA_ROOT}/etc/profile.d/conda.sh
-    - conda activate base
     - bdt ci clean-betas -vv
   cache:
-    key: "linux-cache"
-    paths:
-      - miniconda.sh
-      - ${CONDA_ROOT}/pkgs/*.tar.bz2
-      - ${CONDA_ROOT}/pkgs/urls.txt
+    key: 'cleanup'
 
 
 # The automatic clean-up takes place when the nightly successfuly runs
 cleanup:
   extends: .cleanup_template
 
-
 manual_cleanup:
   extends: .cleanup_template
   when: manual
diff --git a/bob/devtools/data/gitlab-ci/single-package.yaml b/bob/devtools/data/gitlab-ci/single-package.yaml
index 9f30976d..3ded4f6f 100644
--- a/bob/devtools/data/gitlab-ci/single-package.yaml
+++ b/bob/devtools/data/gitlab-ci/single-package.yaml
@@ -16,18 +16,13 @@ stages:
   - pypi
 
 
-# Build targets
-.build_template:
-  stage: build
-  script:
+# All stages are prepared the same, with a base set of commands
+.bootstrap:
+  before_script:
     - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
     - python3 bootstrap.py -vv channel base
     - source ${CONDA_ROOT}/etc/profile.d/conda.sh
     - conda activate base
-    - bdt ci build -vv
-    - bdt ci clean -vv
-  artifacts:
-    expire_in: 1 week
   cache:
     paths:
       - miniconda.sh
@@ -35,6 +30,17 @@ stages:
       - ${CONDA_ROOT}/pkgs/urls.txt
 
 
+# Build targets
+.build_template:
+  extends: .bootstrap
+  stage: build
+  script:
+    - bdt ci build -vv
+    - bdt ci clean -vv
+  artifacts:
+    expire_in: 1 week
+
+
 .build_linux_template:
   extends: .build_template
   tags:
@@ -43,8 +49,6 @@ stages:
   artifacts:
     paths:
       - ${CONDA_ROOT}/conda-bld/linux-64/*.tar.bz2
-  cache:
-    key: "linux-cache"
 
 
 .build_macosx_template:
@@ -54,24 +58,28 @@ stages:
   artifacts:
     paths:
       - ${CONDA_ROOT}/conda-bld/osx-64/*.tar.bz2
-  cache:
-    key: "macosx-cache"
 
 
 build_macosx_36:
   extends: .build_macosx_template
   variables:
     PYTHON_VERSION: "3.6"
+  cache:
+    key: "build-py36"
 
 build_macosx_37:
   extends: .build_macosx_template
   variables:
     PYTHON_VERSION: "3.7"
+  cache:
+    key: "build-py37"
 
 build_linux_36:
   extends: .build_linux_template
   variables:
     PYTHON_VERSION: "3.6"
+  cache:
+    key: "build-py36"
 
 build_linux_37:
   extends: .build_linux_template
@@ -79,10 +87,6 @@ build_linux_37:
     PYTHON_VERSION: "3.7"
     BUILD_EGG: "true"
   script:
-    - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
-    - python3 bootstrap.py -vv channel base
-    - source ${CONDA_ROOT}/etc/profile.d/conda.sh
-    - conda activate base
     - bdt ci build -vv
     - bdt ci readme -vv dist/*.zip
     - bdt ci clean -vv
@@ -91,16 +95,15 @@ build_linux_37:
       - dist/*.zip
       - sphinx
       - ${CONDA_ROOT}/conda-bld/linux-64/*.tar.bz2
+  cache:
+    key: "build-py37"
 
 
 # Test targets (not normally used)
 .test_template:
+  extends: .bootstrap
   stage: test
   script:
-    - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
-    - python3 bootstrap.py -vv channel base
-    - source ${CONDA_ROOT}/etc/profile.d/conda.sh
-    - conda activate base
     - bdt ci test -vv
     - bdt ci clean -vv
   cache:
@@ -115,26 +118,19 @@ build_linux_37:
   tags:
     - docker
   image: continuumio/conda-concourse-ci
-  cache:
-    key: "linux-cache"
 
 
 .test_macosx_template:
   extends: .test_template
   tags:
     - macosx
-  cache:
-    key: "macosx-cache"
 
 
 # Deploy targets
 .deploy_template:
+  extends: .bootstrap
   stage: deploy
   script:
-    - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
-    - python3 bootstrap.py channel base
-    - source ${CONDA_ROOT}/etc/profile.d/conda.sh
-    - conda activate base
     - bdt ci deploy -vv
     - bdt ci clean -vv
   dependencies:
@@ -149,6 +145,8 @@ build_linux_37:
       - miniconda.sh
       - ${CONDA_ROOT}/pkgs/*.tar.bz2
       - ${CONDA_ROOT}/pkgs/urls.txt
+  cache:
+    key: "deploy"
 
 
 deploy_beta:
@@ -168,6 +166,7 @@ deploy_stable:
 
 
 pypi:
+  extends: .bootstrap
   stage: pypi
   environment: pypi
   only:
@@ -175,10 +174,6 @@ pypi:
   except:
     - branches
   script:
-    - curl --silent "${BOOTSTRAP}" --output "bootstrap.py"
-    - python3 bootstrap.py -vv channel base
-    - source ${CONDA_ROOT}/etc/profile.d/conda.sh
-    - conda activate base
     - bdt ci pypi -vv dist/*.zip
     - bdt ci clean -vv
   dependencies:
@@ -188,3 +183,5 @@ pypi:
     - build_macosx_37
   tags:
     - docker
+  cache:
+    key: "pypi"
-- 
GitLab