From ff695bd7da3021f1a3be51f5cc50cbce5244f436 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Fri, 3 Jul 2020 09:55:12 +0200
Subject: [PATCH] [ci] Docker image generation for MRs.

---
 .gitlab-ci.yml                                |  3 +-
 .../ci/extends/template-build-dockerfile.yml  |  2 -
 scripts/ci/extends/template-build-linux.yml   |  2 +-
 scripts/ci/extends/template-build-win.yml     |  1 +
 scripts/ci/jobs/build-docs.yml                | 11 ++--
 scripts/ci/jobs/build-gui-linux.yml           |  4 --
 scripts/ci/jobs/build-gui-mac.yml             |  4 --
 scripts/ci/jobs/build-gui-win.yml             |  4 --
 scripts/ci/jobs/build-linux-frontend.yml      |  1 -
 scripts/ci/jobs/build-linux-petsc.yml         |  1 -
 scripts/ci/jobs/build-linux.yml               |  1 -
 scripts/ci/jobs/build-mac.yml                 |  1 -
 scripts/ci/jobs/build-win.yml                 |  1 -
 scripts/ci/jobs/build_image.yml               | 54 ++++++-------------
 scripts/ci/jobs/check-header.yml              |  6 +--
 scripts/ci/jobs/checks.yml                    |  1 -
 scripts/ci/jobs/clang-sanitizer.yml           |  7 +--
 scripts/ci/jobs/clang-tidy.yml                |  5 +-
 scripts/ci/jobs/code-quality.yml              |  3 +-
 scripts/ci/jobs/container.yml                 |  1 -
 scripts/ci/jobs/meta.yml                      | 20 ++++++-
 scripts/ci/jobs/pre-commit.yml                |  5 +-
 scripts/ci/jobs/tests-large.yml               |  7 +--
 scripts/ci/jobs/web.yml                       |  7 ++-
 24 files changed, 51 insertions(+), 101 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 920bd375c4d..29bf2c3476b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,5 @@
 stages:
-  - pre-check
+  - preparation
   - build
   - check
   - gui
@@ -11,7 +11,6 @@ variables:
   CONTAINER_GCC_IMAGE: $CI_REGISTRY/ogs/$CI_PROJECT_NAME/gcc
   CONTAINER_GCC_GUI_IMAGE: $CI_REGISTRY/ogs/$CI_PROJECT_NAME/gcc-gui
   CONTAINER_CLANG_IMAGE: $CI_REGISTRY/ogs/$CI_PROJECT_NAME/clang
-  CONTAINER_TAG: latest
   XUNIT_TO_JUNIT_IMAGE: $CI_REGISTRY/ogs/$CI_PROJECT_NAME/xunit-to-junit
   PRECOMMIT_IMAGE: $CI_REGISTRY/ogs/$CI_PROJECT_NAME/pre-commit
   WEB_IMAGE: $CI_REGISTRY/ogs/$CI_PROJECT_NAME/web
diff --git a/scripts/ci/extends/template-build-dockerfile.yml b/scripts/ci/extends/template-build-dockerfile.yml
index 8a8404325f9..252ac45e173 100644
--- a/scripts/ci/extends/template-build-dockerfile.yml
+++ b/scripts/ci/extends/template-build-dockerfile.yml
@@ -15,8 +15,6 @@
       - scripts/ci/extends/template-build-dockerfile.yml
   tags:
     - docker-shell
-  variables:
-    GIT_LFS_SKIP_SMUDGE: "1"
   script:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - docker pull $IMAGE_REF || true
diff --git a/scripts/ci/extends/template-build-linux.yml b/scripts/ci/extends/template-build-linux.yml
index 995cb4b4369..dd4594d4b72 100644
--- a/scripts/ci/extends/template-build-linux.yml
+++ b/scripts/ci/extends/template-build-linux.yml
@@ -4,7 +4,7 @@
     - docker
   extends:
     - .test-artifacts
-
+  dependencies: [meta, meta_container]
   variables:
     CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
 
