From 729cd3cf49e21530a593365f7b18236eaeb3afa8 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 14:51:44 -0700
Subject: [PATCH 01/10] Print environment variables for debug

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 283c21c..9d4f26e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,6 +17,7 @@ workflow:
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
+    - printenv
   artifacts:
     paths:
       - public/
-- 
GitLab


From 06a6832c68fa818ca794e3c847b0c80a47477dd6 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 15:18:21 -0700
Subject: [PATCH 02/10] Testing shell substitution in environment name

---
 .gitlab-ci.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9d4f26e..4cc1f06 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,6 +17,7 @@ workflow:
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
+    - echo $SHELL
     - printenv
   artifacts:
     paths:
@@ -30,7 +31,7 @@ review:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
   environment:
     name: "review $CI_COMMIT_BRANCH"
-    url: "https://$CI_PROJECT_NAMESPACE.$CI_PAGES_DOMAIN/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
+    url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
 
 # Deploy to GitLab Pages for pushes on the default branch
 pages:
-- 
GitLab


From 9949eb5a61dbeec5b8c41fcafa36a1fbab09d839 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 15:29:17 -0700
Subject: [PATCH 03/10] Extracting the variable substitution to a 'variables'
 directive

---
 .gitlab-ci.yml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4cc1f06..a69f70b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -29,9 +29,11 @@ review:
   extends: .deploy
   rules:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
+  variables:
+    ROOT_RELATIVE_NAMESPACE: "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}"
   environment:
     name: "review $CI_COMMIT_BRANCH"
