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