diff --git a/scripts/ci/extends/template-build-win.yml b/scripts/ci/extends/template-build-win.yml
index 35e5837d93d..7cb85ec78b1 100644
--- a/scripts/ci/extends/template-build-win.yml
+++ b/scripts/ci/extends/template-build-win.yml
@@ -4,6 +4,7 @@
     - windows
   extends:
     - .vs2019-environment
+  dependencies: [meta, meta_container]
   variables:
   script:
     - mkdir -p $env:BUILD_DIR
diff --git a/scripts/ci/jobs/build-docs.yml b/scripts/ci/jobs/build-docs.yml
index f19bf986ee5..9639f63c981 100644
--- a/scripts/ci/jobs/build-docs.yml
+++ b/scripts/ci/jobs/build-docs.yml
@@ -2,18 +2,15 @@ build docs:
   stage: build
   image:
     name: $CONTAINER_GCC_IMAGE
-  needs: [meta]
-
+  dependencies: [meta, meta_container]
   before_script:
     # HACK to easier linking to the generated pages
     - echo '<meta http-equiv="REFRESH" content="0;URL=build/docs/index.html">' >> Doxygen.html
     - mkdir -p build
     - cd build
-
   script:
     - cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DOGS_USE_CONAN=OFF -DOGS_BUILD_PROCESSES=GroundwaterFlow
     - cmake --build . --target doc > >(tee make-docs.output)
-
   artifacts:
     expose_as: 'Doxygen'
     paths:
@@ -24,8 +21,7 @@ build docs:
 check docs links:
   stage: check
   image: $WEB_IMAGE
-  needs:
-    - job: build docs
+  dependencies: [meta_container, "build docs"]
   extends:
       - .rules-master-manual
   script:
@@ -42,8 +38,7 @@ deploy doxygen:
   image: $WEB_IMAGE
   rules:
     - if: '$CI_COMMIT_BRANCH == "master"'
-  needs:
-    - job: build docs
+  dependencies: [meta_container, "build docs"]
   variables:
     GIT_STRATEGY: none
   script:
diff --git a/scripts/ci/jobs/build-gui-linux.yml b/scripts/ci/jobs/build-gui-linux.yml
index efc4b9e86ff..be06bc9f320 100644
--- a/scripts/ci/jobs/build-gui-linux.yml
+++ b/scripts/ci/jobs/build-gui-linux.yml
@@ -6,10 +6,6 @@ build gui linux:
   tags:
     - envinf1
     - docker
-  needs:
-    - meta
-    - job: build linux
-      artifacts: false
   rules:
     - if: '$CI_COMMIT_BRANCH == "master"'
     - changes:
diff --git a/scripts/ci/jobs/build-gui-mac.yml b/scripts/ci/jobs/build-gui-mac.yml
index d5f81bccdc8..6d519473c7c 100644
--- a/scripts/ci/jobs/build-gui-mac.yml
+++ b/scripts/ci/jobs/build-gui-mac.yml
@@ -1,10 +1,6 @@
 build gui mac:
   extends: .template-build-linux
   stage: gui
-  needs:
-    - meta
-    - job: build mac
-      artifacts: false
   tags:
     - mac
   rules:
diff --git a/scripts/ci/jobs/build-gui-win.yml b/scripts/ci/jobs/build-gui-win.yml
index 12d32cd0b09..13d94a8b8de 100644
--- a/scripts/ci/jobs/build-gui-win.yml
+++ b/scripts/ci/jobs/build-gui-win.yml
@@ -1,10 +1,6 @@
 build gui win:
   extends: .template-build-win
   stage: gui
-  needs:
-    - meta
-    - job: build win
-      artifacts: false
   rules:
     - if: '$CI_COMMIT_BRANCH == "master"'
     - changes:
diff --git a/scripts/ci/jobs/build-linux-frontend.yml b/scripts/ci/jobs/build-linux-frontend.yml
index 9cdd3a5fb30..9532d91bff2 100644
--- a/scripts/ci/jobs/build-linux-frontend.yml
+++ b/scripts/ci/jobs/build-linux-frontend.yml
@@ -4,7 +4,6 @@ build linux frontend:
     - .rules-master-manual
   tags:
     - frontend2