-    url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
+    url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${ROOT_RELATIVE_NAMESPACE}/${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
 
 # Deploy to GitLab Pages for pushes on the default branch
 pages:
-- 
GitLab


From cdf088b2cca6a162b2e82ffa20cf191e76cca23e Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 15:35:23 -0700
Subject: [PATCH 04/10] Try moving the 'variables' directive to the job
 template

---
 .gitlab-ci.yml | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a69f70b..bd4822e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,10 +14,14 @@ workflow:
   stage: deploy
   tags:
     - docker
+  variables:
+    ROOT_RELATIVE_NAMESPACE: "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}"
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
     - echo $SHELL
+    - echo $ROOT_RELATIVE_NAMESPACE
+    - echo $CI_ENVIRONMENT_URL
     - printenv
   artifacts:
     paths:
@@ -29,8 +33,6 @@ review:
   extends: .deploy
   rules:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
-  variables:
-    ROOT_RELATIVE_NAMESPACE: "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}"
   environment:
     name: "review $CI_COMMIT_BRANCH"
     url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${ROOT_RELATIVE_NAMESPACE}/${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
-- 
GitLab


From 9f4392e33e4fb4d33a943ba818bab8ae8a8fc154 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 15:37:47 -0700
Subject: [PATCH 05/10] Move ROOT_RELATIVE_NAMESPACE to CI variables in GitLab

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bd4822e..16b3630 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,8 +14,8 @@ workflow:
   stage: deploy
   tags:
     - docker
-  variables:
-    ROOT_RELATIVE_NAMESPACE: "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}"
+#  variables:
+#    ROOT_RELATIVE_NAMESPACE: "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}"
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
-- 
GitLab


From dee5b0dc3dd2ae42d8ff5b023d87220fd20edb9e Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 15:51:34 -0700
Subject: [PATCH 06/10] Try dotenv in a .pre stage, and also variable
 overriding

---
 .gitlab-ci.yml | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 16b3630..011eef3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,6 +5,16 @@ workflow:
   rules:
     - if: $CI_COMMIT_BRANCH
 
+setup:
+  stage: .pre
+  tags:
+    - docker
+  script:
+    - echo "ROOT_RELATIVE_NAMESPACE=${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE} >> build.env"
+  artifacts:
+    reports:
+      dotenv: build.env
+
 # We can't deploy multiple different variants of GitLab Pages sites (e.g. one
 # per branch), so we use this quick instead. GitLab has a special browsable URL
 # for job artifacts on public projects, and we can create an Environment that
@@ -14,12 +24,13 @@ workflow:
   stage: deploy
   tags:
     - docker
-#  variables:
-#    ROOT_RELATIVE_NAMESPACE: "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}"
+  variables:
+    PROJECT_SUB_NAMESPACE: /
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
     - echo $SHELL
+    - echo $PROJECT_SUB_NAMESPACE
     - echo $ROOT_RELATIVE_NAMESPACE
     - echo $CI_ENVIRONMENT_URL
     - printenv
@@ -29,12 +40,20 @@ workflow:
 
 # Deploy a review environment for any push to a branch that is not the default
 # branch
-review:
+review-sub:
+  extends: .deploy
+  rules:
+    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
+  environment:
+    name: "review-sub $CI_COMMIT_BRANCH"
+    url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${PROJECT_SUB_NAMESPACE}${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
+
+review-rel:
   extends: .deploy
   rules:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
   environment:
-    name: "review $CI_COMMIT_BRANCH"
+    name: "review-rel $CI_COMMIT_BRANCH"
     url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${ROOT_RELATIVE_NAMESPACE}/${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
 
 # Deploy to GitLab Pages for pushes on the default branch
-- 
GitLab


From cb19f1644a7c1b27e1984f1cf1a8ad788be0dd53 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 15:53:06 -0700
Subject: [PATCH 07/10] Fix a misplaced quote in the .pre job

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 011eef3..055cb1e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,7 +10,7 @@ setup:
   tags:
     - docker
   script:
-    - echo "ROOT_RELATIVE_NAMESPACE=${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE} >> build.env"
+    - echo "ROOT_RELATIVE_NAMESPACE=${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}" >> build.env
   artifacts:
     reports:
       dotenv: build.env
-- 
GitLab


From eedc8e2b0ce48963d699b75776b727bcd46fa727 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 16:18:00 -0700
Subject: [PATCH 08/10] Finalizing on variable substituion in .pre stage job

---
 .gitlab-ci.yml | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 055cb1e..589aada 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,6 +5,15 @@ workflow:
   rules:
     - if: $CI_COMMIT_BRANCH
 
+# We can't do variable substitution in a job and then also use that computed
+# variable in the Environment URL of the same job, so we have to do the
+# substitution in an earlier stage. All of this variable substitution is only
+# required for projects in sub-groups because GitLab doesn't have a predefined
+# variable that contains the project namespace relative to the root namespace.
+#
+# For example, if the project path is "/group/subgroup-1" then we need just the
+# "/subgroup-1" portion because that is used in the Environment URL path, while
+# the "/group" root namespace is used as the subdomain.
 setup:
   stage: .pre
   tags:
@@ -16,16 +25,14 @@ setup:
       dotenv: build.env
 
 # We can't deploy multiple different variants of GitLab Pages sites (e.g. one
-# per branch), so we use this quick instead. GitLab has a special browsable URL
-# for job artifacts on public projects, and we can create an Environment that
-# points to that URL so it's easy for devs to know what the current Environment
-# URL for their branch is.
+# per branch), so we use this workaround instead. GitLab has a special browsable
+# URL for job artifacts on public projects, and we can create an Environment
+# that points to that URL so it's easy for devs to know what the current
+# Environment URL for their branch is.
 .deploy:
   stage: deploy
   tags:
     - docker
-  variables:
-    PROJECT_SUB_NAMESPACE: /
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
@@ -40,15 +47,7 @@ setup:
 
 # Deploy a review environment for any push to a branch that is not the default
 # branch
-review-sub:
-  extends: .deploy
-  rules:
-    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
-  environment:
-    name: "review-sub $CI_COMMIT_BRANCH"
-    url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${PROJECT_SUB_NAMESPACE}${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
-
-review-rel:
+review:
   extends: .deploy
   rules:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
-- 
GitLab


From aec8b5184755c800c56cc997ee670724f0ba3f92 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 16:55:44 -0700
Subject: [PATCH 09/10] Clean up the .deploy job template and move debug
 commands to before_script

---
 .gitlab-ci.yml | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 589aada..1102c9a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,14 +33,13 @@ setup:
   stage: deploy
   tags:
     - docker
+  before_script:
+    - echo $CI_ENVIRONMENT_URL
+    - echo $ROOT_RELATIVE_NAMESPACE
+    - test "$ROOT_RELATIVE_NAMESPACE" == "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}" || { echo "ROOT_RELATIVE_NAMESPACE is not set correctly" ; exit 1 ; }
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
-    - echo $SHELL
-    - echo $PROJECT_SUB_NAMESPACE
-    - echo $ROOT_RELATIVE_NAMESPACE
-    - echo $CI_ENVIRONMENT_URL
-    - printenv
   artifacts:
     paths:
       - public/
-- 
GitLab


From d5360dcd266cca9b246e6b2dc9aee1419e12d4e5 Mon Sep 17 00:00:00 2001
From: Chris Coley <chris@codingallnight.com>
Date: Sun, 23 Apr 2023 18:09:04 -0700
Subject: [PATCH 10/10] Remove '-rel' from the name of review environments

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1102c9a..9a0ca79 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -51,7 +51,7 @@ review:
   rules:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
   environment:
-    name: "review-rel $CI_COMMIT_BRANCH"
+    name: "review $CI_COMMIT_BRANCH"
     url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${ROOT_RELATIVE_NAMESPACE}/${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
 
 # Deploy to GitLab Pages for pushes on the default branch
-- 
GitLab