-  needs: [meta]
   variables:
     BUILD_DIR: "build"
     CCACHE_DIR: "/data/ogs/.ccache"
diff --git a/scripts/ci/jobs/build-linux-petsc.yml b/scripts/ci/jobs/build-linux-petsc.yml
index 768514dae81..41f6a75142b 100644
--- a/scripts/ci/jobs/build-linux-petsc.yml
+++ b/scripts/ci/jobs/build-linux-petsc.yml
@@ -2,7 +2,6 @@ build linux petsc:
   extends: .template-build-linux
   tags:
     - envinf1-shell
-  needs: [meta]
   variables:
     BUILD_DIR: "build-petsc"
     CMAKE_ARGS: "-DOGS_USE_CONAN=OFF -DOGS_USE_PETSC=ON -DBUILD_SHARED_LIBS=ON"
diff --git a/scripts/ci/jobs/build-linux.yml b/scripts/ci/jobs/build-linux.yml
index 2fb29d135b8..702e3597195 100644
--- a/scripts/ci/jobs/build-linux.yml
+++ b/scripts/ci/jobs/build-linux.yml
@@ -11,4 +11,3 @@ build linux:
       -DOGS_USE_PYTHON=ON
   image:
     name: $CONTAINER_GCC_IMAGE
-  needs: [meta]
diff --git a/scripts/ci/jobs/build-mac.yml b/scripts/ci/jobs/build-mac.yml
index 0632b6634fd..3ede1d8ec3c 100644
--- a/scripts/ci/jobs/build-mac.yml
+++ b/scripts/ci/jobs/build-mac.yml
@@ -2,7 +2,6 @@ build mac:
   extends: .template-build-linux
   tags:
     - mac
-  needs: [meta]
   variables:
     BUILD_DIR: "build-mac"
     CMAKE_ARGS: >-
diff --git a/scripts/ci/jobs/build-win.yml b/scripts/ci/jobs/build-win.yml
index 1f3212e46ff..1a2b931cb64 100644
--- a/scripts/ci/jobs/build-win.yml
+++ b/scripts/ci/jobs/build-win.yml
@@ -1,6 +1,5 @@
 build win:
   extends: .template-build-win
-  needs: [meta]
   variables:
     BUILD_DIR: build-win
     CMAKE_ARGS: >-
diff --git a/scripts/ci/jobs/build_image.yml b/scripts/ci/jobs/build_image.yml
index e1b4c67b3b9..498d47c4b7e 100644
--- a/scripts/ci/jobs/build_image.yml
+++ b/scripts/ci/jobs/build_image.yml
@@ -1,33 +1,23 @@
 build container images:
-  stage: .pre
+  stage: preparation
   rules:
-    # TODO
-    # - changes:
-      # - ThirdParty/container-maker
-      # - scripts/ci/jobs/build_image.yml
-      # when: always
-    - if: '$CI_COMMIT_BRANCH == "master"'
-      when: always
-  tags:
-    - envinf1-shell # can be changed back when instance-level vars are implemented
-
-  variables:
-    GIT_LFS_SKIP_SMUDGE: "1"
+    - changes:
+      - ThirdParty/container-maker
+      - scripts/ci/jobs/build_image.yml
+  dependencies: [meta_container]
+  tags: [docker-shell]
   extends: .container-maker-setup
   script:
-    - docker login -u $OGS_CI_REGISTRY_USER -p $OGS_CI_REGISTRY_PASSWORD $CI_REGISTRY
-    - docker pull registry.opengeosys.org/ogs/ogs/ogs/gcc || true
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - python ThirdParty/container-maker/ogscm/cli.py --build --ogs off
-      --pm system --cvode --cppcheck --docs --gcovr
-      --tag $CONTAINER_GCC_IMAGE:$CONTAINER_TAG --upload
-    - docker pull registry.opengeosys.org/ogs/ogs/ogs/gcc-gui || true
+      --pm system --cvode --cppcheck --docs --gcovr --tfel
+      --tag $CONTAINER_GCC_IMAGE --upload
     - python ThirdParty/container-maker/ogscm/cli.py --build --ogs off
       --pm system --cvode --cppcheck --docs --gcovr --gui
-      --tag $CONTAINER_GCC_GUI_IMAGE:$CONTAINER_TAG --upload
-    - docker pull registry.opengeosys.org/ogs/ogs/ogs/clang || true
+      --tag $CONTAINER_GCC_GUI_IMAGE --upload
     - python ThirdParty/container-maker/ogscm/cli.py --build --ogs off
       --compiler clang --compiler_version 9
-      --tag $CONTAINER_CLANG_IMAGE:$CONTAINER_TAG --upload
+      --tag $CONTAINER_CLANG_IMAGE --upload
 
 ### global project images ###
 build xunit-to-junit image:
@@ -39,14 +29,10 @@ build xunit-to-junit image:
       - scripts/ci/jobs/build_image.yml
   tags:
     - docker-shell
-
-  variables:
-    GIT_LFS_SKIP_SMUDGE: "1"
   script:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
-    - docker pull $XUNIT_TO_JUNIT_IMAGE:latest || true
-    - docker build --cache-from $XUNIT_TO_JUNIT_IMAGE:latest -t $XUNIT_TO_JUNIT_IMAGE:latest -f scripts/docker/saxon/Dockerfile scripts/docker/saxon
-    - docker push $XUNIT_TO_JUNIT_IMAGE:latest
+    - docker build --cache-from $XUNIT_TO_JUNIT_IMAGE -t $XUNIT_TO_JUNIT_IMAGE -f scripts/docker/saxon/Dockerfile scripts/docker/saxon
+    - docker push $XUNIT_TO_JUNIT_IMAGE
 
 
 build pre-commit image:
@@ -58,13 +44,10 @@ build pre-commit image:
       - scripts/ci/jobs/build_image.yml
   tags:
     - docker-shell
-  variables:
-    GIT_LFS_SKIP_SMUDGE: "1"
   script:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
-    - docker pull $PRECOMMIT_IMAGE:latest || true
-    - docker build --cache-from $PRECOMMIT_IMAGE:latest -t $PRECOMMIT_IMAGE:latest -f scripts/docker/Dockerfile.pre-commit scripts/docker
-    - docker push $PRECOMMIT_IMAGE:latest
+    - docker build --cache-from $PRECOMMIT_IMAGE -t $PRECOMMIT_IMAGE -f scripts/docker/Dockerfile.pre-commit scripts/docker
+    - docker push $PRECOMMIT_IMAGE
 
 build web image:
   stage: .pre
@@ -75,10 +58,7 @@ build web image:
       - scripts/ci/jobs/build_image.yml
   tags:
     - docker-shell
-  variables:
-    GIT_LFS_SKIP_SMUDGE: "1"
   script:
     - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
-    - docker pull $WEB_IMAGE:latest || true
-    - docker build --cache-from $WEB_IMAGE:latest -t $WEB_IMAGE:latest -f scripts/docker/Dockerfile.web scripts/docker
-    - docker push $WEB_IMAGE:latest
+    - docker build --cache-from $WEB_IMAGE -t $WEB_IMAGE -f scripts/docker/Dockerfile.web scripts/docker
+    - docker push $WEB_IMAGE
diff --git a/scripts/ci/jobs/check-header.yml b/scripts/ci/jobs/check-header.yml
index c08c0bd2d66..3aecf2df4bc 100644
--- a/scripts/ci/jobs/check-header.yml
+++ b/scripts/ci/jobs/check-header.yml
@@ -4,17 +4,14 @@ check header:
   tags:
     - docker
   extends:
-    - .defaults
     - .rules-master-manual
-
+  dependencies: [meta_container]
   variables:
     BUILD_DIR: "build-check-header"
     CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
     CMAKE_ARGS: "-DOGS_CHECK_HEADER_COMPILATION=ON -DOGS_BUILD_UTILS=ON -DOGS_BUILD_GUI=ON -DOGS_USE_PYTHON=ON -DBUILD_SHARED_LIBS=ON"
-
   image:
     name: $CONTAINER_GCC_GUI_IMAGE
-
   script:
     - mkdir -p $BUILD_DIR
     - cd $BUILD_DIR
@@ -24,7 +21,6 @@ check header:
       -DCMAKE_BUILD_TYPE=$BUILD_TYPE
       -DOGS_BUILD_PROCESSES=$BUILD_PROCESSES || true
     - cat CMakeFiles/CMakeError.log
-
   cache:
     paths:
       - $CCACHE_DIR
diff --git a/scripts/ci/jobs/checks.yml b/scripts/ci/jobs/checks.yml
index f5a530d90b9..a9540c2342d 100644
--- a/scripts/ci/jobs/checks.yml
+++ b/scripts/ci/jobs/checks.yml
@@ -17,7 +17,6 @@ compiler warnings:
     - "if [[ $(cat make.output | grep warning -i) ]]; then echo 'There were Clang (macOS) compiler warnings:'; cat make.output | grep warning -i; exit_code=1; fi"
     - exit $exit_code
 
-
 ctest results:
   stage: check
   variables:
diff --git a/scripts/ci/jobs/clang-sanitizer.yml b/scripts/ci/jobs/clang-sanitizer.yml
index 03a3d669123..56025a5f2ad 100644
--- a/scripts/ci/jobs/clang-sanitizer.yml
+++ b/scripts/ci/jobs/clang-sanitizer.yml
@@ -1,20 +1,15 @@
 clang sanitizer:
   stage: check
-  tags:
-    - docker
   extends:
-    - .defaults
     - .rules-manual
-
+  dependencies: [meta_container]
   variables:
     BUILD_DIR: "build-sanitizer"
     CMAKE_ARGS: "-DOGS_ADDRESS_SANITIZER=ON -DOGS_UNDEFINED_BEHAVIOR_SANITIZER=ON -DOGS_BUILD_UTILS=ON"
     UBSAN_OPTIONS: "print_stacktrace=1"
     LSAN_OPTIONS: "suppressions=$CI_PROJECT_DIR/scripts/test/leak_sanitizer.suppressions"
-
   image:
     name: $CONTAINER_CLANG_IMAGE
-
   script:
     - mkdir -p $BUILD_DIR
     - cd $BUILD_DIR
diff --git a/scripts/ci/jobs/clang-tidy.yml b/scripts/ci/jobs/clang-tidy.yml
index bc2a24a0927..ae03354c33a 100644
--- a/scripts/ci/jobs/clang-tidy.yml
+++ b/scripts/ci/jobs/clang-tidy.yml
@@ -1,11 +1,8 @@
 clang tidy:
   stage: check
-  tags:
-    - docker
   extends:
-    - .defaults
     - .rules-manual
-
+  dependencies: [meta_container]
   variables:
     BUILD_DIR: "build-tidy"
     CMAKE_ARGS: "-DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_CXX_CLANG_TIDY=clang-tidy-9"
diff --git a/scripts/ci/jobs/code-quality.yml b/scripts/ci/jobs/code-quality.yml
index 42a76ea4f4b..35d24fb68df 100644
--- a/scripts/ci/jobs/code-quality.yml
+++ b/scripts/ci/jobs/code-quality.yml
@@ -1,7 +1,6 @@
 code_quality:
   stage: check
-  extends:
-    - .defaults
+  needs: []
   rules:
   variables:
     DOCKER_TLS_CERTDIR: "/certs"
diff --git a/scripts/ci/jobs/container.yml b/scripts/ci/jobs/container.yml
index 6a721529610..9a4858443d2 100644
--- a/scripts/ci/jobs/container.yml
+++ b/scripts/ci/jobs/container.yml
@@ -9,7 +9,6 @@ container:
   variables:
     OPENMPI_VERSIONS: 'off' # 4.0.1
   extends:
-    - .defaults
     - .container-maker-setup
   script:
     - python ThirdParty/container-maker/ogscm/cli.py -B -C -R --ogs . --pm system --cvode --ompi $OPENMPI_VERSIONS
diff --git a/scripts/ci/jobs/meta.yml b/scripts/ci/jobs/meta.yml
index 213210e4fe1..0abac260b93 100644
--- a/scripts/ci/jobs/meta.yml
+++ b/scripts/ci/jobs/meta.yml
@@ -1,7 +1,7 @@
 meta:
   stage: .pre
-  tags:
-    - envinf1-shell
+  tags: [shell]
+    - shell
   script:
     - git fetch --depth 500
     - echo "OGS_VERSION=${CI_COMMIT_TAG:-`git describe --tags --long --dirty --always`}" >> build.env
@@ -9,3 +9,19 @@ meta:
   artifacts:
     reports:
       dotenv: build.env
+
+meta_container:
+  stage: .pre
+  tags: [shell]
+  rules:
+    - changes:
+      - ThirdParty/container-maker
+      - scripts/ci/jobs/build_image.yml
+  script:
+    - echo "CONTAINER_GCC_IMAGE=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/gcc:$CI_COMMIT_REF_SLUG" >> build.env
+    - echo "CONTAINER_GCC_GUI_IMAGE=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/gcc-gui:$CI_COMMIT_REF_SLUG" >> build.env
+    - echo "CONTAINER_CLANG_IMAGE=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/clang:$CI_COMMIT_REF_SLUG" >> build.env
+    - cat build.env
+  artifacts:
+    reports:
+      dotenv: build.env
diff --git a/scripts/ci/jobs/pre-commit.yml b/scripts/ci/jobs/pre-commit.yml
index 7adcf4f9f0e..73d530dfea2 100644
--- a/scripts/ci/jobs/pre-commit.yml
+++ b/scripts/ci/jobs/pre-commit.yml
@@ -1,9 +1,8 @@
 pre commit:
-  stage: pre-check
+  stage: preparation
   image:
     name: $PRECOMMIT_IMAGE
-  extends:
-    - .defaults
+  dependencies: [meta_container]
   rules:
     - if: '$CI_COMMIT_BRANCH == "master"'
       when: never
diff --git a/scripts/ci/jobs/tests-large.yml b/scripts/ci/jobs/tests-large.yml
index 5463bb21fe4..0424a740778 100644
--- a/scripts/ci/jobs/tests-large.yml
+++ b/scripts/ci/jobs/tests-large.yml
@@ -4,17 +4,14 @@ tests large:
     - docker
     - envinf1
   extends:
-    - .defaults
     - .rules-master-manual
-
+  dependencies: [meta_container]
   variables:
     BUILD_DIR: "build-tests-large"
     CCACHE_DIR: "$CI_PROJECT_DIR/.ccache"
     CMAKE_ARGS: "-DOGS_USE_CONAN=OFF"
-
   image:
     name: $CONTAINER_GCC_IMAGE
-
   script:
     - git lfs install
     - git lfs fetch
@@ -27,11 +24,9 @@ tests large:
       -DCMAKE_BUILD_TYPE=$BUILD_TYPE
       -DOGS_BUILD_PROCESSES=$BUILD_PROCESSES
     - cmake --build . --target ctest-large
-
   artifacts:
     paths:
       - $BUILD_DIR/Tests/ctest.xml
-
   cache:
     paths:
       - $CCACHE_DIR
diff --git a/scripts/ci/jobs/web.yml b/scripts/ci/jobs/web.yml
index afa5d414aca..5fc59561ee9 100644
--- a/scripts/ci/jobs/web.yml
+++ b/scripts/ci/jobs/web.yml
@@ -5,7 +5,7 @@ web url checker:
     - docker
   extends:
     - .rules-manual
-  needs: []
+  dependencies: [meta_container]
   image:
     name: $WEB_IMAGE
   script:
@@ -19,8 +19,7 @@ web url checker:
 preview web site:
   stage: build
   image: $WEB_IMAGE
-  extends:
-    - .defaults
+  dependencies: [meta_container]
   script:
     # HACK to easier linking to the generated pages
     - echo '<meta http-equiv="REFRESH" content="0;URL=web/public/index.html">' >> WebPreview.html
@@ -45,7 +44,7 @@ preview web site:
 deploy web site:
   stage: package
   image: $WEB_IMAGE
-  needs: []
+  dependencies: [meta_container]
   rules:
     - if: '$CI_COMMIT_BRANCH == "master"'
       changes:
-- 
GitLab