diff --git a/kicker-screen.png b/kicker-screen.png
index 8fb3eea103e15714f6254172c724a4cbe76f7df5..a026c96e8ba2a137bbefb06a31a0ea2b0c9c6e19 100644
Binary files a/kicker-screen.png and b/kicker-screen.png differ
diff --git a/package-lock.json b/package-lock.json
index 7bf8a4f286c605de2a3fed0422a6fbb84682c9da..47f7915f49e5e315d78304edf2c4d1a1cd5b6862 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,7 +17,7 @@
                 "@angular/platform-browser": "18.1.0",
                 "@angular/platform-browser-dynamic": "18.1.0",
                 "@angular/router": "18.1.0",
-                "@ng-bootstrap/ng-bootstrap": "17.0.0",
+                "@ng-bootstrap/ng-bootstrap": "17.0.1",
                 "boosted": "5.3.3",
                 "marked": "^12.0.0",
                 "ng-process-env": "^16.0.6",
@@ -28,12 +28,12 @@
             },
             "devDependencies": {
                 "@angular/build": "^18.1.0",
-                "@angular/cli": "18.1.3",
+                "@angular/cli": "18.2.11",
                 "@angular/compiler-cli": "18.1.0",
                 "@angular/language-service": "18.1.0",
-                "@biomejs/biome": "1.8.3",
+                "@biomejs/biome": "1.9.4",
                 "@playwright/test": "^1.45.2",
-                "@types/node": "20.14.13",
+                "@types/node": "22.10.6",
                 "ts-node": "10.9.2",
                 "typescript": "^5.4.5"
             }
@@ -51,13 +51,13 @@
             }
         },
         "node_modules/@angular-devkit/architect": {
-            "version": "0.1801.3",
-            "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1801.3.tgz",
-            "integrity": "sha512-4yba7x315GKim7OuBgv89ZtG50hE3hw64KuRLSGuW+RvwcwLV24VanmdWmFiLC4RKYNSH13E0wZqDNJkrMQepw==",
+            "version": "0.1802.11",
+            "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.11.tgz",
+            "integrity": "sha512-p+XIc/j51aI83ExNdeZwvkm1F4wkuKMGUUoj0MVUUi5E6NoiMlXYm6uU8+HbRvPBzGy5+3KOiGp3Fks0UmDSAA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@angular-devkit/core": "18.1.3",
+                "@angular-devkit/core": "18.2.11",
                 "rxjs": "7.8.1"
             },
             "engines": {
@@ -67,13 +67,13 @@
             }
         },
         "node_modules/@angular-devkit/core": {
-            "version": "18.1.3",
-            "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.1.3.tgz",
-            "integrity": "sha512-S0UzNNVLbHPaiSVXHjCd2wX+eERj/YR7jJCc40PHs1gINA7Gtd2q3VDm3bUEWe4P6fP6GNp43qSXmWJFQD0+Yg==",
+            "version": "18.2.11",
+            "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.11.tgz",
+            "integrity": "sha512-H9P1shRGigORWJHUY2BRa2YurT+DVminrhuaYHsbhXBRsPmgB2Dx/30YLTnC1s5XmR9QIRUCsg/d3kyT1wd5Zg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "ajv": "8.16.0",
+                "ajv": "8.17.1",
                 "ajv-formats": "3.0.1",
                 "jsonc-parser": "3.3.1",
                 "picomatch": "4.0.2",
@@ -95,15 +95,15 @@
             }
         },
         "node_modules/@angular-devkit/schematics": {
-            "version": "18.1.3",
-            "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.1.3.tgz",
-            "integrity": "sha512-ElzCfiYW9P3xPRNRbPRSrOTGm+G7X8ta1ce3srqi00yPX39Y0WSM95SACqqF8j9dxL6BqazBMyAgNQUaVSbWjw==",
+            "version": "18.2.11",
+            "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.11.tgz",
+            "integrity": "sha512-efRK3FotTFp4KD5u42jWfXpHUALXB9kJNsWiB4wEImKFH6CN+vjBspJQuLqk2oeBFh/7D2qRMc5P+2tZHM5hdw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@angular-devkit/core": "18.1.3",
+                "@angular-devkit/core": "18.2.11",
                 "jsonc-parser": "3.3.1",
-                "magic-string": "0.30.10",
+                "magic-string": "0.30.11",
                 "ora": "5.4.1",
                 "rxjs": "7.8.1"
             },
@@ -128,38 +128,36 @@
             }
         },
         "node_modules/@angular/build": {
-            "version": "18.1.3",
-            "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.1.3.tgz",
-            "integrity": "sha512-jmTQC7lecJ6c2mJobb5nY2CN6jvdeFFHXN/jif0RkNI8dP60uV1QdMKJtTGbxEtAKXdMgOTReYICVYl6m9Q56Q==",
+            "version": "18.2.11",
+            "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.11.tgz",
+            "integrity": "sha512-AgirvSCmqUKiDE3C0rl3JA68OkOqQWDKUvjqRHXCkhxldLVOVoeIl87+jBYK/v9gcmk+K+ju+5wbGEfu1FjhiQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@ampproject/remapping": "2.3.0",
-                "@angular-devkit/architect": "0.1801.3",
-                "@babel/core": "7.24.7",
+                "@angular-devkit/architect": "0.1802.11",
+                "@babel/core": "7.25.2",
                 "@babel/helper-annotate-as-pure": "7.24.7",
                 "@babel/helper-split-export-declaration": "7.24.7",
                 "@babel/plugin-syntax-import-attributes": "7.24.7",
-                "@inquirer/confirm": "3.1.11",
+                "@inquirer/confirm": "3.1.22",
                 "@vitejs/plugin-basic-ssl": "1.1.0",
-                "ansi-colors": "4.1.3",
                 "browserslist": "^4.23.0",
                 "critters": "0.0.24",
-                "esbuild": "0.21.5",
+                "esbuild": "0.23.0",
                 "fast-glob": "3.3.2",
                 "https-proxy-agent": "7.0.5",
-                "lmdb": "3.0.12",
-                "magic-string": "0.30.10",
+                "listr2": "8.2.4",
+                "lmdb": "3.0.13",
+                "magic-string": "0.30.11",
                 "mrmime": "2.0.0",
-                "ora": "5.4.1",
                 "parse5-html-rewriting-stream": "7.0.0",
                 "picomatch": "4.0.2",
                 "piscina": "4.6.1",
-                "rollup": "4.18.0",
+                "rollup": "4.22.4",
                 "sass": "1.77.6",
-                "semver": "7.6.2",
-                "undici": "6.19.2",
-                "vite": "5.3.2",
+                "semver": "7.6.3",
+                "vite": "5.4.6",
                 "watchpack": "2.4.1"
             },
             "engines": {
@@ -198,28 +196,507 @@
                 }
             }
         },
+        "node_modules/@angular/build/node_modules/@babel/core": {
+            "version": "7.25.2",
+            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+            "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@ampproject/remapping": "^2.2.0",
+                "@babel/code-frame": "^7.24.7",
+                "@babel/generator": "^7.25.0",
+                "@babel/helper-compilation-targets": "^7.25.2",
+                "@babel/helper-module-transforms": "^7.25.2",
+                "@babel/helpers": "^7.25.0",
+                "@babel/parser": "^7.25.0",
+                "@babel/template": "^7.25.0",
+                "@babel/traverse": "^7.25.2",
+                "@babel/types": "^7.25.2",
+                "convert-source-map": "^2.0.0",
+                "debug": "^4.1.0",
+                "gensync": "^1.0.0-beta.2",
+                "json5": "^2.2.3",
+                "semver": "^6.3.1"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/babel"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@babel/core/node_modules/semver": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+            "dev": true,
+            "license": "ISC",
+            "bin": {
+                "semver": "bin/semver.js"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/aix-ppc64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
+            "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==",
+            "cpu": [
+                "ppc64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "aix"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/android-arm": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz",
+            "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/android-arm64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz",
+            "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/android-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz",
+            "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/darwin-arm64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz",
+            "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/darwin-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz",
+            "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/freebsd-arm64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz",
+            "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "freebsd"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/freebsd-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz",
+            "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "freebsd"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-arm": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz",
+            "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-arm64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz",
+            "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-ia32": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz",
+            "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-loong64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz",
+            "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==",
+            "cpu": [
+                "loong64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-mips64el": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz",
+            "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==",
+            "cpu": [
+                "mips64el"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-ppc64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz",
+            "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==",
+            "cpu": [
+                "ppc64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-riscv64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz",
+            "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==",
+            "cpu": [
+                "riscv64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-s390x": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz",
+            "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==",
+            "cpu": [
+                "s390x"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/linux-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz",
+            "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/netbsd-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz",
+            "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "netbsd"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/openbsd-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz",
+            "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "openbsd"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/sunos-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz",
+            "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "sunos"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/win32-arm64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz",
+            "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/win32-ia32": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz",
+            "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/@esbuild/win32-x64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz",
+            "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/@angular/build/node_modules/convert-source-map": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+            "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/@angular/build/node_modules/esbuild": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz",
+            "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==",
+            "dev": true,
+            "hasInstallScript": true,
+            "license": "MIT",
+            "bin": {
+                "esbuild": "bin/esbuild"
+            },
+            "engines": {
+                "node": ">=18"
+            },
+            "optionalDependencies": {
+                "@esbuild/aix-ppc64": "0.23.0",
+                "@esbuild/android-arm": "0.23.0",
+                "@esbuild/android-arm64": "0.23.0",
+                "@esbuild/android-x64": "0.23.0",
+                "@esbuild/darwin-arm64": "0.23.0",
+                "@esbuild/darwin-x64": "0.23.0",
+                "@esbuild/freebsd-arm64": "0.23.0",
+                "@esbuild/freebsd-x64": "0.23.0",
+                "@esbuild/linux-arm": "0.23.0",
+                "@esbuild/linux-arm64": "0.23.0",
+                "@esbuild/linux-ia32": "0.23.0",
+                "@esbuild/linux-loong64": "0.23.0",
+                "@esbuild/linux-mips64el": "0.23.0",
+                "@esbuild/linux-ppc64": "0.23.0",
+                "@esbuild/linux-riscv64": "0.23.0",
+                "@esbuild/linux-s390x": "0.23.0",
+                "@esbuild/linux-x64": "0.23.0",
+                "@esbuild/netbsd-x64": "0.23.0",
+                "@esbuild/openbsd-arm64": "0.23.0",
+                "@esbuild/openbsd-x64": "0.23.0",
+                "@esbuild/sunos-x64": "0.23.0",
+                "@esbuild/win32-arm64": "0.23.0",
+                "@esbuild/win32-ia32": "0.23.0",
+                "@esbuild/win32-x64": "0.23.0"
+            }
+        },
         "node_modules/@angular/cli": {
-            "version": "18.1.3",
-            "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.1.3.tgz",
-            "integrity": "sha512-vsEc3cGDUYcc+adfvBHSqKdI8uiaa86Y9pLWGHfqaD+N0q/k17d/47AFvXTDKLmKucMZrto/4088Y1y+yM9eOg==",
+            "version": "18.2.11",
+            "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.11.tgz",
+            "integrity": "sha512-0JI1xjOLRemBPjdT/yVlabxc3Zkjqa/lhvVxxVC1XhKoW7yGxIGwNrQ4pka4CcQtCuktO6KPMmTGIu8YgC3cpw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@angular-devkit/architect": "0.1801.3",
-                "@angular-devkit/core": "18.1.3",
-                "@angular-devkit/schematics": "18.1.3",
-                "@inquirer/prompts": "5.0.7",
-                "@listr2/prompt-adapter-inquirer": "2.0.13",
-                "@schematics/angular": "18.1.3",
+                "@angular-devkit/architect": "0.1802.11",
+                "@angular-devkit/core": "18.2.11",
+                "@angular-devkit/schematics": "18.2.11",
+                "@inquirer/prompts": "5.3.8",
+                "@listr2/prompt-adapter-inquirer": "2.0.15",
+                "@schematics/angular": "18.2.11",
                 "@yarnpkg/lockfile": "1.1.0",
                 "ini": "4.1.3",
                 "jsonc-parser": "3.3.1",
-                "listr2": "8.2.3",
-                "npm-package-arg": "11.0.2",
-                "npm-pick-manifest": "9.0.1",
+                "listr2": "8.2.4",
+                "npm-package-arg": "11.0.3",
+                "npm-pick-manifest": "9.1.0",
                 "pacote": "18.0.6",
                 "resolve": "1.22.8",
-                "semver": "7.6.2",
+                "semver": "7.6.3",
                 "symbol-observable": "4.0.0",
                 "yargs": "17.7.2"
             },
@@ -413,11 +890,13 @@
             }
         },
         "node_modules/@babel/code-frame": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-            "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+            "version": "7.26.2",
+            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+            "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/highlight": "^7.24.7",
+                "@babel/helper-validator-identifier": "^7.25.9",
+                "js-tokens": "^4.0.0",
                 "picocolors": "^1.0.0"
             },
             "engines": {
@@ -425,9 +904,10 @@
             }
         },
         "node_modules/@babel/compat-data": {
-            "version": "7.24.9",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz",
-            "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==",
+            "version": "7.26.2",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
+            "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
@@ -475,14 +955,16 @@
             }
         },
         "node_modules/@babel/generator": {
-            "version": "7.24.10",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz",
-            "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==",
+            "version": "7.26.2",
+            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
+            "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/types": "^7.24.9",
+                "@babel/parser": "^7.26.2",
+                "@babel/types": "^7.26.0",
                 "@jridgewell/gen-mapping": "^0.3.5",
                 "@jridgewell/trace-mapping": "^0.3.25",
-                "jsesc": "^2.5.1"
+                "jsesc": "^3.0.2"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -501,13 +983,14 @@
             }
         },
         "node_modules/@babel/helper-compilation-targets": {
-            "version": "7.24.8",
-            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz",
-            "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==",
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
+            "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/compat-data": "^7.24.8",
-                "@babel/helper-validator-option": "^7.24.8",
-                "browserslist": "^4.23.1",
+                "@babel/compat-data": "^7.25.9",
+                "@babel/helper-validator-option": "^7.25.9",
+                "browserslist": "^4.24.0",
                 "lru-cache": "^5.1.1",
                 "semver": "^6.3.1"
             },
@@ -523,62 +1006,28 @@
                 "semver": "bin/semver.js"
             }
         },
-        "node_modules/@babel/helper-environment-visitor": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
-            "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
-            "dependencies": {
-                "@babel/types": "^7.24.7"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-function-name": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
-            "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
-            "dependencies": {
-                "@babel/template": "^7.24.7",
-                "@babel/types": "^7.24.7"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/helper-hoist-variables": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
-            "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
-            "dependencies": {
-                "@babel/types": "^7.24.7"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
         "node_modules/@babel/helper-module-imports": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-            "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+            "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/traverse": "^7.24.7",
-                "@babel/types": "^7.24.7"
+                "@babel/traverse": "^7.25.9",
+                "@babel/types": "^7.25.9"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-module-transforms": {
-            "version": "7.24.9",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz",
-            "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==",
+            "version": "7.26.0",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+            "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/helper-environment-visitor": "^7.24.7",
-                "@babel/helper-module-imports": "^7.24.7",
-                "@babel/helper-simple-access": "^7.24.7",
-                "@babel/helper-split-export-declaration": "^7.24.7",
-                "@babel/helper-validator-identifier": "^7.24.7"
+                "@babel/helper-module-imports": "^7.25.9",
+                "@babel/helper-validator-identifier": "^7.25.9",
+                "@babel/traverse": "^7.25.9"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -596,22 +1045,11 @@
                 "node": ">=6.9.0"
             }
         },
-        "node_modules/@babel/helper-simple-access": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-            "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
-            "dependencies": {
-                "@babel/traverse": "^7.24.7",
-                "@babel/types": "^7.24.7"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
         "node_modules/@babel/helper-split-export-declaration": {
             "version": "7.24.7",
             "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
             "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
+            "dev": true,
             "dependencies": {
                 "@babel/types": "^7.24.7"
             },
@@ -620,59 +1058,53 @@
             }
         },
         "node_modules/@babel/helper-string-parser": {
-            "version": "7.24.8",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-            "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+            "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-validator-identifier": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-            "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+            "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helper-validator-option": {
-            "version": "7.24.8",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-            "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+            "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/helpers": {
-            "version": "7.24.8",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz",
-            "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==",
+            "version": "7.26.0",
+            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
+            "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/template": "^7.24.7",
-                "@babel/types": "^7.24.8"
+                "@babel/template": "^7.25.9",
+                "@babel/types": "^7.26.0"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
-        "node_modules/@babel/highlight": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-            "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+        "node_modules/@babel/parser": {
+            "version": "7.26.2",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
+            "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/helper-validator-identifier": "^7.24.7",
-                "chalk": "^2.4.2",
-                "js-tokens": "^4.0.0",
-                "picocolors": "^1.0.0"
+                "@babel/types": "^7.26.0"
             },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
-        "node_modules/@babel/parser": {
-            "version": "7.24.8",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
-            "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
             "bin": {
                 "parser": "bin/babel-parser.js"
             },
@@ -696,31 +1128,30 @@
             }
         },
         "node_modules/@babel/template": {
-            "version": "7.24.7",
-            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
-            "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
+            "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/code-frame": "^7.24.7",
-                "@babel/parser": "^7.24.7",
-                "@babel/types": "^7.24.7"
+                "@babel/code-frame": "^7.25.9",
+                "@babel/parser": "^7.25.9",
+                "@babel/types": "^7.25.9"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@babel/traverse": {
-            "version": "7.24.8",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz",
-            "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==",
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
+            "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/code-frame": "^7.24.7",
-                "@babel/generator": "^7.24.8",
-                "@babel/helper-environment-visitor": "^7.24.7",
-                "@babel/helper-function-name": "^7.24.7",
-                "@babel/helper-hoist-variables": "^7.24.7",
-                "@babel/helper-split-export-declaration": "^7.24.7",
-                "@babel/parser": "^7.24.8",
-                "@babel/types": "^7.24.8",
+                "@babel/code-frame": "^7.25.9",
+                "@babel/generator": "^7.25.9",
+                "@babel/parser": "^7.25.9",
+                "@babel/template": "^7.25.9",
+                "@babel/types": "^7.25.9",
                 "debug": "^4.3.1",
                 "globals": "^11.1.0"
             },
@@ -729,24 +1160,25 @@
             }
         },
         "node_modules/@babel/types": {
-            "version": "7.24.9",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz",
-            "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==",
+            "version": "7.26.0",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
+            "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
+            "license": "MIT",
             "dependencies": {
-                "@babel/helper-string-parser": "^7.24.8",
-                "@babel/helper-validator-identifier": "^7.24.7",
-                "to-fast-properties": "^2.0.0"
+                "@babel/helper-string-parser": "^7.25.9",
+                "@babel/helper-validator-identifier": "^7.25.9"
             },
             "engines": {
                 "node": ">=6.9.0"
             }
         },
         "node_modules/@biomejs/biome": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.8.3.tgz",
-            "integrity": "sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz",
+            "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==",
             "dev": true,
             "hasInstallScript": true,
+            "license": "MIT OR Apache-2.0",
             "bin": {
                 "biome": "bin/biome"
             },
@@ -758,24 +1190,25 @@
                 "url": "https://opencollective.com/biome"
             },
             "optionalDependencies": {
-                "@biomejs/cli-darwin-arm64": "1.8.3",
-                "@biomejs/cli-darwin-x64": "1.8.3",
-                "@biomejs/cli-linux-arm64": "1.8.3",
-                "@biomejs/cli-linux-arm64-musl": "1.8.3",
-                "@biomejs/cli-linux-x64": "1.8.3",
-                "@biomejs/cli-linux-x64-musl": "1.8.3",
-                "@biomejs/cli-win32-arm64": "1.8.3",
-                "@biomejs/cli-win32-x64": "1.8.3"
+                "@biomejs/cli-darwin-arm64": "1.9.4",
+                "@biomejs/cli-darwin-x64": "1.9.4",
+                "@biomejs/cli-linux-arm64": "1.9.4",
+                "@biomejs/cli-linux-arm64-musl": "1.9.4",
+                "@biomejs/cli-linux-x64": "1.9.4",
+                "@biomejs/cli-linux-x64-musl": "1.9.4",
+                "@biomejs/cli-win32-arm64": "1.9.4",
+                "@biomejs/cli-win32-x64": "1.9.4"
             }
         },
         "node_modules/@biomejs/cli-darwin-arm64": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.8.3.tgz",
-            "integrity": "sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz",
+            "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "darwin"
@@ -785,13 +1218,14 @@
             }
         },
         "node_modules/@biomejs/cli-darwin-x64": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.8.3.tgz",
-            "integrity": "sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz",
+            "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "darwin"
@@ -801,13 +1235,14 @@
             }
         },
         "node_modules/@biomejs/cli-linux-arm64": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.8.3.tgz",
-            "integrity": "sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz",
+            "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "linux"
@@ -817,13 +1252,14 @@
             }
         },
         "node_modules/@biomejs/cli-linux-arm64-musl": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.8.3.tgz",
-            "integrity": "sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz",
+            "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "linux"
@@ -833,13 +1269,14 @@
             }
         },
         "node_modules/@biomejs/cli-linux-x64": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.8.3.tgz",
-            "integrity": "sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz",
+            "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "linux"
@@ -849,13 +1286,14 @@
             }
         },
         "node_modules/@biomejs/cli-linux-x64-musl": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.8.3.tgz",
-            "integrity": "sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz",
+            "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "linux"
@@ -865,13 +1303,14 @@
             }
         },
         "node_modules/@biomejs/cli-win32-arm64": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.8.3.tgz",
-            "integrity": "sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz",
+            "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "win32"
@@ -881,13 +1320,14 @@
             }
         },
         "node_modules/@biomejs/cli-win32-x64": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.8.3.tgz",
-            "integrity": "sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==",
+            "version": "1.9.4",
+            "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz",
+            "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT OR Apache-2.0",
             "optional": true,
             "os": [
                 "win32"
@@ -1212,6 +1652,23 @@
                 "node": ">=12"
             }
         },
+        "node_modules/@esbuild/openbsd-arm64": {
+            "version": "0.23.0",
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz",
+            "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "openbsd"
+            ],
+            "engines": {
+                "node": ">=18"
+            }
+        },
         "node_modules/@esbuild/openbsd-x64": {
             "version": "0.21.5",
             "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
@@ -1293,39 +1750,16 @@
             }
         },
         "node_modules/@inquirer/checkbox": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.4.0.tgz",
-            "integrity": "sha512-XHOCmntitRBD8SJcrv+6X9YakxO1wfsvezOnU5MBIXeTlSBRCVk9DOIrx6Cgi9BS3qkcy7oQb+fUGEKrP6xecQ==",
-            "dev": true,
-            "dependencies": {
-                "@inquirer/core": "^9.0.3",
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "ansi-escapes": "^4.3.2",
-                "yoctocolors-cjs": "^2.1.2"
-            },
-            "engines": {
-                "node": ">=18"
-            }
-        },
-        "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz",
-            "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==",
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz",
+            "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.11",
-                "@types/wrap-ansi": "^3.0.0",
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/figures": "^1.0.5",
+                "@inquirer/type": "^1.5.3",
                 "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
-                "cli-width": "^4.1.0",
-                "mute-stream": "^1.0.0",
-                "signal-exit": "^4.1.0",
-                "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0",
                 "yoctocolors-cjs": "^2.1.2"
             },
             "engines": {
@@ -1333,112 +1767,80 @@
             }
         },
         "node_modules/@inquirer/confirm": {
-            "version": "3.1.11",
-            "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz",
-            "integrity": "sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==",
+            "version": "3.1.22",
+            "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz",
+            "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^8.2.4",
-                "@inquirer/type": "^1.3.3"
+                "@inquirer/core": "^9.0.10",
+                "@inquirer/type": "^1.5.2"
             },
             "engines": {
                 "node": ">=18"
             }
         },
         "node_modules/@inquirer/core": {
-            "version": "8.2.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.4.tgz",
-            "integrity": "sha512-7vsXSfxtrrbwMTirfaKwPcjqJy7pzeuF/bP62yo1NQrRJ5HjmMlrhZml/Ljm9ODc1RnbhJlTeSnCkjtFddKjwA==",
+            "version": "9.2.1",
+            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz",
+            "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/figures": "^1.0.3",
-                "@inquirer/type": "^1.3.3",
+                "@inquirer/figures": "^1.0.6",
+                "@inquirer/type": "^2.0.0",
                 "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.9",
+                "@types/node": "^22.5.5",
                 "@types/wrap-ansi": "^3.0.0",
                 "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
                 "cli-width": "^4.1.0",
                 "mute-stream": "^1.0.0",
-                "picocolors": "^1.0.1",
                 "signal-exit": "^4.1.0",
                 "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0"
+                "wrap-ansi": "^6.2.0",
+                "yoctocolors-cjs": "^2.1.2"
             },
             "engines": {
                 "node": ">=18"
             }
         },
-        "node_modules/@inquirer/editor": {
-            "version": "2.1.15",
-            "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.15.tgz",
-            "integrity": "sha512-UmtZnY36rGLS/4cCzvdRmk0xxsGgH2AsF0v1SSlBZ3C5JK/Bxm2gNW8fmUVzQ5vm8kpdWASXPapbUx4iV49ScA==",
+        "node_modules/@inquirer/core/node_modules/@inquirer/type": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz",
+            "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^9.0.3",
-                "@inquirer/type": "^1.5.0",
-                "external-editor": "^3.1.0"
+                "mute-stream": "^1.0.0"
             },
             "engines": {
                 "node": ">=18"
             }
         },
-        "node_modules/@inquirer/editor/node_modules/@inquirer/core": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz",
-            "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==",
+        "node_modules/@inquirer/editor": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz",
+            "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.11",
-                "@types/wrap-ansi": "^3.0.0",
-                "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
-                "cli-width": "^4.1.0",
-                "mute-stream": "^1.0.0",
-                "signal-exit": "^4.1.0",
-                "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0",
-                "yoctocolors-cjs": "^2.1.2"
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/type": "^1.5.3",
+                "external-editor": "^3.1.0"
             },
             "engines": {
                 "node": ">=18"
             }
         },
         "node_modules/@inquirer/expand": {
-            "version": "2.1.15",
-            "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.15.tgz",
-            "integrity": "sha512-aBnnrBw9vbFJROUlDCsbq8H/plX6JHfPwLmSphxaVqOR+b1hgLdw+oRhZkpcJhG2AZOlc8IKzGdZhji93gQg4w==",
-            "dev": true,
-            "dependencies": {
-                "@inquirer/core": "^9.0.3",
-                "@inquirer/type": "^1.5.0",
-                "yoctocolors-cjs": "^2.1.2"
-            },
-            "engines": {
-                "node": ">=18"
-            }
-        },
-        "node_modules/@inquirer/expand/node_modules/@inquirer/core": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz",
-            "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz",
+            "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.11",
-                "@types/wrap-ansi": "^3.0.0",
-                "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
-                "cli-width": "^4.1.0",
-                "mute-stream": "^1.0.0",
-                "signal-exit": "^4.1.0",
-                "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0",
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/type": "^1.5.3",
                 "yoctocolors-cjs": "^2.1.2"
             },
             "engines": {
@@ -1446,140 +1848,105 @@
             }
         },
         "node_modules/@inquirer/figures": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.4.tgz",
-            "integrity": "sha512-R7Gsg6elpuqdn55fBH2y9oYzrU/yKrSmIsDX4ROT51vohrECFzTf2zw9BfUbOW8xjfmM2QbVoVYdTwhrtEKWSQ==",
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz",
+            "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=18"
             }
         },
         "node_modules/@inquirer/input": {
-            "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.2.2.tgz",
-            "integrity": "sha512-VjkzYSVH0606nLi9HHiSb4QYs2idwRgneiMoFoTAIwQ1Qwx6OIDugOYLtLta3gP8AWZx7qUvgDtj+/SJuiiKuQ==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz",
+            "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^9.0.3",
-                "@inquirer/type": "^1.5.0"
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/type": "^1.5.3"
             },
             "engines": {
                 "node": ">=18"
             }
         },
-        "node_modules/@inquirer/input/node_modules/@inquirer/core": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz",
-            "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==",
+        "node_modules/@inquirer/number": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz",
+            "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.11",
-                "@types/wrap-ansi": "^3.0.0",
-                "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
-                "cli-width": "^4.1.0",
-                "mute-stream": "^1.0.0",
-                "signal-exit": "^4.1.0",
-                "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0",
-                "yoctocolors-cjs": "^2.1.2"
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/type": "^1.5.3"
             },
             "engines": {
                 "node": ">=18"
             }
         },
         "node_modules/@inquirer/password": {
-            "version": "2.1.15",
-            "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.15.tgz",
-            "integrity": "sha512-/JmiTtIcSYbZdPucEW5q2rhC71vGKPivm3LFqNDQEI6lJyffq7hlfKKFC+R1Qp19dMqkaG+O5L1XmcHpmlAUUQ==",
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz",
+            "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^9.0.3",
-                "@inquirer/type": "^1.5.0",
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/type": "^1.5.3",
                 "ansi-escapes": "^4.3.2"
             },
             "engines": {
                 "node": ">=18"
             }
         },
-        "node_modules/@inquirer/password/node_modules/@inquirer/core": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz",
-            "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==",
-            "dev": true,
-            "dependencies": {
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.11",
-                "@types/wrap-ansi": "^3.0.0",
-                "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
-                "cli-width": "^4.1.0",
-                "mute-stream": "^1.0.0",
-                "signal-exit": "^4.1.0",
-                "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0",
-                "yoctocolors-cjs": "^2.1.2"
-            },
-            "engines": {
-                "node": ">=18"
-            }
-        },
         "node_modules/@inquirer/prompts": {
-            "version": "5.0.7",
-            "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.0.7.tgz",
-            "integrity": "sha512-GFcigCxJTKCH3aECzMIu4FhgLJWnFvMXzpI4CCSoELWFtkOOU2P+goYA61+OKpGrB8fPE7q6n8zAXBSlZRrHjQ==",
+            "version": "5.3.8",
+            "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz",
+            "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/checkbox": "^2.3.7",
-                "@inquirer/confirm": "^3.1.11",
-                "@inquirer/editor": "^2.1.11",
-                "@inquirer/expand": "^2.1.11",
-                "@inquirer/input": "^2.1.11",
-                "@inquirer/password": "^2.1.11",
-                "@inquirer/rawlist": "^2.1.11",
-                "@inquirer/select": "^2.3.7"
+                "@inquirer/checkbox": "^2.4.7",
+                "@inquirer/confirm": "^3.1.22",
+                "@inquirer/editor": "^2.1.22",
+                "@inquirer/expand": "^2.1.22",
+                "@inquirer/input": "^2.2.9",
+                "@inquirer/number": "^1.0.10",
+                "@inquirer/password": "^2.1.22",
+                "@inquirer/rawlist": "^2.2.4",
+                "@inquirer/search": "^1.0.7",
+                "@inquirer/select": "^2.4.7"
             },
             "engines": {
                 "node": ">=18"
             }
         },
         "node_modules/@inquirer/rawlist": {
-            "version": "2.1.15",
-            "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.1.15.tgz",
-            "integrity": "sha512-zwU6aWDMyuQNiY5Z0iYXkxi7pliRFXqUmiS7vG6lAGxqcbOSptYgIxGJnd3AU4Y91N0Tbt57+koJL0S2p6vSkA==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz",
+            "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^9.0.3",
-                "@inquirer/type": "^1.5.0",
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/type": "^1.5.3",
                 "yoctocolors-cjs": "^2.1.2"
             },
             "engines": {
                 "node": ">=18"
             }
         },
-        "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz",
-            "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==",
+        "node_modules/@inquirer/search": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz",
+            "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.11",
-                "@types/wrap-ansi": "^3.0.0",
-                "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
-                "cli-width": "^4.1.0",
-                "mute-stream": "^1.0.0",
-                "signal-exit": "^4.1.0",
-                "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0",
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/figures": "^1.0.5",
+                "@inquirer/type": "^1.5.3",
                 "yoctocolors-cjs": "^2.1.2"
             },
             "engines": {
@@ -1587,39 +1954,16 @@
             }
         },
         "node_modules/@inquirer/select": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.4.0.tgz",
-            "integrity": "sha512-iU1eRkHirVNs43zWk6anMIMKc7tCXlJ+I5DcpIV7JzMe+45TuPPOGGCgeGIkZ4xYJ3cXdFoh7GJpm84PNC8veg==",
-            "dev": true,
-            "dependencies": {
-                "@inquirer/core": "^9.0.3",
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "ansi-escapes": "^4.3.2",
-                "yoctocolors-cjs": "^2.1.2"
-            },
-            "engines": {
-                "node": ">=18"
-            }
-        },
-        "node_modules/@inquirer/select/node_modules/@inquirer/core": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.3.tgz",
-            "integrity": "sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==",
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz",
+            "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/figures": "^1.0.4",
-                "@inquirer/type": "^1.5.0",
-                "@types/mute-stream": "^0.0.4",
-                "@types/node": "^20.14.11",
-                "@types/wrap-ansi": "^3.0.0",
+                "@inquirer/core": "^9.1.0",
+                "@inquirer/figures": "^1.0.5",
+                "@inquirer/type": "^1.5.3",
                 "ansi-escapes": "^4.3.2",
-                "cli-spinners": "^2.9.2",
-                "cli-width": "^4.1.0",
-                "mute-stream": "^1.0.0",
-                "signal-exit": "^4.1.0",
-                "strip-ansi": "^6.0.1",
-                "wrap-ansi": "^6.2.0",
                 "yoctocolors-cjs": "^2.1.2"
             },
             "engines": {
@@ -1627,10 +1971,11 @@
             }
         },
         "node_modules/@inquirer/type": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.0.tgz",
-            "integrity": "sha512-L/UdayX9Z1lLN+itoTKqJ/X4DX5DaWu2Sruwt4XgZzMNv32x4qllbzMX4MbJlz0yxAQtU19UvABGOjmdq1u3qA==",
+            "version": "1.5.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz",
+            "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "mute-stream": "^1.0.0"
             },
@@ -1667,18 +2012,6 @@
                 "url": "https://github.com/chalk/ansi-regex?sponsor=1"
             }
         },
-        "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-            "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
-            "dev": true,
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
             "version": "9.2.2",
             "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@@ -1778,12 +2111,13 @@
             }
         },
         "node_modules/@listr2/prompt-adapter-inquirer": {
-            "version": "2.0.13",
-            "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.13.tgz",
-            "integrity": "sha512-nAl6teTt7EWSjttNavAnv3uFR3w3vPP3OTYmHyPNHzKhAj2NoBDHmbS3MGpvvO8KXXPASnHjEGrrKrdKTMKPnQ==",
+            "version": "2.0.15",
+            "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz",
+            "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@inquirer/type": "^1.3.3"
+                "@inquirer/type": "^1.5.1"
             },
             "engines": {
                 "node": ">=18.0.0"
@@ -1793,78 +2127,84 @@
             }
         },
         "node_modules/@lmdb/lmdb-darwin-arm64": {
-            "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.12.tgz",
-            "integrity": "sha512-vgTwzNUD3Hy4aqtGhX2+nV/usI0mwy3hDRuTjs8VcK0BLiMVEpNQXgzwlWEgPmA8AAPloUgyOs2nK5clJF5oIg==",
+            "version": "3.0.13",
+            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz",
+            "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "darwin"
             ]
         },
         "node_modules/@lmdb/lmdb-darwin-x64": {
-            "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.12.tgz",
-            "integrity": "sha512-qOt0hAhj2ZLY6aEWu85rzt5zcyCAQITMhCMEPNlo1tuYekpVAdkQNiwXxEkCjBYvwTskvXuwXOOUpjuSc+aJnA==",
+            "version": "3.0.13",
+            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz",
+            "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "darwin"
             ]
         },
         "node_modules/@lmdb/lmdb-linux-arm": {
-            "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.12.tgz",
-            "integrity": "sha512-Ggd/UXpE+alMncbELCXA3OKpDj9bDBR3qVO7WRTxstloDglRAHfZmUJgTkeaNKjFO1JHqS7AKy0jba9XebZB1w==",
+            "version": "3.0.13",
+            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz",
+            "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==",
             "cpu": [
                 "arm"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@lmdb/lmdb-linux-arm64": {
-            "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.12.tgz",
-            "integrity": "sha512-Qy4cFXFe9h1wAWMsojex8x1ifvw2kqiZv686YiRTdQEzAfc3vJASHFcD/QejHUCx7YHMYdnUoCS45rG2AiGDTQ==",
+            "version": "3.0.13",
+            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz",
+            "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@lmdb/lmdb-linux-x64": {
-            "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.12.tgz",
-            "integrity": "sha512-c+noT9IofktxktFllKHFmci8ka2SYGSLN17pj/KSl1hg7mmfAiGp4xxFxEwMLTb+SX95vP1DFiR++1I3WLVxvA==",
+            "version": "3.0.13",
+            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz",
+            "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@lmdb/lmdb-win32-x64": {
-            "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.12.tgz",
-            "integrity": "sha512-CO3MFV8gUx16NU/CyyuumAKblESwvoGVA2XhQKZ976OTOxaTbb8F8D3f0iiZ4MYqsN74jIrFuCmXpPnpjbhfOQ==",
+            "version": "3.0.13",
+            "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz",
+            "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "win32"
@@ -1949,9 +2289,10 @@
             ]
         },
         "node_modules/@ng-bootstrap/ng-bootstrap": {
-            "version": "17.0.0",
-            "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-17.0.0.tgz",
-            "integrity": "sha512-hTbBtozJlpevF1RO6J2adCoXiAkMTPV3wmXIyK05dVha4VsKjHibgaL6YldToKoh6ElQnIYkPEIJHX9z5EtyMw==",
+            "version": "17.0.1",
+            "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-17.0.1.tgz",
+            "integrity": "sha512-utbm8OXIoqVVYGVzQkOS773ymbjc+UMkXv8lyi7hTqLhCQs0rZ0yA74peqVZRuOGXLHgcSTA7fnJhA80iQOblw==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.3.0"
             },
@@ -2148,13 +2489,13 @@
             }
         },
         "node_modules/@playwright/test": {
-            "version": "1.46.0",
-            "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.46.0.tgz",
-            "integrity": "sha512-/QYft5VArOrGRP5pgkrfKksqsKA6CEFyGQ/gjNe6q0y4tZ1aaPfq4gIjudr1s3D+pXyrPRdsy4opKDrjBabE5w==",
+            "version": "1.49.1",
+            "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.1.tgz",
+            "integrity": "sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==",
             "dev": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "playwright": "1.46.0"
+                "playwright": "1.49.1"
             },
             "bin": {
                 "playwright": "cli.js"
@@ -2174,222 +2515,238 @@
             }
         },
         "node_modules/@rollup/rollup-android-arm-eabi": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
-            "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
+            "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
             "cpu": [
                 "arm"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "android"
             ]
         },
         "node_modules/@rollup/rollup-android-arm64": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
-            "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
+            "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "android"
             ]
         },
         "node_modules/@rollup/rollup-darwin-arm64": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
-            "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
+            "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "darwin"
             ]
         },
         "node_modules/@rollup/rollup-darwin-x64": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
-            "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
+            "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "darwin"
             ]
         },
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
-            "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
+            "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
             "cpu": [
                 "arm"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
-            "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
+            "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
             "cpu": [
                 "arm"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
-            "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
+            "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-arm64-musl": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
-            "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
+            "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
-            "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
+            "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
             "cpu": [
                 "ppc64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
-            "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
+            "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
             "cpu": [
                 "riscv64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-s390x-gnu": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
-            "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
+            "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
             "cpu": [
                 "s390x"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-x64-gnu": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
-            "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
+            "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-linux-x64-musl": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
-            "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
+            "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "linux"
             ]
         },
         "node_modules/@rollup/rollup-win32-arm64-msvc": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
-            "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
+            "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
             "cpu": [
                 "arm64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "win32"
             ]
         },
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
-            "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
+            "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
             "cpu": [
                 "ia32"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "win32"
             ]
         },
         "node_modules/@rollup/rollup-win32-x64-msvc": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
-            "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
+            "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
             "cpu": [
                 "x64"
             ],
             "dev": true,
+            "license": "MIT",
             "optional": true,
             "os": [
                 "win32"
             ]
         },
         "node_modules/@schematics/angular": {
-            "version": "18.1.3",
-            "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.1.3.tgz",
-            "integrity": "sha512-VyoL7O+3eL+BazmoWzexFpVy9k0MoOAmff3XqKLhP3/V7eXPc9s7znIDpPp28QF0V/Y2xMaGDWhqTx2CFcz4Qg==",
+            "version": "18.2.11",
+            "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.11.tgz",
+            "integrity": "sha512-jT54mc9+hPOwie9bji/g2krVuK1kkNh2PNFGwfgCg3Ofmt3hcyOBai1DKuot5uLTX4VCCbvfwiVR/hJniQl2SA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@angular-devkit/core": "18.1.3",
-                "@angular-devkit/schematics": "18.1.3",
+                "@angular-devkit/core": "18.2.11",
+                "@angular-devkit/schematics": "18.2.11",
                 "jsonc-parser": "3.3.1"
             },
             "engines": {
@@ -2622,18 +2979,19 @@
             "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz",
             "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/node": {
-            "version": "20.14.13",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.13.tgz",
-            "integrity": "sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==",
+            "version": "22.10.6",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.6.tgz",
+            "integrity": "sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "undici-types": "~5.26.4"
+                "undici-types": "~6.20.0"
             }
         },
         "node_modules/@types/unist": {
@@ -2646,7 +3004,8 @@
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",
             "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/@vitejs/plugin-basic-ssl": {
             "version": "1.1.0",
@@ -2725,15 +3084,16 @@
             }
         },
         "node_modules/ajv": {
-            "version": "8.16.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
-            "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+            "version": "8.17.1",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+            "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "fast-deep-equal": "^3.1.3",
+                "fast-uri": "^3.0.1",
                 "json-schema-traverse": "^1.0.0",
-                "require-from-string": "^2.0.2",
-                "uri-js": "^4.4.1"
+                "require-from-string": "^2.0.2"
             },
             "funding": {
                 "type": "github",
@@ -2757,20 +3117,12 @@
                 }
             }
         },
-        "node_modules/ansi-colors": {
-            "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
-            "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
-            "dev": true,
-            "engines": {
-                "node": ">=6"
-            }
-        },
         "node_modules/ansi-escapes": {
             "version": "4.3.2",
             "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
             "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "type-fest": "^0.21.3"
             },
@@ -2790,14 +3142,16 @@
             }
         },
         "node_modules/ansi-styles": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-            "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-            "dependencies": {
-                "color-convert": "^1.9.0"
-            },
+            "version": "6.2.1",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+            "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+            "dev": true,
+            "license": "MIT",
             "engines": {
-                "node": ">=4"
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
         "node_modules/anymatch": {
@@ -2908,9 +3262,9 @@
             }
         },
         "node_modules/browserslist": {
-            "version": "4.23.2",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
-            "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
+            "version": "4.24.2",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
+            "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -2925,11 +3279,12 @@
                     "url": "https://github.com/sponsors/ai"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
-                "caniuse-lite": "^1.0.30001640",
-                "electron-to-chromium": "^1.4.820",
-                "node-releases": "^2.0.14",
-                "update-browserslist-db": "^1.1.0"
+                "caniuse-lite": "^1.0.30001669",
+                "electron-to-chromium": "^1.5.41",
+                "node-releases": "^2.0.18",
+                "update-browserslist-db": "^1.1.1"
             },
             "bin": {
                 "browserslist": "cli.js"
@@ -2991,9 +3346,9 @@
             "dev": true
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001642",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz",
-            "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==",
+            "version": "1.0.30001677",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz",
+            "integrity": "sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -3007,20 +3362,8 @@
                     "type": "github",
                     "url": "https://github.com/sponsors/ai"
                 }
-            ]
-        },
-        "node_modules/chalk": {
-            "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-            "dependencies": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
-            },
-            "engines": {
-                "node": ">=4"
-            }
+            ],
+            "license": "CC-BY-4.0"
         },
         "node_modules/character-entities": {
             "version": "2.0.2",
@@ -3036,7 +3379,8 @@
             "version": "0.7.0",
             "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
             "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/chokidar": {
             "version": "3.6.0",
@@ -3080,15 +3424,16 @@
             }
         },
         "node_modules/cli-cursor": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
-            "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+            "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "restore-cursor": "^4.0.0"
+                "restore-cursor": "^5.0.0"
             },
             "engines": {
-                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+                "node": ">=18"
             },
             "funding": {
                 "url": "https://github.com/sponsors/sindresorhus"
@@ -3126,6 +3471,7 @@
             "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
             "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
             "dev": true,
+            "license": "ISC",
             "engines": {
                 "node": ">= 12"
             }
@@ -3156,34 +3502,18 @@
         },
         "node_modules/cliui/node_modules/ansi-styles": {
             "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dependencies": {
-                "color-convert": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
-        "node_modules/cliui/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
             "dependencies": {
-                "color-name": "~1.1.4"
+                "color-convert": "^2.0.1"
             },
             "engines": {
-                "node": ">=7.0.0"
+                "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/cliui/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-        },
         "node_modules/cliui/node_modules/emoji-regex": {
             "version": "8.0.0",
             "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -3240,17 +3570,22 @@
             "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w=="
         },
         "node_modules/color-convert": {
-            "version": "1.9.3",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "license": "MIT",
             "dependencies": {
-                "color-name": "1.1.3"
+                "color-name": "~1.1.4"
+            },
+            "engines": {
+                "node": ">=7.0.0"
             }
         },
         "node_modules/color-name": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-            "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+            "license": "MIT"
         },
         "node_modules/colorette": {
             "version": "2.0.20",
@@ -3333,24 +3668,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/critters/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/critters/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
-        },
         "node_modules/critters/node_modules/has-flag": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -4084,9 +4401,10 @@
             "dev": true
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.4.829",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.829.tgz",
-            "integrity": "sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw=="
+            "version": "1.5.50",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz",
+            "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==",
+            "license": "ISC"
         },
         "node_modules/elkjs": {
             "version": "0.9.3",
@@ -4150,6 +4468,19 @@
                 "node": ">=6"
             }
         },
+        "node_modules/environment": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
+            "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/err-code": {
             "version": "2.0.3",
             "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
@@ -4195,21 +4526,14 @@
             }
         },
         "node_modules/escalade": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-            "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+            "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
         },
-        "node_modules/escape-string-regexp": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-            "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-            "engines": {
-                "node": ">=0.8.0"
-            }
-        },
         "node_modules/eventemitter3": {
             "version": "5.0.1",
             "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
@@ -4227,6 +4551,7 @@
             "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
             "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "chardet": "^0.7.0",
                 "iconv-lite": "^0.4.24",
@@ -4256,6 +4581,13 @@
                 "node": ">=8.6.0"
             }
         },
+        "node_modules/fast-uri": {
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
+            "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==",
+            "dev": true,
+            "license": "BSD-3-Clause"
+        },
         "node_modules/fastq": {
             "version": "1.17.1",
             "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -4413,14 +4745,6 @@
             "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
             "dev": true
         },
-        "node_modules/has-flag": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-            "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-            "engines": {
-                "node": ">=4"
-            }
-        },
         "node_modules/hasown": {
             "version": "2.0.2",
             "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -4507,6 +4831,7 @@
             "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
             "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "safer-buffer": ">= 2.1.2 < 3"
             },
@@ -4722,7 +5047,8 @@
         "node_modules/js-tokens": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+            "license": "MIT"
         },
         "node_modules/jsbn": {
             "version": "1.1.0",
@@ -4731,14 +5057,15 @@
             "dev": true
         },
         "node_modules/jsesc": {
-            "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-            "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+            "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+            "license": "MIT",
             "bin": {
                 "jsesc": "bin/jsesc"
             },
             "engines": {
-                "node": ">=4"
+                "node": ">=6"
             }
         },
         "node_modules/json-parse-even-better-errors": {
@@ -4819,15 +5146,16 @@
             "optional": true
         },
         "node_modules/listr2": {
-            "version": "8.2.3",
-            "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz",
-            "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==",
+            "version": "8.2.4",
+            "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz",
+            "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "cli-truncate": "^4.0.0",
                 "colorette": "^2.0.20",
                 "eventemitter3": "^5.0.1",
-                "log-update": "^6.0.0",
+                "log-update": "^6.1.0",
                 "rfdc": "^1.4.1",
                 "wrap-ansi": "^9.0.0"
             },
@@ -4847,18 +5175,6 @@
                 "url": "https://github.com/chalk/ansi-regex?sponsor=1"
             }
         },
-        "node_modules/listr2/node_modules/ansi-styles": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-            "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
-            "dev": true,
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/listr2/node_modules/strip-ansi": {
             "version": "7.1.0",
             "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
@@ -4892,11 +5208,12 @@
             }
         },
         "node_modules/lmdb": {
-            "version": "3.0.12",
-            "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.12.tgz",
-            "integrity": "sha512-JnoEulTgveoC64vlYJ9sufGLuNkk6TcxSYpKxSC9aM42I61jIv3pQH0fgb6qW7HV0+FNqA3g1WCQQYfhfawGoQ==",
+            "version": "3.0.13",
+            "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz",
+            "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==",
             "dev": true,
             "hasInstallScript": true,
+            "license": "MIT",
             "dependencies": {
                 "msgpackr": "^1.10.2",
                 "node-addon-api": "^6.1.0",
@@ -4908,12 +5225,12 @@
                 "download-lmdb-prebuilds": "bin/download-prebuilds.js"
             },
             "optionalDependencies": {
-                "@lmdb/lmdb-darwin-arm64": "3.0.12",
-                "@lmdb/lmdb-darwin-x64": "3.0.12",
-                "@lmdb/lmdb-linux-arm": "3.0.12",
-                "@lmdb/lmdb-linux-arm64": "3.0.12",
-                "@lmdb/lmdb-linux-x64": "3.0.12",
-                "@lmdb/lmdb-win32-x64": "3.0.12"
+                "@lmdb/lmdb-darwin-arm64": "3.0.13",
+                "@lmdb/lmdb-darwin-x64": "3.0.13",
+                "@lmdb/lmdb-linux-arm": "3.0.13",
+                "@lmdb/lmdb-linux-arm64": "3.0.13",
+                "@lmdb/lmdb-linux-x64": "3.0.13",
+                "@lmdb/lmdb-win32-x64": "3.0.13"
             }
         },
         "node_modules/lodash-es": {
@@ -4966,22 +5283,6 @@
                 "url": "https://github.com/chalk/chalk?sponsor=1"
             }
         },
-        "node_modules/log-symbols/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/log-symbols/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-        },
         "node_modules/log-symbols/node_modules/has-flag": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -5002,14 +5303,15 @@
             }
         },
         "node_modules/log-update": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz",
-            "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==",
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
+            "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "ansi-escapes": "^6.2.0",
-                "cli-cursor": "^4.0.0",
-                "slice-ansi": "^7.0.0",
+                "ansi-escapes": "^7.0.0",
+                "cli-cursor": "^5.0.0",
+                "slice-ansi": "^7.1.0",
                 "strip-ansi": "^7.1.0",
                 "wrap-ansi": "^9.0.0"
             },
@@ -5021,22 +5323,27 @@
             }
         },
         "node_modules/log-update/node_modules/ansi-escapes": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz",
-            "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==",
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
+            "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
             "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "environment": "^1.0.0"
+            },
             "engines": {
-                "node": ">=14.16"
+                "node": ">=18"
             },
             "funding": {
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
         "node_modules/log-update/node_modules/ansi-regex": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-            "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+            "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=12"
             },
@@ -5044,23 +5351,12 @@
                 "url": "https://github.com/chalk/ansi-regex?sponsor=1"
             }
         },
-        "node_modules/log-update/node_modules/ansi-styles": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-            "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
-            "dev": true,
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/log-update/node_modules/is-fullwidth-code-point": {
             "version": "5.0.0",
             "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
             "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "get-east-asian-width": "^1.0.0"
             },
@@ -5076,6 +5372,7 @@
             "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
             "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^6.2.1",
                 "is-fullwidth-code-point": "^5.0.0"
@@ -5092,6 +5389,7 @@
             "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
             "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-regex": "^6.0.1"
             },
@@ -5107,6 +5405,7 @@
             "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
             "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^6.2.1",
                 "string-width": "^7.0.0",
@@ -5128,12 +5427,13 @@
             }
         },
         "node_modules/magic-string": {
-            "version": "0.30.10",
-            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
-            "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+            "version": "0.30.11",
+            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
+            "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "@jridgewell/sourcemap-codec": "^1.4.15"
+                "@jridgewell/sourcemap-codec": "^1.5.0"
             }
         },
         "node_modules/make-error": {
@@ -5722,6 +6022,19 @@
                 "node": ">=6"
             }
         },
+        "node_modules/mimic-function": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+            "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
         "node_modules/minimatch": {
             "version": "9.0.5",
             "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -5968,6 +6281,7 @@
             "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
             "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
             "dev": true,
+            "license": "ISC",
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
@@ -6165,17 +6479,18 @@
             }
         },
         "node_modules/ngx-markdown": {
-            "version": "18.0.0",
-            "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-18.0.0.tgz",
-            "integrity": "sha512-sFR9dIOKobdhNKZTlCrX3RmpoAhZ7k3T9h7oWJP676Oe9BsoxuAYZKJmFDT20vrY6xmFD3WtLJDZR7rNRLf6Uw==",
+            "version": "18.1.0",
+            "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-18.1.0.tgz",
+            "integrity": "sha512-n4HFSm5oqVMXFuD+WXIVkI6NyxD8Oubr4B3c9U1J7Ptr6t9DVnkNBax3yxWc+8Wli+FXTuGEnDXzB3sp7E9paA==",
+            "license": "MIT",
             "dependencies": {
                 "tslib": "^2.3.0"
             },
             "optionalDependencies": {
                 "clipboard": "^2.0.11",
-                "emoji-toolkit": "^8.0.0",
+                "emoji-toolkit": ">= 8.0.0 < 10.0.0",
                 "katex": "^0.16.0",
-                "mermaid": "^10.6.0",
+                "mermaid": ">= 10.6.0 < 12.0.0",
                 "prismjs": "^1.28.0"
             },
             "peerDependencies": {
@@ -6266,9 +6581,10 @@
             }
         },
         "node_modules/node-releases": {
-            "version": "2.0.17",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz",
-            "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA=="
+            "version": "2.0.18",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+            "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+            "license": "MIT"
         },
         "node_modules/non-layered-tidy-tree-layout": {
             "version": "2.0.2",
@@ -6347,10 +6663,11 @@
             }
         },
         "node_modules/npm-package-arg": {
-            "version": "11.0.2",
-            "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz",
-            "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==",
+            "version": "11.0.3",
+            "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz",
+            "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "hosted-git-info": "^7.0.0",
                 "proc-log": "^4.0.0",
@@ -6374,10 +6691,11 @@
             }
         },
         "node_modules/npm-pick-manifest": {
-            "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz",
-            "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==",
+            "version": "9.1.0",
+            "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz",
+            "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "npm-install-checks": "^6.0.0",
                 "npm-normalize-package-bin": "^3.0.0",
@@ -6495,22 +6813,6 @@
                 "node": ">=8"
             }
         },
-        "node_modules/ora/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/ora/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-        },
         "node_modules/ora/node_modules/has-flag": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6558,6 +6860,7 @@
             "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
             "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
@@ -6695,9 +6998,10 @@
             "dev": true
         },
         "node_modules/picocolors": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-            "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+            "license": "ISC"
         },
         "node_modules/picomatch": {
             "version": "4.0.2",
@@ -6721,13 +7025,13 @@
             }
         },
         "node_modules/playwright": {
-            "version": "1.46.0",
-            "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.46.0.tgz",
-            "integrity": "sha512-XYJ5WvfefWONh1uPAUAi0H2xXV5S3vrtcnXe6uAOgdGi3aSpqOSXX08IAjXW34xitfuOJsvXU5anXZxPSEQiJw==",
+            "version": "1.49.1",
+            "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz",
+            "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==",
             "dev": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "playwright-core": "1.46.0"
+                "playwright-core": "1.49.1"
             },
             "bin": {
                 "playwright": "cli.js"
@@ -6740,9 +7044,9 @@
             }
         },
         "node_modules/playwright-core": {
-            "version": "1.46.0",
-            "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.46.0.tgz",
-            "integrity": "sha512-9Y/d5UIwuJk8t3+lhmMSAJyNP1BUC/DqP3cQJDQQL/oWqAiuPTLgy7Q5dzglmTLwcBRdetzgNM/gni7ckfTr6A==",
+            "version": "1.49.1",
+            "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz",
+            "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==",
             "dev": true,
             "license": "Apache-2.0",
             "bin": {
@@ -6767,9 +7071,9 @@
             }
         },
         "node_modules/postcss": {
-            "version": "8.4.39",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
-            "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
+            "version": "8.4.47",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
+            "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
             "dev": true,
             "funding": [
                 {
@@ -6785,10 +7089,11 @@
                     "url": "https://github.com/sponsors/ai"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
                 "nanoid": "^3.3.7",
-                "picocolors": "^1.0.1",
-                "source-map-js": "^1.2.0"
+                "picocolors": "^1.1.0",
+                "source-map-js": "^1.2.1"
             },
             "engines": {
                 "node": "^10 || ^12 || >=14"
@@ -6938,26 +7243,37 @@
             }
         },
         "node_modules/restore-cursor": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
-            "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+            "version": "5.1.0",
+            "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+            "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "onetime": "^5.1.0",
-                "signal-exit": "^3.0.2"
+                "onetime": "^7.0.0",
+                "signal-exit": "^4.1.0"
             },
             "engines": {
-                "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+                "node": ">=18"
             },
             "funding": {
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/restore-cursor/node_modules/signal-exit": {
-            "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-            "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-            "dev": true
+        "node_modules/restore-cursor/node_modules/onetime": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+            "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "mimic-function": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
         },
         "node_modules/retry": {
             "version": "0.12.0",
@@ -6990,10 +7306,11 @@
             "optional": true
         },
         "node_modules/rollup": {
-            "version": "4.18.0",
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
-            "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
+            "version": "4.22.4",
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
+            "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "@types/estree": "1.0.5"
             },
@@ -7005,22 +7322,22 @@
                 "npm": ">=8.0.0"
             },
             "optionalDependencies": {
-                "@rollup/rollup-android-arm-eabi": "4.18.0",
-                "@rollup/rollup-android-arm64": "4.18.0",
-                "@rollup/rollup-darwin-arm64": "4.18.0",
-                "@rollup/rollup-darwin-x64": "4.18.0",
-                "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
-                "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
-                "@rollup/rollup-linux-arm64-gnu": "4.18.0",
-                "@rollup/rollup-linux-arm64-musl": "4.18.0",
-                "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
-                "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
-                "@rollup/rollup-linux-s390x-gnu": "4.18.0",
-                "@rollup/rollup-linux-x64-gnu": "4.18.0",
-                "@rollup/rollup-linux-x64-musl": "4.18.0",
-                "@rollup/rollup-win32-arm64-msvc": "4.18.0",
-                "@rollup/rollup-win32-ia32-msvc": "4.18.0",
-                "@rollup/rollup-win32-x64-msvc": "4.18.0",
+                "@rollup/rollup-android-arm-eabi": "4.22.4",
+                "@rollup/rollup-android-arm64": "4.22.4",
+                "@rollup/rollup-darwin-arm64": "4.22.4",
+                "@rollup/rollup-darwin-x64": "4.22.4",
+                "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
+                "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
+                "@rollup/rollup-linux-arm64-gnu": "4.22.4",
+                "@rollup/rollup-linux-arm64-musl": "4.22.4",
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
+                "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
+                "@rollup/rollup-linux-s390x-gnu": "4.22.4",
+                "@rollup/rollup-linux-x64-gnu": "4.22.4",
+                "@rollup/rollup-linux-x64-musl": "4.22.4",
+                "@rollup/rollup-win32-arm64-msvc": "4.22.4",
+                "@rollup/rollup-win32-ia32-msvc": "4.22.4",
+                "@rollup/rollup-win32-x64-msvc": "4.22.4",
                 "fsevents": "~2.3.2"
             }
         },
@@ -7121,9 +7438,10 @@
             "optional": true
         },
         "node_modules/semver": {
-            "version": "7.6.2",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-            "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+            "version": "7.6.3",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+            "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+            "license": "ISC",
             "bin": {
                 "semver": "bin/semver.js"
             },
@@ -7197,18 +7515,6 @@
                 "url": "https://github.com/chalk/slice-ansi?sponsor=1"
             }
         },
-        "node_modules/slice-ansi/node_modules/ansi-styles": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-            "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
-            "dev": true,
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-            }
-        },
         "node_modules/smart-buffer": {
             "version": "4.2.0",
             "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
@@ -7256,10 +7562,11 @@
             }
         },
         "node_modules/source-map-js": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
-            "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+            "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
             "dev": true,
+            "license": "BSD-3-Clause",
             "engines": {
                 "node": ">=0.10.0"
             }
@@ -7426,17 +7733,6 @@
             "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==",
             "optional": true
         },
-        "node_modules/supports-color": {
-            "version": "5.5.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-            "dependencies": {
-                "has-flag": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=4"
-            }
-        },
         "node_modules/supports-preserve-symlinks-flag": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -7537,6 +7833,7 @@
             "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
             "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "os-tmpdir": "~1.0.2"
             },
@@ -7544,14 +7841,6 @@
                 "node": ">=0.6.0"
             }
         },
-        "node_modules/to-fast-properties": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-            "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-            "engines": {
-                "node": ">=4"
-            }
-        },
         "node_modules/to-regex-range": {
             "version": "5.0.1",
             "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -7664,9 +7953,10 @@
             }
         },
         "node_modules/tslib": {
-            "version": "2.6.3",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-            "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
+            "version": "2.8.1",
+            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+            "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+            "license": "0BSD"
         },
         "node_modules/tuf-js": {
             "version": "2.2.1",
@@ -7687,6 +7977,7 @@
             "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
             "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
             "dev": true,
+            "license": "(MIT OR CC0-1.0)",
             "engines": {
                 "node": ">=10"
             },
@@ -7706,20 +7997,12 @@
                 "node": ">=14.17"
             }
         },
-        "node_modules/undici": {
-            "version": "6.19.2",
-            "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.2.tgz",
-            "integrity": "sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==",
-            "dev": true,
-            "engines": {
-                "node": ">=18.17"
-            }
-        },
         "node_modules/undici-types": {
-            "version": "5.26.5",
-            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
-            "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
-            "dev": true
+            "version": "6.20.0",
+            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+            "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/unique-filename": {
             "version": "3.0.0",
@@ -7759,9 +8042,9 @@
             }
         },
         "node_modules/update-browserslist-db": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-            "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+            "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
             "funding": [
                 {
                     "type": "opencollective",
@@ -7776,9 +8059,10 @@
                     "url": "https://github.com/sponsors/ai"
                 }
             ],
+            "license": "MIT",
             "dependencies": {
-                "escalade": "^3.1.2",
-                "picocolors": "^1.0.1"
+                "escalade": "^3.2.0",
+                "picocolors": "^1.1.0"
             },
             "bin": {
                 "update-browserslist-db": "cli.js"
@@ -7866,14 +8150,15 @@
             }
         },
         "node_modules/vite": {
-            "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz",
-            "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==",
+            "version": "5.4.6",
+            "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz",
+            "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "esbuild": "^0.21.3",
-                "postcss": "^8.4.38",
-                "rollup": "^4.13.0"
+                "postcss": "^8.4.43",
+                "rollup": "^4.20.0"
             },
             "bin": {
                 "vite": "bin/vite.js"
@@ -7892,6 +8177,7 @@
                 "less": "*",
                 "lightningcss": "^1.21.0",
                 "sass": "*",
+                "sass-embedded": "*",
                 "stylus": "*",
                 "sugarss": "*",
                 "terser": "^5.4.0"
@@ -7909,6 +8195,9 @@
                 "sass": {
                     "optional": true
                 },
+                "sass-embedded": {
+                    "optional": true
+                },
                 "stylus": {
                     "optional": true
                 },
@@ -7973,6 +8262,7 @@
             "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
             "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.0.0",
                 "string-width": "^4.1.0",
@@ -8015,24 +8305,6 @@
                 "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/wrap-ansi-cjs/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
-        },
         "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
             "version": "8.0.0",
             "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -8067,6 +8339,7 @@
             "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
             "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "color-convert": "^2.0.1"
             },
@@ -8077,35 +8350,19 @@
                 "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/wrap-ansi/node_modules/color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "dependencies": {
-                "color-name": "~1.1.4"
-            },
-            "engines": {
-                "node": ">=7.0.0"
-            }
-        },
-        "node_modules/wrap-ansi/node_modules/color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
-        },
         "node_modules/wrap-ansi/node_modules/emoji-regex": {
             "version": "8.0.0",
             "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
             "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-            "dev": true
+            "dev": true,
+            "license": "MIT"
         },
         "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
             "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=8"
             }
@@ -8115,6 +8372,7 @@
             "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
             "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "emoji-regex": "^8.0.0",
                 "is-fullwidth-code-point": "^3.0.0",
@@ -8202,6 +8460,7 @@
             "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
             "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=18"
             },
diff --git a/package.json b/package.json
index 46d2f4e538ed01e5734276927e16c9840115d052..8a0380c75ae3da282f17f5939a36c29f689a6c6a 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
         "@angular/platform-browser": "18.1.0",
         "@angular/platform-browser-dynamic": "18.1.0",
         "@angular/router": "18.1.0",
-        "@ng-bootstrap/ng-bootstrap": "17.0.0",
+        "@ng-bootstrap/ng-bootstrap": "17.0.1",
         "boosted": "5.3.3",
         "marked": "^12.0.0",
         "ng-process-env": "^16.0.6",
@@ -28,12 +28,12 @@
     },
     "devDependencies": {
         "@angular/build": "^18.1.0",
-        "@angular/cli": "18.1.3",
+        "@angular/cli": "18.2.11",
         "@angular/compiler-cli": "18.1.0",
         "@angular/language-service": "18.1.0",
-        "@biomejs/biome": "1.8.3",
+        "@biomejs/biome": "1.9.4",
         "@playwright/test": "^1.45.2",
-        "@types/node": "20.14.13",
+        "@types/node": "22.10.6",
         "ts-node": "10.9.2",
         "typescript": "^5.4.5"
     }
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 3b63ee823486cfbb21650797ab160c1abd646fcd..53012e8dfba94a0ff295e2488a26d91c0595dfe0 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -41,6 +41,6 @@
 
 <footer class="footer navbar-dark bg-dark mt-4 py-2">
   <div class="container">
-    <span class="text-muted">© Orange 2019</span>
+    <!-- <span class="text-muted">© copyright here</span> -->
   </div>
 </footer>
diff --git a/src/app/gitlab-ci/gitlab-ci.component.css b/src/app/gitlab-ci/gitlab-ci.component.css
index 6b112f5799bf42ba50020116678f7b0b03a7f53d..c1781b96616a4e776440349a3a63ae3023b11044 100644
--- a/src/app/gitlab-ci/gitlab-ci.component.css
+++ b/src/app/gitlab-ci/gitlab-ci.component.css
@@ -28,6 +28,7 @@ div {
 pre {
   color: inherit;
   margin: 0;
+  font-size: .875rem;
 }
 .comment {
   font-style: italic;
diff --git a/src/app/gitlab-ci/gitlab-ci.component.html b/src/app/gitlab-ci/gitlab-ci.component.html
index 7eb85b2add77f6079e5a59dee0ef2dd635d58bb3..5a26476f246aee2a6e7a0c136144d0662ea833b9 100644
--- a/src/app/gitlab-ci/gitlab-ci.component.html
+++ b/src/app/gitlab-ci/gitlab-ci.component.html
@@ -216,7 +216,7 @@
             <pre class="comment">
   # {{ template.name }} template ({{ variant.name }} variant)</pre
             >
-            <pre>  - <span class="key">component</span>: "<span class="value">{{ serverHost }}/{{ variant.project.path }}/{{ variant.templateFile }}&#64;{{ variant.project.getLatestVersion(options.versionMode) }}</span>"</pre>
+            <pre>  - <span class="key">component</span>: "<span class="value">$CI_SERVER_FQDN/{{ variant.project.path }}/{{ variant.templateFile }}&#64;{{ variant.project.getLatestVersion(options.versionMode) }}</span>"</pre>
             <div [class.hide]="!hasInputs(variant)">
               <pre>    <span class="key">inputs</span>:</pre>
               <div class="elements">
diff --git a/src/app/stepbar/stepbar.component.css b/src/app/stepbar/stepbar.component.css
index ead5a5d5e6231de2969d486c8140ce7fe53354f1..9c22ce0ae3177eb502e6dde06ef6175db4fa5220 100644
--- a/src/app/stepbar/stepbar.component.css
+++ b/src/app/stepbar/stepbar.component.css
@@ -83,3 +83,12 @@
   z-index: 1;
 }
 
+.stepped-process-item.active {
+  background-color: #ea7070 !important;
+}
+.stepped-process-item.active a {
+  color: #ffffff !important;
+}
+.stepped-process-item a {
+  text-decoration: none;
+}
diff --git a/src/app/variable-editor/variable-editor.component.css b/src/app/variable-editor/variable-editor.component.css
index 439b012980732f3af7dd2aff6543efd265255f04..2dcb57a5fa65e91dc430f5b42fd720911fd13f6a 100644
--- a/src/app/variable-editor/variable-editor.component.css
+++ b/src/app/variable-editor/variable-editor.component.css
@@ -25,7 +25,7 @@ input:invalid {
 }
 .form-group.advanced>.col-form-label::after {
   content: "ADV.";
-  color: #f16e00;
+  color: #ea7070;
   font-weight: normal;
   position: relative;
   top: -0.5em;
diff --git a/src/assets/img/tbc-50.png b/src/assets/img/tbc-50.png
index ddd04245f3a5148de3586479b3b723359c195803..0d0913eeb2ddadee5a87fc1e8778d769ef40b8c3 100644
Binary files a/src/assets/img/tbc-50.png and b/src/assets/img/tbc-50.png differ
diff --git a/src/assets/kicker-aggregated.json b/src/assets/kicker-aggregated.json
index ae911b8a61f1fb39161678efe2e7851f11b721ae..73f801333fa2ced0a73ce9cac7cc688c15ca9810 100644
--- a/src/assets/kicker-aggregated.json
+++ b/src/assets/kicker-aggregated.json
@@ -1,8955 +1 @@
-{
-  "extensions": [],
-  "presets": [
-    {
-      "name": "OpenShift Sandbox",
-      "description": "[OpenShift Sandbox](https://developers.redhat.com/developer-sandbox) by RedHat",
-      "values": {
-        "OS_URL": "https://api.sandbox.x8i5.p1.openshiftapps.com:6443",
-        "OS_ENVIRONMENT_URL": "https://%{environment_name}.apps.sandbox.x8i5.p1.openshiftapps.com",
-        "K8S_URL": "https://api.sandbox.x8i5.p1.openshiftapps.com:6443",
-        "K8S_ENVIRONMENT_URL": "https://%{environment_name}.apps.sandbox.x8i5.p1.openshiftapps.com"
-      },
-      "extension_id": null,
-      "project": {
-        "tag": "1.0.0",
-        "tags": ["1.0.0"],
-        "name": "kicker-extras",
-        "path": "to-be-continuous/tools/kicker-extras",
-        "web_url": "https://gitlab.com/to-be-continuous/tools/kicker-extras"
-      }
-    },
-    {
-      "name": "SonarCloud",
-      "description": "[SonarCloud](https://www.sonarsource.com/products/sonarcloud/) (SaaS)",
-      "values": { "SONAR_HOST_URL": "https://sonarcloud.io" },
-      "extension_id": null,
-      "project": {
-        "tag": "1.0.0",
-        "tags": ["1.0.0"],
-        "name": "kicker-extras",
-        "path": "to-be-continuous/tools/kicker-extras",
-        "web_url": "https://gitlab.com/to-be-continuous/tools/kicker-extras"
-      }
-    }
-  ],
-  "templates": [
-    {
-      "name": "Angular",
-      "description": "Build, test and analyse your [Angular](https://angular.io/) projects",
-      "template_path": "templates/gitlab-ci-angular.yml",
-      "kind": "build",
-      "prefix": "ng",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "NG_CLI_IMAGE",
-          "description": "The Docker image used to run Angular-CLI (`ng`) - **set the version required by your project**",
-          "default": "registry.hub.docker.com/trion/ng-cli-karma:latest"
-        },
-        {
-          "name": "NPM_CONFIG_REGISTRY",
-          "description": "NPM [registry](https://docs.npmjs.com/configuring-your-registry-settings-as-an-npm-enterprise-user)",
-          "type": "url",
-          "advanced": true
-        },
-        {
-          "name": "NPM_CONFIG_SCOPED_REGISTRIES",
-          "description": "Space separated list of NPM [scoped registries](https://docs.npmjs.com/cli/v8/using-npm/scope#associating-a-scope-with-a-registry) (formatted as `@somescope:https://some.npm.registry/some/repo @anotherscope:https://another.npm.registry/another/repo`)",
-          "advanced": true
-        },
-        {
-          "name": "NG_WORKSPACE_DIR",
-          "description": "Angular workspace directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "NG_INSTALL_EXTRA_OPTS",
-          "description": "Extra options to install project dependencies (with [`npm ci`](https://docs.npmjs.com/cli/ci.html/))",
-          "advanced": true
-        },
-        {
-          "name": "NG_BUILD_ARGS",
-          "description": "Angular [ng build](https://angular.io/cli/build) arguments",
-          "default": "build",
-          "advanced": true
-        },
-        {
-          "name": "NG_TEST_ARGS",
-          "description": "Angular [ng test](https://angular.io/cli/test) arguments",
-          "default": "test --code-coverage --reporters progress,junit --watch=false --no-progress",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "lint",
-          "name": "Angular lint",
-          "description": "Angular lint analysis",
-          "disable_with": "NG_LINT_DISABLED",
-          "variables": [
-            {
-              "name": "NG_LINT_ARGS",
-              "description": "Angular [ng lint](https://angular.io/cli/lint) arguments",
-              "default": "lint",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "publish",
-          "name": "Publish",
-          "description": "[publishes](https://docs.npmjs.com/cli/v6/commands/npm-publish) the project packages to a npm registry",
-          "enable_with": "NG_PUBLISH_ENABLED",
-          "variables": [
-            {
-              "name": "NG_PUBLISH_ARGS",
-              "description": "npm [publish](https://docs.npmjs.com/cli/v6/commands/npm-publish) arguments",
-              "advanced": true
-            },
-            {
-              "name": "NG_PUBLISH_PROJECTS",
-              "description": "Space separated list of projects to publish. If no project is specified, all workspace projects are published.",
-              "advanced": true
-            },
-            {
-              "name": "NPM_PUBLISH_REGISTRY",
-              "description": "npm registry to publish to. If none is specified, uses GitLab project npm packages registry",
-              "secret": true
-            },
-            {
-              "name": "NPM_PUBLISH_TOKEN",
-              "description": "NPM publication registry authentication token",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "e2e-test",
-          "name": "e2e-test",
-          "description": "Run your [e2e tests](https://angular.io/cli/e2e) on your angular project",
-          "enable_with": "NG_E2E_ENABLED",
-          "variables": [
-            {
-              "name": "NG_E2E_ARGS",
-              "description": "ng [e2e](https://angular.io/cli/e2e) arguments",
-              "default": "e2e",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [@cyclonedx/cyclonedx-npm](https://www.npmjs.com/package/@cyclonedx/cyclonedx-npm)",
-          "disable_with": "NG_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "NG_SBOM_VERSION",
-              "description": "Version of the @cyclonedx/cyclonedx-npm used for SBOM analysis",
-              "advanced": true
-            },
-            {
-              "name": "NG_SBOM_OPTS",
-              "description": "Options for @cyclonedx/cyclonedx-npm used for SBOM analysis",
-              "default": "--omit dev",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "4.8.0",
-        "tags": [
-          "4.8.0",
-          "4.8",
-          "4.7.0",
-          "4.7",
-          "4.6.0",
-          "4.6",
-          "4.5.1",
-          "4.5.0",
-          "4.5",
-          "4.4.0",
-          "4.4",
-          "4.3.2",
-          "4.3.1",
-          "4.3.0",
-          "4.3",
-          "4.2.3",
-          "4.2.2",
-          "4.2.1",
-          "4.2.0",
-          "4.2",
-          "4.1.1",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.2.0",
-          "2.2",
-          "2.1.0",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.0",
-          "1.1.0",
-          "1.0.1",
-          "1.0.0"
-        ],
-        "name": "angular",
-        "path": "to-be-continuous/angular",
-        "web_url": "https://gitlab.com/to-be-continuous/angular",
-        "avatar": "https://gitlab.com/to-be-continuous/angular/-/avatar"
-      }
-    },
-    {
-      "name": "Ansible",
-      "description": "Provision your infrastructure and deploy your application with [Ansible](https://www.ansible.com/)",
-      "template_path": "templates/gitlab-ci-ansible.yml",
-      "kind": "hosting",
-      "prefix": "ansible",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "ANSIBLE_IMAGE",
-          "description": "The Docker image used to run Ansible. The image may contain your Ansible sources. **set the version required by your project**",
-          "default": "registry.hub.docker.com/cytopia/ansible:latest-tools"
-        },
-        {
-          "name": "ANSIBLE_PROJECT_DIR",
-          "description": "Ansible project root directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.acme.com`)_"
-        },
-        {
-          "name": "ANSIBLE_VAULT_PASSWORD",
-          "description": "The Ansible vault password used to decrypt vars",
-          "secret": true
-        },
-        {
-          "name": "ANSIBLE_PRIVATE_KEY",
-          "description": "The Ansible SSH private key to use in all stages (can be overridden per env)",
-          "secret": true
-        },
-        {
-          "name": "ANSIBLE_PUBLIC_KEY",
-          "description": "The Ansible SSH public key associated to the private key to be use in all stages (can be overridden per env)",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_DEFAULT_INVENTORY",
-          "description": "The default inventory, if used"
-        },
-        {
-          "name": "ANSIBLE_DEFAULT_TAGS",
-          "description": "The default tags, if used"
-        },
-        {
-          "name": "ANSIBLE_DEFAULT_EXTRA_ARGS",
-          "description": "Optional default args to add to the ansible-playbook command line",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_FORCE_COLOR",
-          "description": "Forces color on Ansible output",
-          "type": "boolean",
-          "default": "true",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_REQUIREMENTS_FILE",
-          "description": "The file used to install roles with `ansible-galaxy role install`",
-          "default": "requirements.yml",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_GALAXY_EXTRA_ARGS",
-          "description": "`ansible-galaxy role install` command [extra options](https://docs.ansible.com/ansible/latest/cli/ansible-galaxy.html#role-install)",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_SCRIPTS_DIR",
-          "description": "The Ansible scripts base directory (relative to `$ANSIBLE_PROJECT_DIR`)",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_HOST_KEY_CHECKING",
-          "description": "Enable or disable the SSH host key checking",
-          "type": "boolean",
-          "default": "false",
-          "advanced": true
-        },
-        {
-          "name": "ANSIBLE_DEFAULT_ROLES_PATH",
-          "description": "The default path where the roles should be installed",
-          "default": "$CI_PROJECT_DIR/roles",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "lint",
-          "name": "Ansible Lint",
-          "description": "Static code analysis of your Ansible scripts with [Ansible Lint](https://docs.ansible.com/ansible-lint/)",
-          "disable_with": "ANSIBLE_LINT_DISABLED",
-          "variables": [
-            {
-              "name": "ANSIBLE_LINT_IMAGE",
-              "description": "The Docker image used to run Ansible Lint.",
-              "default": "registry.hub.docker.com/haxorof/ansible-lint:latest"
-            }
-          ]
-        },
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "variables": [
-            {
-              "name": "ANSIBLE_REVIEW_APP_NAME",
-              "description": "The application name for review env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_INVENTORY",
-              "description": "The inventory for `review` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_REVIEW_TAGS",
-              "description": "The tags for `review` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_REVIEW_CLEANUP_TAGS",
-              "description": "The tags to cleanup the `review` env",
-              "mandatory": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_EXTRA_ARGS",
-              "description": "The command line extra args for `review` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "ANSIBLE_REVIEW_PLAYBOOK_FILE",
-              "description": "The playbook filename for `review` env",
-              "mandatory": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_CLEANUP_PLAYBOOK_FILE",
-              "description": "The playbook filename to cleanup `review` env (only define if different from deployment playbook)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_PRIVATE_KEY",
-              "description": "The SSH private key to be use in `review` env (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_PUBLIC_KEY",
-              "description": "The SSH public key associated to the private key to be use in `review` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_REVIEW_VAULT_PASSWORD",
-              "description": "The Ansible vault password for `review` env (only define to override default)",
-              "secret": true,
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "variables": [
-            {
-              "name": "ANSIBLE_INTEG_APP_NAME",
-              "description": "The application name for integration env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `integration` env",
-              "default": "never"
-            },
-            {
-              "name": "ANSIBLE_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_INVENTORY",
-              "description": "The inventory for `integration` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_INTEG_TAGS",
-              "description": "The tags for `integration` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_INTEG_CLEANUP_TAGS",
-              "description": "The tags to cleanup the `integration` env",
-              "mandatory": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_EXTRA_ARGS",
-              "description": "The command line extra args for `integration` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_PLAYBOOK_FILE",
-              "description": "The playbook filename for `integration` env",
-              "mandatory": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_CLEANUP_PLAYBOOK_FILE",
-              "description": "The playbook filename to cleanup `integration` env (only define if different from deployment playbook)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_PRIVATE_KEY",
-              "description": "The SSH private key to be use in `integration` env (only define to override default)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_PUBLIC_KEY",
-              "description": "The SSH public key associated to the private key to be use in `integration` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_INTEG_VAULT_PASSWORD",
-              "description": "The Ansible vault password for `integration` env (only define to override default)",
-              "secret": true,
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "variables": [
-            {
-              "name": "ANSIBLE_STAGING_APP_NAME",
-              "description": "The application name for staging env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `staging` env",
-              "default": "never"
-            },
-            {
-              "name": "ANSIBLE_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_INVENTORY",
-              "description": "The inventory for `staging` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_STAGING_TAGS",
-              "description": "The tags for `staging` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_STAGING_CLEANUP_TAGS",
-              "description": "The tags to cleanup the `staging` env",
-              "mandatory": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_EXTRA_ARGS",
-              "description": "The command line extra args for `staging` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_PLAYBOOK_FILE",
-              "description": "The playbook filename for `staging` env",
-              "mandatory": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_CLEANUP_PLAYBOOK_FILE",
-              "description": "The playbook filename to cleanup `staging` env (only define if different from deployment playbook)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_PRIVATE_KEY",
-              "description": "The SSH private key to be use in `staging` env (only define to override default)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_PUBLIC_KEY",
-              "description": "The SSH public key associated to the private key to be use in `staging` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_STAGING_VAULT_PASSWORD",
-              "description": "The Ansible vault password for `staging` env (only define to override default)",
-              "secret": true,
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "variables": [
-            {
-              "name": "ANSIBLE_PROD_APP_NAME",
-              "description": "The application name for production env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "ANSIBLE_PROD_INVENTORY",
-              "description": "The inventory for `production` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_PROD_TAGS",
-              "description": "The tags for `production` env (only define to override default)"
-            },
-            {
-              "name": "ANSIBLE_PROD_EXTRA_ARGS",
-              "description": "The command line extra args for `production` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_PROD_PLAYBOOK_FILE",
-              "description": "The playbook filename for `production` env",
-              "mandatory": true
-            },
-            {
-              "name": "ANSIBLE_PROD_PRIVATE_KEY",
-              "description": "The SSH private key to be use in `production` env (only define to override default)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_PROD_PUBLIC_KEY",
-              "description": "The SSH public key associated to the private key to be use in `production` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "ANSIBLE_PROD_VAULT_PASSWORD",
-              "description": "The Ansible vault password for `production` env (only define to override default)",
-              "secret": true,
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-ansible-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "6.3.0",
-        "tags": [
-          "6.3.0",
-          "6.3",
-          "6.2.0",
-          "6.2",
-          "6.1.3",
-          "6.1.2",
-          "6.1.1",
-          "6.1.0",
-          "6.1",
-          "6.0.1",
-          "6.0.0",
-          "6.0",
-          "6",
-          "5.1.0",
-          "5.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.5.2",
-          "3.5.1",
-          "3.5.0",
-          "3.5",
-          "3.4.1",
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.4",
-          "2.1.3",
-          "2.1.2",
-          "2.1.1",
-          "2.1.0",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "ansible",
-        "path": "to-be-continuous/ansible",
-        "web_url": "https://gitlab.com/to-be-continuous/ansible",
-        "avatar": "https://gitlab.com/to-be-continuous/ansible/-/avatar"
-      }
-    },
-    {
-      "name": "Amazon Web Services",
-      "description": "Deploy your application to [Amazon Web Services](https://aws.amazon.com/)",
-      "template_path": "templates/gitlab-ci-aws.yml",
-      "kind": "hosting",
-      "prefix": "aws",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "AWS_CLI_IMAGE",
-          "description": "The Docker image used to run AWS CLI commands",
-          "default": "registry.hub.docker.com/amazon/aws-cli:latest"
-        },
-        {
-          "name": "AWS_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "AWS_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.aws.acme.com`)_"
-        },
-        {
-          "name": "AWS_SCRIPTS_DIR",
-          "description": "Directory where AWS scripts (deploy & cleanup) are located",
-          "default": ".",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "enable_with": "AWS_REVIEW_ENABLED",
-          "variables": [
-            {
-              "name": "AWS_REVIEW_APP_NAME",
-              "description": "The application name for review env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AWS_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "AWS_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "enable_with": "AWS_INTEG_ENABLED",
-          "variables": [
-            {
-              "name": "AWS_INTEG_APP_NAME",
-              "description": "The application name for integration env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AWS_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "enable_with": "AWS_STAGING_ENABLED",
-          "variables": [
-            {
-              "name": "AWS_STAGING_APP_NAME",
-              "description": "The application name for staging env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AWS_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "enable_with": "AWS_PROD_ENABLED",
-          "variables": [
-            {
-              "name": "AWS_PROD_APP_NAME",
-              "description": "The application name for production env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AWS_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "oidc",
-          "name": "OpenID Connect",
-          "description": "Enables [federated authentication using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)",
-          "template_path": "templates/gitlab-ci-aws-oidc.yml",
-          "variables": [
-            {
-              "name": "AWS_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "AWS_OIDC_ROLE_ARN",
-              "description": "Default IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/)",
-              "advanced": true
-            },
-            {
-              "name": "AWS_REVIEW_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_INTEG_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_STAGING_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_PROD_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `production` env _(only define to override default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-aws-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "5.2.0",
-        "tags": [
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.2",
-          "5.0.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.2",
-          "2.3.1",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.4.0",
-          "1.4",
-          "1.3.0",
-          "1.3",
-          "1.2.0",
-          "1.2",
-          "1.1.3",
-          "1.1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.0.2",
-          "1.0.1",
-          "1.0.0",
-          "1"
-        ],
-        "name": "aws",
-        "path": "to-be-continuous/aws",
-        "web_url": "https://gitlab.com/to-be-continuous/aws",
-        "avatar": "https://gitlab.com/to-be-continuous/aws/-/avatar"
-      }
-    },
-    {
-      "name": "Azure",
-      "description": "Deploy your application to [Azure](https://azure.microsoft.com/)",
-      "template_path": "templates/gitlab-ci-azure.yml",
-      "kind": "hosting",
-      "prefix": "azure",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "AZURE_CLI_IMAGE",
-          "description": "The Docker image used to run Azure CLI commands",
-          "default": "mcr.microsoft.com/azure-cli:latest"
-        },
-        {
-          "name": "AZURE_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "AZURE_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.azure.acme.com`)_"
-        },
-        {
-          "name": "AZURE_SCRIPTS_DIR",
-          "description": "Directory where Azure scripts (deploy & cleanup) are located",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "AZURE_SP_CLIENT_ID",
-          "description": "Default Service Principal client ID _(only define if using Service Principal authentication with credentials)_",
-          "advanced": true
-        },
-        {
-          "name": "AZURE_SP_PASSWORD",
-          "description": "Default Service Principal password (client secret or certificate (File type)) (only define if using Service Principal authentication with credentials)",
-          "advanced": true,
-          "secret": true
-        },
-        {
-          "name": "AZURE_SP_TENANT_ID",
-          "description": "Default Service Principal tenant ID _(only define if using Service Principal authentication with credentials)_",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "enable_with": "AZURE_REVIEW_ENABLED",
-          "variables": [
-            {
-              "name": "AZURE_REVIEW_APP_NAME",
-              "description": "The application name for review env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "AZURE_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_REVIEW_SP_CLIENT_ID",
-              "description": "Service Principal client ID for `review` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_REVIEW_SP_PASSWORD",
-              "description": "Service Principal password (client secret or certificate (File type)) for `review` env - (only define if using Service Principal authentication with credentials and if different from default)",
-              "advanced": true,
-              "secret": true
-            },
-            {
-              "name": "AZURE_REVIEW_SP_TENANT_ID",
-              "description": "Service Principal tenant ID for `review` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "enable_with": "AZURE_INTEG_ENABLED",
-          "variables": [
-            {
-              "name": "AZURE_INTEG_APP_NAME",
-              "description": "The application name for integration env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_INTEG_SP_CLIENT_ID",
-              "description": "Service Principal client ID for `integration` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_INTEG_SP_PASSWORD",
-              "description": "Service Principal password (client secret or certificate (File type)) for `integration` env - (only define if using Service Principal authentication with credentials and if different from default)",
-              "advanced": true,
-              "secret": true
-            },
-            {
-              "name": "AZURE_INTEG_SP_TENANT_ID",
-              "description": "Service Principal tenant ID for `integration` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "enable_with": "AZURE_STAGING_ENABLED",
-          "variables": [
-            {
-              "name": "AZURE_STAGING_APP_NAME",
-              "description": "The application name for staging env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_STAGING_SP_CLIENT_ID",
-              "description": "Service Principal client ID for `staging` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_STAGING_SP_PASSWORD",
-              "description": "Service Principal password (client secret or certificate (File type)) for `staging` env - (only define if using Service Principal authentication with credentials and if different from default)",
-              "advanced": true,
-              "secret": true
-            },
-            {
-              "name": "AZURE_STAGING_SP_TENANT_ID",
-              "description": "Service Principal tenant ID for `staging` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "enable_with": "AZURE_PROD_ENABLED",
-          "variables": [
-            {
-              "name": "AZURE_PROD_APP_NAME",
-              "description": "The application name for production env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "AZURE_PROD_SP_CLIENT_ID",
-              "description": "Service Principal client ID for `production` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_PROD_SP_PASSWORD",
-              "description": "Service Principal password (client secret or certificate (File type)) for `production` env - (only define if using Service Principal authentication with credentials and if different from default)",
-              "advanced": true,
-              "secret": true
-            },
-            {
-              "name": "AZURE_PROD_SP_TENANT_ID",
-              "description": "Service Principal tenant ID for `production` env - _(only define if using Service Principal authentication with credentials and if different from default)_",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "oidc",
-          "name": "OpenID Connect",
-          "description": "Enables [federated authentication using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/)",
-          "template_path": "templates/gitlab-ci-azure-oidc.yml",
-          "variables": [
-            {
-              "name": "AZURE_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "api://AzureADTokenExchange"
-            },
-            {
-              "name": "AZURE_OIDC_CLIENT_ID",
-              "description": "Default Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/)",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_OIDC_TENANT_ID",
-              "description": "Default Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/)",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_REVIEW_OIDC_CLIENT_ID",
-              "description": "Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_REVIEW_OIDC_TENANT_ID",
-              "description": "Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_INTEG_OIDC_CLIENT_ID",
-              "description": "Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_INTEG_OIDC_TENANT_ID",
-              "description": "Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_STAGING_OIDC_CLIENT_ID",
-              "description": "Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_STAGING_OIDC_TENANT_ID",
-              "description": "Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_PROD_OIDC_CLIENT_ID",
-              "description": "Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `production` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AZURE_PROD_OIDC_TENANT_ID",
-              "description": "Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `production` env _(only define to override default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-azure-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "2.2.0",
-        "tags": [
-          "2.2.0",
-          "2.2",
-          "2.1.0",
-          "2.1",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "azure",
-        "path": "to-be-continuous/azure",
-        "web_url": "https://gitlab.com/to-be-continuous/azure",
-        "avatar": "https://gitlab.com/to-be-continuous/azure/-/avatar"
-      }
-    },
-    {
-      "name": "Bash",
-      "description": "Test and analyse your shell code",
-      "template_path": "templates/gitlab-ci-bash.yml",
-      "kind": "build",
-      "prefix": "bash",
-      "is_component": true,
-      "features": [
-        {
-          "id": "shellcheck",
-          "name": "ShellCheck",
-          "description": "Analyse your shell scripts with [ShellCheck](https://github.com/koalaman/shellcheck)",
-          "disable_with": "BASH_SHELLCHECK_DISABLED",
-          "variables": [
-            {
-              "name": "BASH_SHELLCHECK_IMAGE",
-              "description": "The Docker image used to run [ShellCheck](https://github.com/koalaman/shellcheck)",
-              "default": "registry.hub.docker.com/koalaman/shellcheck-alpine:stable",
-              "advanced": true
-            },
-            {
-              "name": "BASH_SHELLCHECK_FILES",
-              "description": "Shell file(s) pattern to analyse",
-              "default": "**/*.sh"
-            },
-            {
-              "name": "BASH_SHELLCHECK_OPTS",
-              "description": "ShellCheck [options](https://github.com/koalaman/shellcheck/blob/master/shellcheck.1.md)"
-            }
-          ]
-        },
-        {
-          "id": "bats",
-          "name": "Bats",
-          "description": "Test your shell scripts with [Bats](https://bats-core.readthedocs.io/) (Bash Automated Testing System)",
-          "enable_with": "BASH_BATS_ENABLED",
-          "variables": [
-            {
-              "name": "BASH_BATS_IMAGE",
-              "description": "The Docker image used to run [Bats](https://hub.docker.com/r/bats/bats)",
-              "default": "registry.hub.docker.com/bats/bats:latest",
-              "advanced": true
-            },
-            {
-              "name": "BASH_BATS_TESTS",
-              "description": "The path to a Bats test file, or the path to a directory containing Bats test files",
-              "default": "tests"
-            },
-            {
-              "name": "BASH_BATS_OPTS",
-              "description": "Bats [options](https://bats-core.readthedocs.io/en/stable/usage.html)"
-            },
-            {
-              "name": "BASH_BATS_LIBRARIES",
-              "description": "Coma separated list of Bats [libraries and add-ons](https://bats-core.readthedocs.io/en/stable/writing-tests.html#libraries-and-add-ons)\n\nFormatted as: `lib_name_1@archive_url_1 lib_name_2@archive_url_2 ...`\n\nExample: `bats-support@https://github.com/bats-core/bats-support/archive/v0.3.0.zip bats-assert@https://github.com/bats-core/bats-assert/archive/v2.0.0.zip`"
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.4.0",
-        "tags": [
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.0.0"
-        ],
-        "name": "bash",
-        "path": "to-be-continuous/bash",
-        "web_url": "https://gitlab.com/to-be-continuous/bash",
-        "avatar": "https://gitlab.com/to-be-continuous/bash/-/avatar"
-      }
-    },
-    {
-      "name": "Bruno",
-      "description": "Test your APIs with [Bruno](https://www.usebruno.com/)",
-      "template_path": "templates/gitlab-ci-bruno.yml",
-      "kind": "acceptance",
-      "prefix": "bru",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "BRU_IMAGE",
-          "description": "The Docker image used to run the [Bruno CLI](https://docs.usebruno.com/cli/overview.html)",
-          "default": "registry.hub.docker.com/library/node:latest"
-        },
-        {
-          "name": "BRU_COLLECTIONS",
-          "description": "The matcher to select Bruno collection directory(ies) to run",
-          "default": "bruno"
-        },
-        {
-          "name": "BRU_BASE_URL",
-          "description": "Explicit base url environment to test.\n\n_Auto-evaluated by default._",
-          "type": "url",
-          "advanced": true
-        },
-        {
-          "name": "BRU_EXTRA_ARGS",
-          "description": "Bruno extra [run options](https://docs.usebruno.com/cli/overview.html#options)",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Bruno tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.2.0",
-        "tags": ["1.2.0", "1.2", "1.1.0", "1.1", "1.0.0", "1.0", "1"],
-        "name": "bruno",
-        "path": "to-be-continuous/bruno",
-        "web_url": "https://gitlab.com/to-be-continuous/bruno",
-        "avatar": "https://gitlab.com/to-be-continuous/bruno/-/avatar"
-      }
-    },
-    {
-      "name": "Cloud Foundry",
-      "description": "Deploy your application to a [Cloud Foundry](https://www.cloudfoundry.org/) platform",
-      "template_path": "templates/gitlab-ci-cf.yml",
-      "kind": "hosting",
-      "variables": [
-        {
-          "name": "CF_CLI_IMAGE",
-          "description": "The Docker image used to run CF CLI commands - **set the version required by your Cloud Foundry server**",
-          "default": "registry.hub.docker.com/governmentpaas/cf-cli"
-        },
-        {
-          "name": "CF_MANIFEST_BASENAME",
-          "description": "CF manifest file basename (without extension nor env suffix)",
-          "default": "manifest",
-          "advanced": true
-        },
-        {
-          "name": "CF_URL",
-          "type": "url",
-          "description": "Global Cloud Foundry API url",
-          "mandatory": true
-        },
-        {
-          "name": "CF_ORG",
-          "description": "Global Cloud Foundry organization for project",
-          "mandatory": true
-        },
-        {
-          "name": "CF_DEFAULT_DOMAIN",
-          "description": "Global Cloud Foundry default CF domain _(only define if you want to use a different domain from CF default)_",
-          "advanced": true
-        },
-        {
-          "name": "CF_DEFAULT_ROUTE_PATH",
-          "description": "Global Cloud Foundry default CF route path _(only define if you want to add a route path to your application route)_",
-          "advanced": true
-        },
-        {
-          "name": "CF_USER",
-          "description": "Global Cloud Foundry username",
-          "secret": true,
-          "mandatory": true
-        },
-        {
-          "name": "CF_PASSWORD",
-          "description": "Global Cloud Foundry password",
-          "secret": true,
-          "mandatory": true
-        },
-        {
-          "name": "CF_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "CF_SCRIPTS_DIR",
-          "description": "directory where Cloud Foundry scripts (manifest, hook scripts) are located",
-          "default": ".",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "variables": [
-            {
-              "name": "CF_REVIEW_SPACE",
-              "description": "Cloud Foundry space for review env",
-              "mandatory": true
-            },
-            {
-              "name": "CF_REVIEW_APP_NAME",
-              "description": "The application name for review env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_REVIEW_ENVIRONMENT_SCHEME",
-              "description": "The review environment protocol scheme",
-              "default": "https",
-              "mandatory": true
-            },
-            {
-              "name": "CF_REVIEW_ENVIRONMENT_DOMAIN",
-              "description": "The review environment domain (ex: `noprod-cloudfoundry.domain.com`).\n\nBy default review `environment.url` will be built as `${CF_REVIEW_ENVIRONMENT_SCHEME}://${$CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${CF_REVIEW_ENVIRONMENT_DOMAIN}/${CF_REVIEW_ROUTE_PATH}`",
-              "mandatory": true
-            },
-            {
-              "name": "CF_REVIEW_ROUTE_PATH",
-              "description": "The review environment route path",
-              "advanced": true
-            },
-            {
-              "name": "CF_REVIEW_ZERODOWNTIME",
-              "type": "boolean",
-              "description": "Enables zero-downtime deployment on review env",
-              "advanced": true
-            },
-            {
-              "name": "CF_REVIEW_URL",
-              "type": "url",
-              "description": "Cloud Foundry API url for review env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_REVIEW_USER",
-              "description": "Cloud Foundry API username for review env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CF_REVIEW_PASSWORD",
-              "description": "Cloud Foundry API password for review env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CLEANUP_ALL_REVIEW",
-              "description": "Enables a **manual** job to cleanup all review envs at once.\n\nYou may also use it to [schedule](https://docs.gitlab.com/ee/ci/pipelines/schedules.html) cloud resources cleanup. See documentation.",
-              "type": "boolean"
-            },
-            {
-              "name": "CF_REVIEW_RETIRED_APP_SUFFIX",
-              "description": "If set, the app old version is not deleted/overriden but renamed with this suffix",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "variables": [
-            {
-              "name": "CF_INTEG_SPACE",
-              "description": "Cloud Foundry space for integration env",
-              "mandatory": true
-            },
-            {
-              "name": "CF_INTEG_APP_NAME",
-              "description": "The application name for integration env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_INTEG_DOMAIN",
-              "description": "The integration environment domain",
-              "mandatory": true
-            },
-            {
-              "name": "CF_INTEG_ROUTE_PATH",
-              "description": "The integration environment route path",
-              "advanced": true
-            },
-            {
-              "name": "CF_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url including scheme (ex: `https://my-application-integration.noprod-cloudfoundry.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.",
-              "mandatory": true
-            },
-            {
-              "name": "CF_INTEG_ZERODOWNTIME",
-              "type": "boolean",
-              "description": "Enables zero-downtime deployment on integration env",
-              "advanced": true
-            },
-            {
-              "name": "CF_INTEG_URL",
-              "type": "url",
-              "description": "Cloud Foundry API url for integration env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_INTEG_USER",
-              "description": "Cloud Foundry API username for integration env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CF_INTEG_PASSWORD",
-              "description": "Cloud Foundry API password for integration env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CF_INTEG_RETIRED_APP_SUFFIX",
-              "description": "If set, the app old version is not deleted/overriden but renamed with this suffix",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "variables": [
-            {
-              "name": "CF_STAGING_SPACE",
-              "description": "Cloud Foundry space for staging env",
-              "mandatory": true
-            },
-            {
-              "name": "CF_STAGING_APP_NAME",
-              "description": "The application name for staging env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_STAGING_DOMAIN",
-              "description": "The staing environment domain",
-              "mandatory": true
-            },
-            {
-              "name": "CF_STAGING_ROUTE_PATH",
-              "description": "The staging environment route path",
-              "advanced": true
-            },
-            {
-              "name": "CF_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url including scheme (ex: `https://my-application-staging.noprod-cloudfoundry.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.",
-              "mandatory": true
-            },
-            {
-              "name": "CF_STAGING_ZERODOWNTIME",
-              "type": "boolean",
-              "description": "Enables zero-downtime deployment on staging env",
-              "advanced": true
-            },
-            {
-              "name": "CF_STAGING_URL",
-              "type": "url",
-              "description": "Cloud Foundry API url for staging env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_STAGING_USER",
-              "description": "Cloud Foundry API username for staging env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CF_STAGING_PASSWORD",
-              "description": "Cloud Foundry API password for staging env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CF_STAGING_RETIRED_APP_SUFFIX",
-              "description": "If set, the app old version is not deleted/overriden but renamed with this suffix",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "variables": [
-            {
-              "name": "CF_PROD_SPACE",
-              "description": "Cloud Foundry space for production env",
-              "mandatory": true
-            },
-            {
-              "name": "CF_PROD_APP_NAME",
-              "description": "The application name for production env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_PROD_DOMAIN",
-              "description": "The production environment domain",
-              "mandatory": true
-            },
-            {
-              "name": "CF_PROD_ROUTE_PATH",
-              "description": "The production environment route path",
-              "advanced": true
-            },
-            {
-              "name": "CF_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url including scheme (ex: `https://my-application.cloudfoundry.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.",
-              "mandatory": true
-            },
-            {
-              "name": "CF_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "CF_PROD_ZERODOWNTIME",
-              "type": "boolean",
-              "description": "Enables zero-downtime deployment on production env",
-              "advanced": true
-            },
-            {
-              "name": "CF_PROD_URL",
-              "type": "url",
-              "description": "Cloud Foundry API url for production env (only define if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "CF_PROD_USER",
-              "description": "Cloud Foundry API username for production env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CF_PROD_PASSWORD",
-              "description": "Cloud Foundry API password for production env (only define if different from global)",
-              "secret": true
-            },
-            {
-              "name": "CF_PROD_RETIRED_APP_SUFFIX",
-              "description": "If set, the app old version is not deleted/overriden but renamed with this suffix",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-cf-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "4.3.0",
-        "tags": [
-          "4.3.0",
-          "4.3",
-          "4.2.0",
-          "4.2",
-          "4.1.0",
-          "4.1",
-          "4.0.2",
-          "4.0.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.8.1",
-          "1.8.0",
-          "1.8",
-          "1.7.0",
-          "1.7",
-          "1.6.4",
-          "1.6.3",
-          "1.6.2",
-          "1.6.1",
-          "1.6.0",
-          "1.5.1",
-          "1.5.0",
-          "1.4.4",
-          "1.4.3",
-          "1.4.2",
-          "1.4.1",
-          "1.4.0",
-          "1.3.0",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.1",
-          "1.0.0",
-          "1"
-        ],
-        "name": "cloud-foundry",
-        "path": "to-be-continuous/cloud-foundry",
-        "web_url": "https://gitlab.com/to-be-continuous/cloud-foundry",
-        "avatar": "https://gitlab.com/to-be-continuous/cloud-foundry/-/avatar"
-      }
-    },
-    {
-      "name": "Cloud Native Buildpacks",
-      "description": "Transform your application source code into images that can run on any cloud with [Cloud Native Buildpacks](https://buildpacks.io/)",
-      "template_path": "templates/gitlab-ci-cnb.yml",
-      "kind": "package",
-      "prefix": "cnb",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "CNB_BUILDER_IMAGE",
-          "description": "The CNB builder image used to build your application image\n\n_depending on your needs, [choose the most appropriate one](https://paketo.io/docs/concepts/builders/#what-paketo-builders-are-available)_",
-          "default": "registry.hub.docker.com/paketobuildpacks/builder:base"
-        },
-        {
-          "name": "CNB_APP_DIR",
-          "description": "Absolute root directory in final image",
-          "default": "/workspace",
-          "advanced": true
-        },
-        {
-          "name": "CNB_SRC_APP_DIR",
-          "description": "Relative path to the application source code base directory in your repository",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "CNB_PLATFORM_API",
-          "description": "The CNB [platform API version](https://github.com/buildpacks/spec/blob/main/platform.md#platform-api-version)",
-          "default": "0.9",
-          "advanced": true
-        },
-        {
-          "name": "CNB_SNAPSHOT_IMAGE",
-          "description": "CNB snapshot image",
-          "default": "$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"
-        },
-        {
-          "name": "CNB_RELEASE_IMAGE",
-          "description": "CNB release image",
-          "default": "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
-        }
-      ],
-      "features": [
-        {
-          "id": "publish",
-          "name": "Publish",
-          "description": "Promotes the snapshot image as the release image using [skopeo](https://github.com/containers/skopeo)",
-          "variables": [
-            {
-              "name": "CNB_SKOPEO_IMAGE",
-              "description": "The docker image used to publish docker image with Skopeo",
-              "default": "quay.io/skopeo/stable:latest"
-            },
-            {
-              "name": "CNB_PUBLISH_ARGS",
-              "description": "Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)",
-              "advanced": true
-            },
-            {
-              "name": "CNB_PROD_PUBLISH_STRATEGY",
-              "description": "Defines the publish to production strategy.",
-              "type": "enum",
-              "values": ["none", "manual", "auto"],
-              "default": "manual"
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "2.3.0",
-        "tags": [
-          "2.3.0",
-          "2.3",
-          "2.2.1",
-          "2.2.0",
-          "2.2",
-          "2.1.2",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.0.3",
-          "1.0.2",
-          "1.0.1",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "cnb",
-        "path": "to-be-continuous/cnb",
-        "web_url": "https://gitlab.com/to-be-continuous/cnb",
-        "avatar": "https://gitlab.com/to-be-continuous/cnb/-/avatar"
-      }
-    },
-    {
-      "name": "Cypress",
-      "description": "Run your automated (web) tests with [Cypress](https://www.cypress.io/)",
-      "template_path": "templates/gitlab-ci-cypress.yml",
-      "kind": "acceptance",
-      "prefix": "cypress",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "CYPRESS_IMAGE",
-          "description": "The Docker image used to run Cypress (use [included images](https://github.com/cypress-io/cypress-docker-images/tree/master/included) only).",
-          "default": "registry.hub.docker.com/cypress/included:12.0.2"
-        },
-        {
-          "name": "CYPRESS_PROJECT_DIR",
-          "description": "The Cypress project directory (containing `cypress.config.js` or `cypress.config.ts`)",
-          "default": "."
-        },
-        {
-          "name": "CYPRESS_EXTRA_ARGS",
-          "description": "Cypress extra [run options](https://docs.cypress.io/guides/guides/command-line.html#cypress-run) (to select a different browser, configuration or spec files for e.g.)",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Cypress tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.5.0",
-        "tags": [
-          "3.5.0",
-          "3.5",
-          "3.4.0",
-          "3.4",
-          "3.3.1",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "cypress",
-        "path": "to-be-continuous/cypress",
-        "web_url": "https://gitlab.com/to-be-continuous/cypress",
-        "avatar": "https://gitlab.com/to-be-continuous/cypress/-/avatar"
-      }
-    },
-    {
-      "name": "dbt",
-      "description": "Continuously integrate and deploy your data with [dbt](https://www.getdbt.com/)",
-      "template_path": "templates/gitlab-ci-dbt.yml",
-      "kind": "build",
-      "prefix": "dbt",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "DBT_IMAGE",
-          "description": "The Docker image used to run dbt",
-          "default": "registry.hub.docker.com/library/python:latest"
-        },
-        {
-          "name": "DBT_PROJECT_DIR",
-          "description": "The [dbt_project.yml](https://docs.getdbt.com/reference/dbt_project.yml) dir",
-          "default": "."
-        },
-        {
-          "name": "DBT_PROFILES_DIR",
-          "description": "The dbt [profile](https://docs.getdbt.com/dbt-cli/configure-your-profile) location",
-          "default": "."
-        },
-        {
-          "name": "DBT_ADAPTER",
-          "description": "The dbt [adapter](https://docs.getdbt.com/docs/available-adapters) to use ",
-          "mandatory": true
-        },
-        {
-          "name": "DBT_TARGET",
-          "description": "The dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) to use "
-        },
-        {
-          "name": "DBT_BUILD_ARGS",
-          "description": "Arguments used by [dbt cli](https://docs.getdbt.com/reference/global-configs#command-line-flags) ",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "dbt-sqlfluff-lint",
-          "name": "SQLFluff lint",
-          "description": "Lint SQL from dbt project",
-          "enable_with": "DBT_SQLFLUFF_ENABLED",
-          "variables": [
-            {
-              "name": "DBT_SQLFLUFF_LINT_ARGS",
-              "description": "Lint [options and arguments](https://docs.sqlfluff.com/en/stable/reference/cli.html#sqlfluff-lint)",
-              "advanced": true
-            },
-            {
-              "name": "SQLFLUFF_WORKING_DIR",
-              "description": "Sqlfluff working directory, scope of configuration and sql files used",
-              "default": ".",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "dbt-deploy",
-          "name": "dbt deploy",
-          "description": "execute generated SQL from models on target",
-          "enable_with": "DBT_DEPLOY_ENABLED"
-        },
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "variables": [
-            {
-              "name": "DBT_REVIEW_TARGET",
-              "description": "dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `review` env",
-              "mandatory": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "variables": [
-            {
-              "name": "DBT_INTEG_TARGET",
-              "description": " dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `integration` env",
-              "mandatory": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "variables": [
-            {
-              "name": "DBT_STAGING_TARGET",
-              "description": "dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `staging` env",
-              "mandatory": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "variables": [
-            {
-              "name": "DBT_PROD_TARGET",
-              "description": "dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `production` env ",
-              "mandatory": true
-            },
-            {
-              "name": "DBT_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "pages",
-          "name": "GitLab Pages",
-          "description": "Adds a job to publish the generated site to GitLab pages",
-          "template_path": "templates/gitlab-ci-dbt-pages.yml"
-        },
-        {
-          "id": "gcp-auth-provider",
-          "name": "Google Cloud",
-          "description": "Retrieves an [OAuth access token](https://developers.google.com/identity/protocols/oauth2) for [dbt BigQuery setup](https://docs.getdbt.com/reference/warehouse-setups/bigquery-setup)",
-          "template_path": "templates/gitlab-ci-dbt-gcp.yml",
-          "variables": [
-            {
-              "name": "TBC_GCP_PROVIDER_IMAGE",
-              "description": "The [GCP Auth Provider](https://gitlab.com/to-be-continuous/tools/gcp-auth-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "GCP_OIDC_AUD",
-              "description": "The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_",
-              "default": "$CI_SERVER_URL",
-              "advanced": true
-            },
-            {
-              "name": "GCP_OIDC_ACCOUNT",
-              "description": "Default Service Account to which impersonate with OpenID Connect authentication"
-            },
-            {
-              "name": "GCP_OIDC_PROVIDER",
-              "description": "Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"
-            },
-            {
-              "name": "GCP_REVIEW_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `review` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_REVIEW_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `integration` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `staging` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `production` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.2.0",
-        "tags": [
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.3.0",
-          "1.3",
-          "1.2.0",
-          "1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.1",
-          "1.0.1",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "dbt",
-        "path": "to-be-continuous/dbt",
-        "web_url": "https://gitlab.com/to-be-continuous/dbt",
-        "avatar": "https://gitlab.com/to-be-continuous/dbt/-/avatar"
-      }
-    },
-    {
-      "name": "DefectDojo",
-      "description": "Import security reports into [DefectDojo](https://www.defectdojo.org/)",
-      "template_path": "templates/gitlab-ci-defectdojo.yml",
-      "kind": "analyse",
-      "prefix": "defectdojo",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "DEFECTDOJO_BASE_IMAGE",
-          "description": "The Docker image used to run import",
-          "default": "registry.hub.docker.com/library/node:alpine3.11"
-        },
-        {
-          "name": "DEFECTDOJO_SERVER_URL",
-          "description": "URL of DefectDojo server",
-          "mandatory": true
-        },
-        {
-          "name": "DEFECTDOJO_API_KEY",
-          "description": "Your DefectDojo API v2 key - must be saved as a masked CI/CD variable",
-          "secret": true,
-          "mandatory": true
-        },
-        {
-          "name": "DEFECTDOJO_DIR",
-          "description": "DefectDojo working directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_NOPROD_ENABLED",
-          "description": "Determines whether security reports produced in non-production branches are uploaded to DefectDojo",
-          "type": "boolean"
-        },
-        {
-          "name": "DEFECTDOJO_TIMEZONE",
-          "description": "Time zone used for naming imports in DefectDojo",
-          "default": "Europe/Paris",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_SMTP_SERVER",
-          "description": "name:port of SMTP server used for notifications - if this value is set, DefectDojo will send an e-mail notification in case of new vulnerabilities",
-          "default": "dist",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_NOTIFICATION_SEVERITIES",
-          "description": "List of severities for which you want to be notified - DEFECTDOJO_SMTP_SERVER must be defined if you want to be notified",
-          "default": "Critical,High",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_BANDIT_REPORTS",
-          "description": "path to Bandit JSON reports",
-          "default": "bandit*.json reports/py-bandit.bandit.json",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_DC_REPORTS",
-          "description": "Path to Dependency Check reports",
-          "default": "dependency-check*.xml",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_DC_GRADLE_REPORTS",
-          "description": "Path to Dependency Check reports from Gradle template",
-          "default": "dependency-check*.xml",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_GITLEAKS_REPORTS",
-          "description": "Path to Gitleaks reports",
-          "default": "gitleaks/gitleaks-report.json reports/gitleaks.native.json",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_HADOLINT_REPORTS",
-          "description": "Path to Hadolint reports",
-          "default": "hadolint-json-*.json reports/docker-hadolint-*.native.json",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_MOBSF_REPORTS",
-          "description": "Path to MobSF reports",
-          "default": "mobsf*.json",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_NODEJSSCAN_REPORTS",
-          "description": "Path to NodeJSScan reports",
-          "default": "nodejsscan-report-sarif.json",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_NPMAUDIT_REPORTS",
-          "description": "Path to NPMAudit reports",
-          "default": "npm-audit*.json",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_TESTSSL_REPORTS",
-          "description": "Path to TestSSL reports",
-          "default": "reports/testssl.native.csv",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_TRIVY_REPORTS",
-          "description": "Path to Trivy reports",
-          "default": "trivy/*.json trivy-*.json reports/docker-trivy-*.native.json reports/py-trivy.trivy.json",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_ZAP_REPORTS",
-          "description": "Path to Zap reports",
-          "default": "reports/zap.native.xml",
-          "advanced": true
-        },
-        {
-          "name": "ZAP_TPL_PROJECT",
-          "description": "Path to Zap template",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_SEMGREP_REPORTS",
-          "description": "Path to Semgrep reports",
-          "default": "reports/semgrep.native.json",
-          "advanced": true
-        },
-        {
-          "name": "SEMGREP_TEMPLATE",
-          "description": "Path to Semgrep template",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_SONARQUBE_SINCELEAKPERIOD",
-          "description": "Determines if delta analysis is activated for SonarQube export",
-          "type": "boolean",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_SONARQUBE_NOSECURITYHOTSPOT",
-          "description": "Set this flag to true if SonarQube version does not support security hotspots (v < 7.3)",
-          "type": "boolean",
-          "default": "true",
-          "advanced": true
-        },
-        {
-          "name": "DEFECTDOJO_SONARQUBE_ALLBUGS",
-          "description": "In SonarQube, determines if all bugs are exported (true) or only vulnerabilities (false)",
-          "type": "boolean",
-          "advanced": true
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-defectdojo-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "2.6.0",
-        "tags": [
-          "2.6.0",
-          "2.6",
-          "2.5.1",
-          "2.5.0",
-          "2.5",
-          "2.4.1",
-          "2.4.0",
-          "2.4",
-          "2.3.2",
-          "2.3.1",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.7",
-          "2.0.6",
-          "2.0.5",
-          "2.0.4",
-          "2.0.3",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.2.0",
-          "1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.1",
-          "1.0.4",
-          "1.0.3",
-          "1.0.2",
-          "1.0.1",
-          "1.0.0",
-          "1"
-        ],
-        "name": "defectdojo",
-        "path": "to-be-continuous/defectdojo",
-        "web_url": "https://gitlab.com/to-be-continuous/defectdojo",
-        "avatar": "https://gitlab.com/to-be-continuous/defectdojo/-/avatar"
-      }
-    },
-    {
-      "name": "Docker",
-      "description": "Build, check and inspect your containers with [Docker](https://www.docker.com/)",
-      "template_path": "templates/gitlab-ci-docker.yml",
-      "kind": "package",
-      "prefix": "docker",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "DOCKER_BUILD_TOOL",
-          "type": "enum",
-          "values": ["kaniko", "buildah", "dind"],
-          "description": "The build tool to use for building container image",
-          "default": "kaniko"
-        },
-        {
-          "name": "DOCKER_KANIKO_IMAGE",
-          "description": "The image used to run kaniko\n\n_for kaniko build only_",
-          "default": "gcr.io/kaniko-project/executor:debug"
-        },
-        {
-          "name": "DOCKER_BUILDAH_IMAGE",
-          "description": "The image used to run buildah\n\n_for buildah build only_",
-          "default": "quay.io/buildah/stable:latest"
-        },
-        {
-          "name": "DOCKER_IMAGE",
-          "description": "The image used to run the docker client\n\n_for Docker-in-Docker(dind) build only_",
-          "default": "registry.hub.docker.com/library/docker:latest"
-        },
-        {
-          "name": "DOCKER_DIND_IMAGE",
-          "description": "The image used to run the Docker daemon\n\n_for Docker-in-Docker(dind) build only_",
-          "default": "registry.hub.docker.com/library/docker:dind"
-        },
-        {
-          "name": "DOCKER_SKOPEO_IMAGE",
-          "description": "The image used to publish docker image with Skopeo",
-          "default": "quay.io/skopeo/stable:latest"
-        },
-        {
-          "name": "DOCKER_FILE",
-          "description": "The path to your `Dockerfile`",
-          "default": "Dockerfile"
-        },
-        {
-          "name": "DOCKER_CONTEXT_PATH",
-          "description": "The Docker [context path](https://docs.docker.com/engine/reference/commandline/build/#build-with-path) (working directory) - _only set if you want a context path different from the Dockerfile location_",
-          "advanced": true
-        },
-        {
-          "name": "DOCKER_CONFIG_FILE",
-          "description": "Path to the [Docker configuration file](https://docs.docker.com/engine/reference/commandline/cli/#sample-configuration-file) (JSON)",
-          "default": ".docker/config.json",
-          "advanced": true
-        },
-        {
-          "name": "DOCKER_SNAPSHOT_IMAGE",
-          "description": "Docker snapshot image",
-          "default": "$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"
-        },
-        {
-          "name": "DOCKER_RELEASE_IMAGE",
-          "description": "Docker release image",
-          "default": "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
-        },
-        {
-          "name": "DOCKER_RELEASE_EXTRA_TAGS_PATTERN",
-          "description": "Defines the image tag pattern that `$DOCKER_RELEASE_IMAGE` should match to push extra tags (supports capturing groups)\n\nDefaults to [SemVer](https://semver.org/) pattern.",
-          "default": "^v?(?P<major>[0-9]+)\\.(?P<minor>[0-9]+)\\.(?P<patch>[0-9]+)(?P<suffix>(?P<prerelease>-[0-9A-Za-z-\\.]+)?(?P<build>\\+[0-9A-Za-z-\\.]+)?)$",
-          "advanced": true
-        },
-        {
-          "name": "DOCKER_RELEASE_EXTRA_TAGS",
-          "description": "Defines extra tags to publish the _release_ image\n\nSupports capturing group references from `$DOCKER_RELEASE_EXTRA_TAGS_PATTERN` (ex: `latest \\g<major>.\\g<minor> \\g<major>`)",
-          "advanced": true
-        },
-        {
-          "name": "DOCKER_BUILD_ARGS",
-          "description": "Additional docker/kaniko/buildah build arguments"
-        },
-        {
-          "name": "DOCKER_METADATA",
-          "description": "Additional metadata to set as labels",
-          "default": "--label org.opencontainers.image.url=${CI_PROJECT_URL} --label org.opencontainers.image.source=${CI_PROJECT_URL} --label org.opencontainers.image.title=${CI_PROJECT_PATH} --label org.opencontainers.image.ref.name=${CI_COMMIT_REF_NAME} --label org.opencontainers.image.revision=${CI_COMMIT_SHA} --label org.opencontainers.image.created=${CI_JOB_STARTED_AT}",
-          "advanced": true
-        },
-        {
-          "name": "DOCKER_PUBLISH_ARGS",
-          "description": "Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)"
-        },
-        {
-          "name": "DOCKER_PROD_PUBLISH_STRATEGY",
-          "description": "Defines the publish to production strategy.",
-          "type": "enum",
-          "values": ["none", "manual", "auto"],
-          "default": "manual"
-        },
-        {
-          "name": "DOCKER_SEMREL_RELEASE_DISABLED",
-          "description": "Disable integration with the [semantic release template](https://gitlab.com/to-be-continuous/semantic-release/)",
-          "type": "boolean"
-        },
-        {
-          "name": "DOCKER_REGISTRY_MIRROR",
-          "description": "URL of a Docker registry mirror to use instead of default `https://index.docker.io`\n\n_Used by `kaniko` and `dind` builds only_"
-        },
-        {
-          "name": "CONTAINER_REGISTRIES_CONFIG_FILE",
-          "description": "The [registries.conf](https://www.redhat.com/sysadmin/manage-container-registries) configuration to be used\n\n_Used by the `buildah` build only_",
-          "advanced": true
-        },
-        {
-          "name": "KANIKO_SNAPSHOT_IMAGE_CACHE",
-          "description": "Snapshot image repository that will be used to store cached layers.\n\n_Used by the `kaniko` build only_",
-          "default": "${DOCKER_SNAPSHOT_IMAGE%:*}/cache",
-          "advanced": true
-        },
-        {
-          "name": "DOCKER_BUILD_CACHE_DISABLED",
-          "description": "Set to `true` to disable the build cache.",
-          "type": "boolean",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "hadolint",
-          "name": "Hadolint",
-          "description": "This job performs a [Lint](https://github.com/hadolint/hadolint) on your `Dockerfile`.",
-          "disable_with": "DOCKER_HADOLINT_DISABLED",
-          "variables": [
-            {
-              "name": "DOCKER_HADOLINT_IMAGE",
-              "description": "The docker image to lint your Dockerfile with Hadolint",
-              "default": "registry.hub.docker.com/hadolint/hadolint:latest-alpine"
-            },
-            {
-              "name": "DOCKER_HADOLINT_ARGS",
-              "description": "Additional `hadolint` arguments",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "healthcheck",
-          "name": "Health Check",
-          "description": "[Health Check](https://docs.docker.com/engine/reference/builder/#healthcheck) image analysis",
-          "disable_with": "DOCKER_HEALTHCHECK_DISABLED",
-          "variables": [
-            {
-              "name": "DOCKER_HEALTHCHECK_TIMEOUT",
-              "type": "number",
-              "description": "When testing an image, how long (in seconds) wait for the HealthCheck status",
-              "default": "60",
-              "advanced": true
-            },
-            {
-              "name": "DOCKER_HEALTHCHECK_OPTIONS",
-              "description": "Docker options for health check such as port mapping, environment...",
-              "advanced": true
-            },
-            {
-              "name": "DOCKER_HEALTHCHECK_CONTAINER_ARGS",
-              "description": "Arguments sent to the running container for health check",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "trivy",
-          "name": "Trivy",
-          "description": "[Trivy](https://github.com/aquasecurity/trivy) vulnerability analysis",
-          "disable_with": "DOCKER_TRIVY_DISABLED",
-          "variables": [
-            {
-              "name": "DOCKER_TRIVY_IMAGE",
-              "description": "The docker image used to scan images with Trivy",
-              "default": "registry.hub.docker.com/aquasec/trivy:latest",
-              "advanced": true
-            },
-            {
-              "name": "DOCKER_TRIVY_ADDR",
-              "type": "url",
-              "description": "The Trivy server address"
-            },
-            {
-              "name": "DOCKER_TRIVY_SECURITY_LEVEL_THRESHOLD",
-              "type": "enum",
-              "values": [
-                "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL",
-                "LOW,MEDIUM,HIGH,CRITICAL",
-                "MEDIUM,HIGH,CRITICAL",
-                "HIGH,CRITICAL",
-                "CRITICAL"
-              ],
-              "description": "Severities of vulnerabilities to be displayed (comma separated values: `UNKNOWN`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`)",
-              "default": "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL"
-            },
-            {
-              "name": "DOCKER_TRIVY_ARGS",
-              "description": "Additional `trivy client` arguments",
-              "default": "--ignore-unfixed --vuln-type os --exit-on-eol 1",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)",
-          "disable_with": "DOCKER_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "DOCKER_SBOM_IMAGE",
-              "default": "registry.hub.docker.com/anchore/syft:debug"
-            },
-            {
-              "name": "DOCKER_SBOM_OPTS",
-              "description": "Options for syft used for SBOM analysis",
-              "default": "--override-default-catalogers rpm-db-cataloger,alpm-db-cataloger,apk-db-cataloger,dpkg-db-cataloger,portage-cataloger",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-docker-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "gcp",
-          "name": "Google Cloud",
-          "description": "Retrieves a registry authentication for the Google Cloud's [Artifact Registry](https://cloud.google.com/artifact-registry)",
-          "template_path": "templates/gitlab-ci-docker-gcp.yml",
-          "variables": [
-            {
-              "name": "TBC_GCP_PROVIDER_IMAGE",
-              "description": "The [GCP Auth Provider](https://gitlab.com/to-be-continuous/tools/gcp-auth-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/gcp-auth-provider:main",
-              "advanced": true
-            },
-            {
-              "name": "GCP_OIDC_AUD",
-              "description": "The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_",
-              "default": "$CI_SERVER_URL",
-              "advanced": true
-            },
-            {
-              "name": "GCP_OIDC_ACCOUNT",
-              "description": "Default Service Account to which impersonate with OpenID Connect authentication"
-            },
-            {
-              "name": "GCP_OIDC_PROVIDER",
-              "description": "Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"
-            },
-            {
-              "name": "GCP_SNAPSHOT_OIDC_ACCOUNT",
-              "description": "Service Account to use to push the snapshot image _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_SNAPSHOT_OIDC_PROVIDER",
-              "description": "Workload Identity Provider to push the snapshot image _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_RELEASE_OIDC_ACCOUNT",
-              "description": "Service Account to use to push the release image _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_RELEASE_OIDC_PROVIDER",
-              "description": "Workload Identity Provider to push the release image _(only define to override default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "ecr",
-          "name": "Amazon ECR",
-          "description": "Retrieves a registry authentication for the Amazon's [Elastic Container Registry](https://docs.aws.amazon.com/ecr/)",
-          "template_path": "templates/gitlab-ci-docker-ecr.yml",
-          "variables": [
-            {
-              "name": "TBC_AWS_PROVIDER_IMAGE",
-              "description": "The [AWS Auth Provider](https://gitlab.com/to-be-continuous/tools/aws-auth-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/aws-auth-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "AWS_REGION",
-              "description": "Default region (where the ECR registry is located)"
-            },
-            {
-              "name": "AWS_SNAPSHOT_REGION",
-              "description": "Region of the ECR registry for the snapshot image _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_RELEASE_REGION",
-              "description": "Region of the ECR registry for the release image _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_OIDC_AUD",
-              "description": "The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_",
-              "default": "$CI_SERVER_URL",
-              "advanced": true
-            },
-            {
-              "name": "AWS_OIDC_ROLE_ARN",
-              "description": "Default IAM Role ARN associated with GitLab _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_"
-            },
-            {
-              "name": "AWS_SNAPSHOT_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab for the snapshot image _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/) and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_RELEASE_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab for the release image _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/) and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_ACCESS_KEY_ID",
-              "description": "Default access key ID (only required for basic authentication)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "AWS_SECRET_ACCESS_KEY",
-              "description": "Default secret access key (only required for basic authentication)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "AWS_SNAPSHOT_ACCESS_KEY_ID",
-              "description": "Access key ID for the snapshot image (only required for basic authentication and if different from default)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "AWS_SNAPSHOT_SECRET_ACCESS_KEY",
-              "description": "Secret access key for the snapshot image (only required for basic authentication and if different from default)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "AWS_RELEASE_ACCESS_KEY_ID",
-              "description": "Access key ID for the release image (only required for basic authentication and if different from default)",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "AWS_RELEASE_SECRET_ACCESS_KEY",
-              "description": "Secret access key for the release image (only required for basic authentication and if different from default)",
-              "secret": true,
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "5.8.0",
-        "tags": [
-          "5.8.0",
-          "5.8",
-          "5.7.1",
-          "5.7.0",
-          "5.7",
-          "5.6.1",
-          "5.6.0",
-          "5.6",
-          "5.5.6",
-          "5.5.5",
-          "5.5.4",
-          "5.5.3",
-          "5.5.2",
-          "5.5.1",
-          "5.5.0",
-          "5.5",
-          "5.4.1",
-          "5.4.0",
-          "5.4",
-          "5.3.1",
-          "5.3.0",
-          "5.3",
-          "5.2.2",
-          "5.2.1",
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.3",
-          "5.0.2",
-          "5.0.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.6.0",
-          "3.6",
-          "3.5.3",
-          "3.5.2",
-          "3.5.1",
-          "3.5.0",
-          "3.5",
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.2",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.7.1",
-          "2.7.0",
-          "2.7",
-          "2.6.0",
-          "2.6",
-          "2.5.0",
-          "2.5",
-          "2.4.0",
-          "2.4",
-          "2.3.3",
-          "2.3.2",
-          "2.3.1",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.1.2",
-          "2.1.1",
-          "2.1.0",
-          "2.0.0",
-          "2",
-          "1.2.3",
-          "1.2.2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "docker",
-        "path": "to-be-continuous/docker",
-        "web_url": "https://gitlab.com/to-be-continuous/docker",
-        "avatar": "https://gitlab.com/to-be-continuous/docker/-/avatar"
-      }
-    },
-    {
-      "name": "Google Cloud",
-      "description": "Deploy your application to the [Google Cloud](https://cloud.google.com/) platform",
-      "template_path": "templates/gitlab-ci-gcloud.yml",
-      "kind": "hosting",
-      "prefix": "gcp",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "GCP_CLI_IMAGE",
-          "description": "The Docker image used to run Google Cloud CLI commands",
-          "default": "gcr.io/google.com/cloudsdktool/cloud-sdk:latest"
-        },
-        {
-          "name": "GCP_KEY_FILE",
-          "description": "Global Service Account key file",
-          "secret": true,
-          "mandatory": true
-        },
-        {
-          "name": "GCP_WORKLOAD_IDENTITY_PROVIDER",
-          "description": "Default [Workload Identity Provider](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) associated with GitLab to authenticate\n\n(has format `projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID`)",
-          "advanced": true
-        },
-        {
-          "name": "GCP_SERVICE_ACCOUNT",
-          "description": "Default Service Account to which impersonate with WIF authentication",
-          "advanced": true
-        },
-        {
-          "name": "GCP_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "GCP_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.gcloud.acme.com`)_"
-        },
-        {
-          "name": "GCP_SCRIPTS_DIR",
-          "description": "Directory where Google Cloud scripts (deploy & cleanup) are located",
-          "default": ".",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "variables": [
-            {
-              "name": "GCP_REVIEW_PROJECT",
-              "description": "Google Cloud project ID for review env",
-              "mandatory": true
-            },
-            {
-              "name": "GCP_REVIEW_APP_NAME",
-              "description": "The application name for review env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "GCP_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "GCP_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_REVIEW_KEY_FILE",
-              "description": "Service Account key file to authenticate on review env (only define to override default)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "variables": [
-            {
-              "name": "GCP_INTEG_PROJECT",
-              "description": "Google Cloud project ID for integration env",
-              "mandatory": true
-            },
-            {
-              "name": "GCP_INTEG_APP_NAME",
-              "description": "The application name for integration env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_KEY_FILE",
-              "description": "Service Account key file to authenticate on integration env (only define to override default)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "variables": [
-            {
-              "name": "GCP_STAGING_PROJECT",
-              "description": "Google Cloud project ID for staging env",
-              "mandatory": true
-            },
-            {
-              "name": "GCP_STAGING_APP_NAME",
-              "description": "The application name for staging env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_KEY_FILE",
-              "description": "Service Account key file to authenticate on staging env (only define to override default)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "variables": [
-            {
-              "name": "GCP_PROD_PROJECT",
-              "description": "Google Cloud project ID for production env",
-              "mandatory": true
-            },
-            {
-              "name": "GCP_PROD_APP_NAME",
-              "description": "The application name for production env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "GCP_PROD_KEY_FILE",
-              "description": "Service Account key file to authenticate on production env (only define to override default)",
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "oidc",
-          "name": "OpenID Connect",
-          "description": "Enables [federated authentication using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)",
-          "template_path": "templates/gitlab-ci-gcloud-oidc.yml",
-          "variables": [
-            {
-              "name": "GCP_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "GCP_OIDC_PROVIDER",
-              "description": "Global Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)",
-              "advanced": true
-            },
-            {
-              "name": "GCP_OIDC_ACCOUNT",
-              "description": "Global Service Account to which impersonate with OpenID Connect authentication",
-              "advanced": true
-            },
-            {
-              "name": "GCP_REVIEW_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment\n\n_(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_REVIEW_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `review` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment\n\n_(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `integration` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment\n\n_(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `staging` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment\n\n_(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `production` environment",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-gcloud-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "5.2.0",
-        "tags": [
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.2",
-          "5.0.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.2",
-          "2.3.1",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.8.0",
-          "1.8",
-          "1.7.0",
-          "1.7",
-          "1.6.2",
-          "1.6.1",
-          "1.6.0",
-          "1.5.2",
-          "1.5.1",
-          "1.5.0",
-          "1.4.1",
-          "1.4.0",
-          "1.3.0",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0",
-          "1"
-        ],
-        "name": "gcloud",
-        "path": "to-be-continuous/gcloud",
-        "web_url": "https://gitlab.com/to-be-continuous/gcloud",
-        "avatar": "https://gitlab.com/to-be-continuous/gcloud/-/avatar"
-      }
-    },
-    {
-      "name": "GitLab Package",
-      "description": "Publish artifacts to GitLab's [Generic Package Registry](https://docs.gitlab.com/ee/user/packages/generic_packages/)",
-      "template_path": "templates/gitlab-ci-gitlab-package.yml",
-      "kind": "build",
-      "prefix": "glpkg",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "GLPKG_IMAGE",
-          "description": "The Docker image used to publish packages",
-          "default": "registry.hub.docker.com/curlimages/curl:latest",
-          "advanced": true
-        },
-        {
-          "name": "GLPKG_FILES",
-          "description": "Glob patterns matching files to include in the GitLab package (:warning: does not support double star)",
-          "mandatory": true
-        },
-        {
-          "name": "GLPKG_PACKAGE",
-          "description": "Name of the package to publish",
-          "default": "$CI_PROJECT_NAME"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.2.0",
-        "tags": ["1.2.0", "1.2", "1.1.0", "1.1", "1.0.0", "1"],
-        "name": "gitlab-package",
-        "path": "to-be-continuous/gitlab-package",
-        "web_url": "https://gitlab.com/to-be-continuous/gitlab-package",
-        "avatar": "https://gitlab.com/to-be-continuous/gitlab-package/-/avatar"
-      }
-    },
-    {
-      "name": "Gitleaks",
-      "description": "Detect and prevent hardcoded secrets in your Git repository with [Gitleaks](https://github.com/zricethezav/gitleaks/wiki)",
-      "template_path": "templates/gitlab-ci-gitleaks.yml",
-      "kind": "analyse",
-      "prefix": "gitleaks",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "GITLEAKS_IMAGE",
-          "description": "The Docker image used to run Gitleaks",
-          "default": "registry.hub.docker.com/zricethezav/gitleaks:latest"
-        },
-        {
-          "name": "GITLEAKS_RULES",
-          "description": "Gitleaks [configuration rules](https://github.com/zricethezav/gitleaks/wiki/Configuration) to use (you may also provide your own `.gitleaks.toml` configuration file in your project).",
-          "advanced": true
-        },
-        {
-          "name": "GITLEAKS_ARGS",
-          "description": "[Options](https://github.com/zricethezav/gitleaks/wiki/Options) for a full Gitleaks analysis (on master or develop branches)",
-          "default": "--verbose",
-          "advanced": true
-        },
-        {
-          "name": "GITLEAKS_QUICK_ARGS",
-          "description": "[Options](https://github.com/zricethezav/gitleaks/wiki/Options) for a quick Gitleaks analysis (on feature branches)",
-          "default": "--verbose",
-          "advanced": true
-        },
-        {
-          "name": "GITLEAKS_QUICK_DEPTH",
-          "description": "Number of commits to scan (on feature branches)",
-          "type": "number",
-          "default": "10",
-          "advanced": true
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "2.4.0",
-        "tags": [
-          "2.4.0",
-          "2.4",
-          "2.3.0",
-          "2.3",
-          "2.2.3",
-          "2.2.2",
-          "2.2.1",
-          "2.2.0",
-          "2.2",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.3.0",
-          "1.3",
-          "1.2.5",
-          "1.2.4",
-          "1.2.3",
-          "1.2.2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.1",
-          "1.1.0",
-          "1.0.0",
-          "1"
-        ],
-        "name": "gitleaks",
-        "path": "to-be-continuous/gitleaks",
-        "web_url": "https://gitlab.com/to-be-continuous/gitleaks",
-        "avatar": "https://gitlab.com/to-be-continuous/gitleaks/-/avatar"
-      }
-    },
-    {
-      "name": "Go",
-      "description": "Build, test and analyse your [Go](https://golang.org/) projects",
-      "template_path": "templates/gitlab-ci-golang.yml",
-      "kind": "build",
-      "prefix": "go",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "GO_IMAGE",
-          "description": "The Docker image used to run Go (build+test or build only) - **set the version required by your project**",
-          "default": "registry.hub.docker.com/library/golang:bookworm"
-        },
-        {
-          "name": "GO_PROJECT_DIR",
-          "description": "Go project root directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "GOPROXY",
-          "description": "URL of Go module proxy (see [Go env](https://golang.org/cmd/go/#hdr-Environment_variables))",
-          "advanced": true
-        },
-        {
-          "name": "GO_TEST_IMAGE",
-          "description": "Specific Docker image used to run Go tests (as a separate job)",
-          "advanced": true
-        },
-        {
-          "name": "GO_BUILD_FLAGS",
-          "description": "Flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)",
-          "default": "-mod=readonly",
-          "advanced": true
-        },
-        {
-          "name": "GO_BUILD_MODE",
-          "description": "The template build mode (accepted values are `application`, `modules` and `auto`)",
-          "type": "enum",
-          "values": ["auto", "application", "modules"],
-          "default": "auto",
-          "advanced": true
-        },
-        {
-          "name": "GO_BUILD_LINKER_FLAGS",
-          "description": "Linker flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies) `-ldflags`",
-          "default": "-s -w",
-          "advanced": true
-        },
-        {
-          "name": "GO_BUILD_PACKAGES",
-          "description": "Packages to build with the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)",
-          "default": "./..."
-        },
-        {
-          "name": "GO_TARGET_OS",
-          "description": "The `$GOOS` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)\n\nFallbacks to default `$GOOS` from the Go Docker image",
-          "advanced": true
-        },
-        {
-          "name": "GO_TARGET_ARCH",
-          "description": "The `$GOARCH` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)\n\nFallbacks to default `$GOARCH` from the Go Docker image",
-          "advanced": true
-        },
-        {
-          "name": "GO_TEST_FLAGS",
-          "description": "Flags used by the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)",
-          "default": "-mod=readonly -v -race",
-          "advanced": true
-        },
-        {
-          "name": "GO_TEST_PACKAGES",
-          "description": "Packages to test with the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)",
-          "default": "./..."
-        },
-        {
-          "name": "GO_LIST_ARGS",
-          "description": "Arguments used by the list command",
-          "default": "list -u -m -mod=readonly -json all",
-          "advanced": true
-        },
-        {
-          "name": "GO_COBERTURA_FLAGS",
-          "description": "Build flags to add to use gocover-cobertura, leave blank if not needed",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "golangci-lint",
-          "name": "GolangCI-Lint",
-          "description": "[GolangCI-Lint](https://github.com/golangci/golangci-lint) analysis",
-          "disable_with": "GO_CI_LINT_DISABLED",
-          "variables": [
-            {
-              "name": "GO_CI_LINT_IMAGE",
-              "description": "The Docker image used to run `golangci-lint`",
-              "default": "registry.hub.docker.com/golangci/golangci-lint:latest-alpine"
-            },
-            {
-              "name": "GO_CI_LINT_ARGS",
-              "description": "`golangci-lint` [command line arguments](https://github.com/golangci/golangci-lint#command-line-options)",
-              "default": "-E gosec,goimports ./...",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "go-mod-outdated",
-          "name": "Go-mod-outdated",
-          "description": "[Go-mod-outdated](https://github.com/psampaz/go-mod-outdated) analysis",
-          "variables": [
-            {
-              "name": "GO_MOD_OUTDATED_ARGS",
-              "description": "`god-mod-outdated` [command line arguments](https://github.com/psampaz/go-mod-outdated#usage",
-              "default": "-update -direct",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [cyclonedx-gomod](https://github.com/CycloneDX/cyclonedx-gomod)",
-          "disable_with": "GO_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "GO_SBOM_IMAGE",
-              "default": "registry.hub.docker.com/cyclonedx/cyclonedx-gomod:latest"
-            },
-            {
-              "name": "GO_SBOM_OPTS",
-              "description": "[@cyclonedx/cyclonedx-gomod options](https://github.com/CycloneDX/cyclonedx-gomod#usage) used for SBOM analysis",
-              "default": "-main .",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "govulncheck",
-          "name": "Govulncheck",
-          "description": "Vulnerability Management with [Govulncheck](https://go.dev/blog/vuln)",
-          "disable_with": "GO_VULNCHECK_DISABLED",
-          "variables": [
-            {
-              "name": "GO_VULNCHECK_ARGS",
-              "description": "`govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags)",
-              "default": "./...",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "4.8.0",
-        "tags": [
-          "4.8.0",
-          "4.8",
-          "4.7.0",
-          "4.7",
-          "4.6.1",
-          "4.6.0",
-          "4.6",
-          "4.5.1",
-          "4.5.0",
-          "4.5",
-          "4.4.0",
-          "4.4",
-          "4.3.0",
-          "4.3",
-          "4.2.0",
-          "4.2",
-          "4.1.2",
-          "4.1.1",
-          "4.1.0",
-          "4.1",
-          "4.0.2",
-          "4.0.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.3",
-          "2.1.2",
-          "2.1.1",
-          "2.1.0",
-          "2.0.3",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.3.0",
-          "1.2.2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "golang",
-        "path": "to-be-continuous/golang",
-        "web_url": "https://gitlab.com/to-be-continuous/golang",
-        "avatar": "https://gitlab.com/to-be-continuous/golang/-/avatar"
-      }
-    },
-    {
-      "name": "Gradle",
-      "description": "Build, test and analyse your [Gradle](https://gradle.org/)-based projects",
-      "template_path": "templates/gitlab-ci-gradle.yml",
-      "kind": "build",
-      "prefix": "gradle",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "GRADLE_IMAGE",
-          "description": "The Docker image used to run Gradle - **set the version required by your project**",
-          "default": "registry.hub.docker.com/library/gradle:latest"
-        },
-        {
-          "name": "GRADLE_CLI_OPTS",
-          "description": "Additional Gradle options used on the command line",
-          "advanced": true
-        },
-        {
-          "name": "GRADLE_CLI_BIN",
-          "description": "The location of the gradle binary. If you prefer using a [gradle wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html) you should override this (for e.g. `gradlew`)",
-          "default": "gradle",
-          "advanced": true
-        },
-        {
-          "name": "GRADLE_USER_HOME",
-          "description": "The gradle user home",
-          "default": "$CI_PROJECT_DIR/.gradle",
-          "advanced": true
-        },
-        {
-          "name": "GRADLE_DAEMON",
-          "description": "Whether to use or not gradle daemon",
-          "default": "false",
-          "advanced": true
-        },
-        {
-          "name": "GRADLE_BUILD_ARGS",
-          "description": "Gradle arguments for the build & test job",
-          "default": "build",
-          "advanced": true
-        },
-        {
-          "name": "GRADLE_PROJECT_DIR",
-          "description": "Gradle project root directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "JACOCO_CSV_REPORT",
-          "description": "Name of code coverage report",
-          "default": "jacocoTestReport.csv",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "sonar",
-          "name": "SONAR",
-          "description": "Code quality and security analysis with [SONARQube](https://www.sonarqube.org/)",
-          "variables": [
-            {
-              "name": "SONAR_HOST_URL",
-              "type": "url",
-              "description": "SonarQube server url",
-              "mandatory": true
-            },
-            {
-              "name": "SONAR_TOKEN",
-              "description": "SonarQube authentication token (see https://docs.sonarqube.org/latest/user-guide/user-token/)",
-              "secret": true
-            },
-            {
-              "name": "SONAR_BASE_ARGS",
-              "description": "SonarQube [analysis arguments](https://docs.sonarqube.org/latest/analysis/analysis-parameters/)",
-              "default": "sonar -Dsonar.links.homepage=${CI_PROJECT_URL} -Dsonar.links.ci=${CI_PROJECT_URL}/-/pipelines -Dsonar.links.issue=${CI_PROJECT_URL}/-/issues",
-              "advanced": true
-            },
-            {
-              "name": "SONAR_QUALITY_GATE_ENABLED",
-              "description": "Enables SonarQube [Quality Gate](https://docs.sonarqube.org/latest/user-guide/quality-gates/) verification.\n\n_Uses `sonar.qualitygate.wait` parameter ([see doc](https://docs.sonarqube.org/latest/analysis/ci-integration-overview/#header-1))._",
-              "type": "boolean"
-            }
-          ]
-        },
-        {
-          "id": "dependency-check",
-          "name": "Dependency Check",
-          "description": "Runs a Gradle dependency check",
-          "disable_with": "GRADLE_NO_DEPENDENCY_CHECK",
-          "variables": [
-            {
-              "name": "GRADLE_DEPENDENCY_CHECK_TASK",
-              "description": "The dependency-check task that is invoked",
-              "default": "dependencyCheckAnalyze",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [cyclonedx-gradle-plugin](https://github.com/CycloneDX/cyclonedx-gradle-plugin)",
-          "disable_with": "GRADLE_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "GRADLE_SBOM_VERSION",
-              "description": "Version of the `cyclonedx-gradle-plugin` used for SBOM analysis.\n\n_When unset, the latest version will be used_"
-            }
-          ]
-        },
-        {
-          "id": "publish",
-          "name": "Publish (snapshot & release)",
-          "description": "Enable publishing to an artifacts repository",
-          "disable_with": "GRADLE_NO_PUBLISH",
-          "variables": [
-            {
-              "name": "GRADLE_PUBLISH_ARGS",
-              "description": "The publish task that is invoked",
-              "default": "publish",
-              "advanced": true
-            },
-            {
-              "name": "GRADLE_PUBLISH_VERSION",
-              "description": "The value is propagated as gradle properties named `version`.\n\nIt should be used in your publish task",
-              "default": "${CI_COMMIT_REF_SLUG}-SNAPSHOT",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "2.6.0",
-        "tags": [
-          "2.6.0",
-          "2.6",
-          "2.5.0",
-          "2.5",
-          "2.4.2",
-          "2.4.1",
-          "2.4.0",
-          "2.4",
-          "2.3.0",
-          "2.3",
-          "2.2.2",
-          "2.2.1",
-          "2.2.0",
-          "2.2",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.4.0",
-          "1.4",
-          "1.3.1",
-          "1.3.0",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0",
-          "1"
-        ],
-        "name": "gradle",
-        "path": "to-be-continuous/gradle",
-        "web_url": "https://gitlab.com/to-be-continuous/gradle",
-        "avatar": "https://gitlab.com/to-be-continuous/gradle/-/avatar"
-      }
-    },
-    {
-      "name": "Helm",
-      "description": "Build your Helm Charts and/or deploy your application to a Kubernetes platform using [Helm](https://helm.sh/)",
-      "template_path": "templates/gitlab-ci-helm.yml",
-      "kind": "hosting",
-      "prefix": "helm",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "HELM_CLI_IMAGE",
-          "description": "The Docker image used to run Helm - **set the version required by your Kubernetes server**",
-          "default": "registry.hub.docker.com/alpine/helm:latest"
-        },
-        {
-          "name": "HELM_CHART_DIR",
-          "description": "The folder where the Helm chart is located",
-          "default": "."
-        },
-        {
-          "name": "HELM_SCRIPTS_DIR",
-          "description": "The folder where hook scripts are located",
-          "default": "."
-        },
-        {
-          "name": "HELM_COMMON_VALUES",
-          "description": "Common values file (used for all environments, overridden by specific per-env values files)"
-        },
-        {
-          "name": "HELM_DEPLOY_CHART",
-          "description": "The Helm [chart](https://helm.sh/docs/topics/charts/) to deploy. _Only required if you want to deploy an **external** chart._"
-        },
-        {
-          "name": "HELM_REPOS",
-          "description": "The Helm [chart repositories](https://helm.sh/docs/topics/chart_repository/) to use (formatted as `repo_name_1@repo_url_1 repo_name_2@repo_url_2 ...`)",
-          "default": "stable@https://charts.helm.sh/stable bitnami@https://charts.bitnami.com/bitnami"
-        },
-        {
-          "name": "KUBE_NAMESPACE",
-          "description": "The default Kubernetes namespace to use. _Leave default if [GitLab Kubernetes integration](https://docs.gitlab.com/ee/user/project/clusters/index.html) is enabled._"
-        },
-        {
-          "name": "HELM_DEFAULT_KUBE_CONFIG",
-          "description": "The default kubeconfig content to use. Automatically set if GitLab Kubernetes integration is enabled.",
-          "default": "$KUBECONFIG",
-          "secret": true
-        },
-        {
-          "name": "HELM_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "HELM_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.helm.acme.com`)_"
-        },
-        {
-          "name": "HELM_DEPLOY_ARGS",
-          "description": "The Helm [command with options](https://helm.sh/docs/helm/helm_upgrade/) to deploy the application (_without dynamic arguments such as release name and chart_)",
-          "default": "upgrade --install --atomic --timeout 120s",
-          "advanced": true
-        },
-        {
-          "name": "HELM_DELETE_ARGS",
-          "description": "The Helm [command with options](https://helm.sh/docs/helm/helm_uninstall/) to cleanup the application (_without dynamic arguments such as release name_)",
-          "default": "uninstall",
-          "advanced": true
-        },
-        {
-          "name": "HELM_DEPENDENCY_ARGS",
-          "description": "The Helm [command with options](https://helm.sh/docs/helm/helm_dependency_update/) to update on-disk the chart dependencies (_without dynamic arguments such as the chart path_)",
-          "default": "dependency update",
-          "advanced": true
-        },
-        {
-          "name": "HELM_ENV_VALUE_NAME",
-          "description": "The name of the Helm [value](https://helm.sh/docs/chart_best_practices/values/) containing the _environment type_",
-          "default": "environmentType",
-          "advanced": true
-        },
-        {
-          "name": "HELM_HOSTNAME_VALUE_NAME",
-          "description": "The name of the Helm [value](https://helm.sh/docs/chart_best_practices/values/) containing the _environment hostname_ (extracted from the environment URL)",
-          "default": "hostname",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "lint",
-          "name": "Helm Lint",
-          "description": "Static code analysis of your Helm chart with [Helm Lint](https://helm.sh/docs/helm/helm_lint/)",
-          "disable_with": "HELM_LINT_DISABLED",
-          "variables": [
-            {
-              "name": "HELM_LINT_ARGS",
-              "description": "The Helm [command with options](https://helm.sh/docs/helm/helm_lint/) to trigger the analysis (_without dynamic arguments such as the chart path_)",
-              "default": "lint --strict",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "test",
-          "name": "Helm Test",
-          "description": "Acceptance test of your Helm chart with [Helm Test](https://helm.sh/docs/helm/helm_test/)",
-          "enable_with": "HELM_TEST_ENABLED",
-          "variables": [
-            {
-              "name": "HELM_TEST_ARGS",
-              "description": "The Helm [command with options](https://helm.sh/docs/helm/helm_test/) to perform acceptance test (_without dynamic arguments such as release name_)",
-              "default": "test",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "yamllint",
-          "name": "Yaml Lint",
-          "description": "[Yaml Lint](https://github.com/adrienverge/yamllint) of your Helm [values file](https://helm.sh/docs/chart_template_guide/values_files/)",
-          "disable_with": "HELM_YAMLLINT_DISABLED",
-          "variables": [
-            {
-              "name": "HELM_YAMLLINT_IMAGE",
-              "description": "The Docker image used to run YamlLint test",
-              "default": "registry.hub.docker.com/cytopia/yamllint"
-            },
-            {
-              "name": "HELM_YAMLLINT_CONFIG",
-              "description": "Config used with the yamllint tool",
-              "default": "{extends: relaxed, rules: {line-length: {max: 160}}}",
-              "advanced": true
-            },
-            {
-              "name": "HELM_YAMLLINT_ARGS",
-              "description": "Arguments used by the lint job",
-              "default": "-f colored --strict",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "kube-score",
-          "name": "Kube-Score",
-          "description": "Run [Kube-Score](https://kube-score.com/) on the resources to be created by Helm",
-          "disable_with": "HELM_KUBE_SCORE_DISABLED",
-          "variables": [
-            {
-              "name": "HELM_KUBE_SCORE_IMAGE",
-              "description": "The Docker image used to run [Kube-Score](https://kube-score.com/)",
-              "default": "registry.hub.docker.com/zegl/kube-score"
-            },
-            {
-              "name": "HELM_KUBE_SCORE_ARGS",
-              "description": "Arguments used by the kube-score job",
-              "advanced": true
-            },
-            {
-              "name": "HELM_K8S_VERSION",
-              "description": "Kubernetes version (_so that `.Capabilities.KubeVersion.Version` can be correctly interpreted_). \n\n Expected format: `vX.YY`",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "package",
-          "name": "Package your chart",
-          "description": "[Package](https://helm.sh/docs/helm/helm_package/) your Helm chart",
-          "variables": [
-            {
-              "name": "HELM_PACKAGE_ARGS",
-              "description": "The Helm [command with options](https://helm.sh/docs/helm/helm_package/) to perform the packaging (_without dynamic arguments such as the chart path_)",
-              "default": "package --dependency-update",
-              "advanced": true
-            },
-            {
-              "name": "HELM_PUBLISH_SNAPSHOT_ENABLED",
-              "description": "Set to `true` to enable publishing the snapshot (untested) chart during the packaging step",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "HELM_SEMREL_RELEASE_DISABLED",
-              "description": "Disable semantic-release integration",
-              "type": "boolean",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "publish",
-          "name": "Publish your chart",
-          "description": "Publishes the chart to a [Helm repository](https://helm.sh/docs/topics/chart_repository/) or [OCI-based registry](https://helm.sh/docs/topics/registries/)",
-          "variables": [
-            {
-              "name": "HELM_PUBLISH_URL",
-              "description": "The URL of the Helm repository to publish your Helm package",
-              "default": "oci://$CI_REGISTRY/$CI_PROJECT_PATH/charts"
-            },
-            {
-              "name": "HELM_PUBLISH_METHOD",
-              "description": "HTTP method to use to push the package",
-              "default": "auto",
-              "type": "enum",
-              "values": ["auto", "push", "post", "put", "custom", "disabled"],
-              "advanced": true
-            },
-            {
-              "name": "HELM_PUBLISH_USER",
-              "description": "Helm repository username",
-              "default": "$CI_REGISTRY_USER",
-              "secret": true
-            },
-            {
-              "name": "HELM_PUBLISH_PASSWORD",
-              "description": "Helm repository password",
-              "default": "$CI_REGISTRY_PASSWORD",
-              "secret": true
-            },
-            {
-              "name": "HELM_PUBLISH_ON",
-              "description": "Defines on which Git reference(s) the publish job shall be enabled\n\n`prod` to enable on production branch only, `protected` to enable on protected references, `all` to enable on all Git branches and `tag` on Git release tags (always auto, superseeds `HELM_PUBLISH_STRATEGY`)",
-              "default": "prod",
-              "type": "enum",
-              "values": ["prod", "protected", "all", "tag"]
-            },
-            {
-              "name": "HELM_PUBLISH_STRATEGY",
-              "description": "Defines the publish strategy.",
-              "type": "enum",
-              "values": ["none", "manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "HELM_CM_PUSH_PLUGIN_VERSION",
-              "description": "cm-push plugin version to install (only when using `push` method with a regular chart [repository](https://helm.sh/docs/topics/chart_repository/)",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "enable_with": "HELM_REVIEW_ENABLED",
-          "variables": [
-            {
-              "name": "HELM_REVIEW_APP_NAME",
-              "description": "The application name for `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "HELM_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_REVIEW_VALUES",
-              "description": "The Values file to use with `review` environment"
-            },
-            {
-              "name": "HELM_REVIEW_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_REVIEW_KUBE_CONFIG",
-              "description": "Specific kubeconfig for review env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "enable_with": "HELM_INTEG_ENABLED",
-          "variables": [
-            {
-              "name": "HELM_INTEG_APP_NAME",
-              "description": "The application name for `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_INTEG_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `integration` env",
-              "default": "never"
-            },
-            {
-              "name": "HELM_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_INTEG_VALUES",
-              "description": "The Values file to use with `integration` environment"
-            },
-            {
-              "name": "HELM_INTEG_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_INTEG_KUBE_CONFIG",
-              "description": "Specific kubeconfig for integration env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "enable_with": "HELM_STAGING_ENABLED",
-          "variables": [
-            {
-              "name": "HELM_STAGING_APP_NAME",
-              "description": "The application name for `staging` env _(only define to override default)_",
-              "default": "${HELM_BASE_APP_NAME}-staging",
-              "advanced": true
-            },
-            {
-              "name": "HELM_STAGING_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `staging` env",
-              "default": "never"
-            },
-            {
-              "name": "HELM_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_STAGING_VALUES",
-              "description": "The Values file to use with `staging` environment"
-            },
-            {
-              "name": "HELM_STAGING_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_STAGING_KUBE_CONFIG",
-              "description": "Specific kubeconfig for staging env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "enable_with": "HELM_PROD_ENABLED",
-          "variables": [
-            {
-              "name": "HELM_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "HELM_PROD_APP_NAME",
-              "description": "The application name for `production` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_PROD_VALUES",
-              "description": "The Values file to use with `production` environment"
-            },
-            {
-              "name": "HELM_PROD_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `production` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELM_PROD_KUBE_CONFIG",
-              "description": "Specific kubeconfig for production env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-helm-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "7.2.0",
-        "tags": [
-          "7.2.0",
-          "7.2",
-          "7.1.0",
-          "7.1",
-          "7.0.2",
-          "7.0.1",
-          "7.0.0",
-          "7.0",
-          "7",
-          "6.1.1",
-          "6.1.0",
-          "6.1",
-          "6.0.0",
-          "6.0",
-          "6",
-          "5.3.1",
-          "5.3.0",
-          "5.3",
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.1.7",
-          "4.1.6",
-          "4.1.5",
-          "4.1.4",
-          "4.1.3",
-          "4.1.2",
-          "4.1.1",
-          "4.1.0",
-          "4.1",
-          "4.0.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.3.2",
-          "3.3.1",
-          "3.3.0",
-          "3.3",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.4.1",
-          "2.4.0",
-          "2.4",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.1.0",
-          "2.0.6",
-          "2.0.5",
-          "2.0.4",
-          "2.0.3",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.4.2",
-          "1.4.1",
-          "1.4.0",
-          "1.3.0",
-          "1.2.1",
-          "1.2.0",
-          "1.1.1",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "helm",
-        "path": "to-be-continuous/helm",
-        "web_url": "https://gitlab.com/to-be-continuous/helm",
-        "avatar": "https://gitlab.com/to-be-continuous/helm/-/avatar"
-      }
-    },
-    {
-      "name": "Helmfile",
-      "description": "Deploy your application to a [Kubernetes](https://kubernetes.io/) platform using [helmfile](https://github.com/helmfile/helmfile)",
-      "template_path": "templates/gitlab-ci-helmfile.yml",
-      "kind": "hosting",
-      "prefix": "helmfile",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "HELMFILE_CLI_IMAGE",
-          "description": "The Docker image used to run helmfile - **set the version required by your Kubernetes server**",
-          "default": "ghcr.io/helmfile/helmfile:latest"
-        },
-        {
-          "name": "HELMFILE_SCRIPTS_DIR",
-          "description": "The folder where hook scripts are located",
-          "default": "."
-        },
-        {
-          "name": "HELMFILE_PATH",
-          "description": "Path to the `helmfile.yaml` to deploy",
-          "default": "./helmfile.yaml"
-        },
-        {
-          "name": "KUBE_NAMESPACE",
-          "description": "The default Kubernetes namespace to use. _Leave default if [GitLab Kubernetes integration](https://docs.gitlab.com/ee/user/project/clusters/index.html) is enabled._"
-        },
-        {
-          "name": "HELMFILE_DEFAULT_KUBE_CONFIG",
-          "description": "The default kubeconfig content to use. Automatically set if GitLab Kubernetes integration is enabled.",
-          "default": "$KUBECONFIG",
-          "secret": true
-        },
-        {
-          "name": "HELMFILE_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "HELMFILE_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.helm.acme.com`)_"
-        },
-        {
-          "name": "HELMFILE_DEPLOY_ARGS",
-          "description": "The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#apply) to deploy the application (_without dynamic global parameters such as helmfile path, namespace and environment name)",
-          "default": "apply --suppress-secrets --wait",
-          "advanced": true
-        },
-        {
-          "name": "HELMFILE_DELETE_ARGS",
-          "description": "The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#destroy) to cleanup the application (_without dynamic global parameters such as helmfile path, namespace and environment name)",
-          "default": "destroy",
-          "advanced": true
-        },
-        {
-          "name": "HELMFILE_PGP_PRIVATE_KEY_FILE",
-          "description": "PGP Private key for decrypting helmfile secrets with SOPS (optional). Should be set as a File type variable.",
-          "secret": true
-        },
-        {
-          "name": "HELMFILE_PGP_PASSPHRASE",
-          "description": "Passphrase for PGP private key (optional)",
-          "secret": true
-        },
-        {
-          "name": "HELMFILE_IMAGE_PULL_SECRET_NAME",
-          "description": "Name of the `docker-registry` k8s secret that will be created if the special [GitLab deploy token](https://docs.gitlab.com/ee/user/project/deploy_tokens/#gitlab-deploy-token) is available.",
-          "default": "gitlab-registry",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "lint",
-          "name": "Helmfile Lint",
-          "description": "Runs a [helm lint](https://helm.sh/docs/helm/helm_lint/) across all of the charts/releases in the helmfile manifest.",
-          "enable_with": "HELMFILE_LINT_ENABLED",
-          "variables": [
-            {
-              "name": "HELMFILE_LINT_ARGS",
-              "description": "The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#lint) to trigger the analysis (_without dynamic arguments such as the helmfile path)",
-              "default": "lint",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "test",
-          "name": "Helmfile Test",
-          "description": "Runs acceptance [Helm tests](https://helm.sh/docs/topics/chart_tests/) against the specified releases in the helmfile manifest",
-          "enable_with": "HELMFILE_TEST_ENABLED",
-          "variables": [
-            {
-              "name": "HELMFILE_TEST_ARGS",
-              "description": "The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#test) to perform acceptance test (_without dynamic global arguments such as the helmfile.yaml path, namespace and environment name_)",
-              "default": "test --logs --cleanup",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "enable_with": "HELMFILE_REVIEW_ENABLED",
-          "variables": [
-            {
-              "name": "HELMFILE_REVIEW_APP_NAME",
-              "description": "The application name for `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "HELMFILE_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_REVIEW_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_REVIEW_KUBE_CONFIG",
-              "description": "Specific kubeconfig for review env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "enable_with": "HELMFILE_INTEG_ENABLED",
-          "variables": [
-            {
-              "name": "HELMFILE_INTEG_APP_NAME",
-              "description": "The application name for `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_INTEG_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `integration` env",
-              "default": "never"
-            },
-            {
-              "name": "HELMFILE_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_INTEG_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_INTEG_KUBE_CONFIG",
-              "description": "Specific kubeconfig for integration env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "enable_with": "HELMFILE_STAGING_ENABLED",
-          "variables": [
-            {
-              "name": "HELMFILE_STAGING_APP_NAME",
-              "description": "The application name for `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_STAGING_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `staging` env",
-              "default": "never"
-            },
-            {
-              "name": "HELMFILE_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_STAGING_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_STAGING_KUBE_CONFIG",
-              "description": "Specific kubeconfig for staging env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "enable_with": "HELMFILE_PROD_ENABLED",
-          "variables": [
-            {
-              "name": "HELMFILE_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "HELMFILE_PROD_APP_NAME",
-              "description": "The application name for `production` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_PROD_NAMESPACE",
-              "description": "The Kubernetes namespace to use for `production` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "HELMFILE_PROD_KUBE_CONFIG",
-              "description": "Specific kubeconfig for production env (only define to override default)",
-              "advanced": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-helmfile-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.2.0",
-        "tags": [
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.3",
-          "3.0.2",
-          "3.0.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.1.0",
-          "1.1",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "helmfile",
-        "path": "to-be-continuous/helmfile",
-        "web_url": "https://gitlab.com/to-be-continuous/helmfile",
-        "avatar": "https://gitlab.com/to-be-continuous/helmfile/-/avatar"
-      }
-    },
-    {
-      "name": "Hurl",
-      "description": "Run your automated tests with [Hurl](https://hurl.dev/)",
-      "template_path": "templates/gitlab-ci-hurl.yml",
-      "kind": "acceptance",
-      "prefix": "hurl",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "HURL_IMAGE",
-          "description": "The Docker image used to run Hurl",
-          "default": "ghcr.io/orange-opensource/hurl:latest"
-        },
-        {
-          "name": "HURL_TEST_FILES",
-          "description": "The Hurl test files to run",
-          "default": "hurl/*.hurl"
-        },
-        {
-          "name": "HURL_EXTRA_ARGS",
-          "description": "Hurl extra [run options](https://hurl.dev/docs/manual.html#options)",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Hurl tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.2.0",
-        "tags": ["1.2.0", "1.2", "1.1.0", "1.1", "1.0.1", "1.0.0", "1.0", "1"],
-        "name": "hurl",
-        "path": "to-be-continuous/hurl",
-        "web_url": "https://gitlab.com/to-be-continuous/hurl",
-        "avatar": "https://gitlab.com/to-be-continuous/hurl/-/avatar"
-      }
-    },
-    {
-      "name": "k6",
-      "description": "Run your automated load-testing with [k6](https://k6.io/)",
-      "template_path": "templates/gitlab-ci-k6.yml",
-      "kind": "acceptance",
-      "prefix": "k6",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "K6_IMAGE",
-          "description": "The Docker image used to run k6 CLI.",
-          "default": "registry.hub.docker.com/loadimpact/k6:latest"
-        },
-        {
-          "name": "K6_TESTS_DIR",
-          "description": "The k6 tests directory",
-          "default": "k6"
-        },
-        {
-          "name": "K6_EXTRA_ARGS",
-          "description": "k6 extra [command-line](https://k6.io/docs/getting-started/running-k6)",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable k6 tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.4.0",
-        "tags": [
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.0.0"
-        ],
-        "name": "k6",
-        "path": "to-be-continuous/k6",
-        "web_url": "https://gitlab.com/to-be-continuous/k6",
-        "avatar": "https://gitlab.com/to-be-continuous/k6/-/avatar"
-      }
-    },
-    {
-      "name": "Kubernetes",
-      "description": "Deploy your application to a [Kubernetes](https://kubernetes.io/) platform using [declarative configuration](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/) or [Kustomize](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/)",
-      "template_path": "templates/gitlab-ci-k8s.yml",
-      "kind": "hosting",
-      "prefix": "k8s",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "K8S_KUBECTL_IMAGE",
-          "description": "The Docker image used to run Kubernetes `kubectl` commands - **set the version required by your Kubernetes server**",
-          "default": "registry.hub.docker.com/bitnami/kubectl:latest"
-        },
-        {
-          "name": "K8S_DEFAULT_KUBE_CONFIG",
-          "description": "The default kubeconfig to use (either content or file variable) (only define if not using exploded kubeconfig parameters)",
-          "secret": true
-        },
-        {
-          "name": "K8S_URL",
-          "type": "url",
-          "description": "Global Kubernetes API url (only define if using exploded kubeconfig parameters)"
-        },
-        {
-          "name": "K8S_TOKEN",
-          "description": "Global Kubernetes API token (only define if using exploded kubeconfig parameters)",
-          "secret": true
-        },
-        {
-          "name": "K8S_CA_CERT",
-          "description": "Global Kubernetes cluster server certificate authority (only define if using exploded kubeconfig parameters)",
-          "secret": true
-        },
-        {
-          "name": "K8S_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "K8S_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.k8s.acme.com`)_"
-        },
-        {
-          "name": "K8S_SCRIPTS_DIR",
-          "description": "directory where Kubernetes scripts (templates, hook scripts) are located",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "K8S_KUSTOMIZE_ENABLED",
-          "description": "Set to `true` to enable [Kustomize](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/)",
-          "type": "boolean",
-          "advanced": true
-        },
-        {
-          "name": "K8S_KUSTOMIZE_ARGS",
-          "description": "Additional [`kubectl kustomize` options](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#kustomize)\n\n_For example: `--enable-helm`_",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "kube-score",
-          "name": "kube-score",
-          "description": "Static code analysis of your Kubernetes templates with [kube-score](https://github.com/zegl/kube-score)",
-          "disable_with": "K8S_SCORE_DISABLED",
-          "variables": [
-            {
-              "name": "K8S_KUBE_SCORE_IMAGE",
-              "description": "Docker image to run [kube-score](https://github.com/zegl/kube-score)",
-              "default": "registry.hub.docker.com/zegl/kube-score:latest"
-            },
-            {
-              "name": "K8S_SCORE_EXTRA_OPTS",
-              "description": "Additional [kube-score options](https://github.com/zegl/kube-score#configuration)",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "variables": [
-            {
-              "name": "K8S_REVIEW_SPACE",
-              "description": "Kubernetes namespace for review env",
-              "mandatory": true
-            },
-            {
-              "name": "K8S_REVIEW_APP_NAME",
-              "description": "The application name for review env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "K8S_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "K8S_REVIEW_KUBE_CONFIG",
-              "description": "Specific kubeconfig for review env (only define if not using exploded parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_REVIEW_URL",
-              "type": "url",
-              "description": "Kubernetes API url for review env (only define if using exploded kubeconfig parameters and if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_REVIEW_TOKEN",
-              "description": "Kubernetes API token for review env (only define if using exploded kubeconfig parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_REVIEW_CA_CERT",
-              "description": "Kubernetes cluster server certificate authority for review env (only define if using exploded kubeconfig parameters and if different from global)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "variables": [
-            {
-              "name": "K8S_INTEG_SPACE",
-              "description": "Kubernetes namespace for integration env",
-              "mandatory": true
-            },
-            {
-              "name": "K8S_INTEG_APP_NAME",
-              "description": "The application name for integration env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "K8S_INTEG_KUBE_CONFIG",
-              "description": "Specific kubeconfig for integration env (only define if not using exploded parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_INTEG_URL",
-              "type": "url",
-              "description": "Kubernetes API url for integration env (only define if using exploded kubeconfig parameters and if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_INTEG_TOKEN",
-              "description": "Kubernetes API token for integration env (only define if using exploded kubeconfig parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_INTEG_CA_CERT",
-              "description": "Kubernetes cluster server certificate authority for integration env (only define if using exploded kubeconfig parameters and if different from global)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "variables": [
-            {
-              "name": "K8S_STAGING_SPACE",
-              "description": "Kubernetes namespace for staging env",
-              "mandatory": true
-            },
-            {
-              "name": "K8S_STAGING_APP_NAME",
-              "description": "The application name for staging env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "K8S_STAGING_KUBE_CONFIG",
-              "description": "Specific kubeconfig for staging env (only define if not using exploded parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_STAGING_URL",
-              "type": "url",
-              "description": "Kubernetes API url for staging env (only define if using exploded kubeconfig parameters and if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_STAGING_TOKEN",
-              "description": "Kubernetes API token for staging env (only define if using exploded kubeconfig parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_STAGING_CA_CERT",
-              "description": "Kubernetes cluster server certificate authority for staging env (only define if using exploded kubeconfig parameters and if  different from global)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "variables": [
-            {
-              "name": "K8S_PROD_SPACE",
-              "description": "Kubernetes namespace for production env",
-              "mandatory": true
-            },
-            {
-              "name": "K8S_PROD_APP_NAME",
-              "description": "The application name for production env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "K8S_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "K8S_PROD_KUBE_CONFIG",
-              "description": "Specific kubeconfig for production env (only define if not using exploded parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_PROD_URL",
-              "type": "url",
-              "description": "Kubernetes API url for production env (only define if using exploded kubeconfig parameters and if different from global)",
-              "advanced": true
-            },
-            {
-              "name": "K8S_PROD_TOKEN",
-              "description": "Kubernetes API token for production env (only define if using exploded kubeconfig parameters and if different from global)",
-              "secret": true
-            },
-            {
-              "name": "K8S_PROD_CA_CERT",
-              "description": "Kubernetes cluster server certificate authority for production env (only define if using exploded kubeconfig parameters and if  different from global)",
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-k8s-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "6.1.0",
-        "tags": [
-          "6.1.0",
-          "6.1",
-          "6.0.2",
-          "6.0.1",
-          "6.0.0",
-          "6.0",
-          "6",
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.5.0",
-          "3.5",
-          "3.4.3",
-          "3.4.2",
-          "3.4.1",
-          "3.4.0",
-          "3.4",
-          "3.3.3",
-          "3.3.2",
-          "3.3.1",
-          "3.3.0",
-          "3.3",
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.2",
-          "2.3.1",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.0",
-          "2.0.7",
-          "2.0.6",
-          "2.0.5",
-          "2.0.4",
-          "2.0.3",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.3.1",
-          "1.3.0",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "kubernetes",
-        "path": "to-be-continuous/kubernetes",
-        "web_url": "https://gitlab.com/to-be-continuous/kubernetes",
-        "avatar": "https://gitlab.com/to-be-continuous/kubernetes/-/avatar"
-      }
-    },
-    {
-      "name": "Lighthouse",
-      "description": "Continuously analyse your web apps and web pages performances and developer best practices with [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci)",
-      "template_path": "templates/gitlab-ci-lighthouse.yml",
-      "kind": "acceptance",
-      "prefix": "lhci",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "LHCI_IMAGE",
-          "description": "The Docker image used to run Lighthouse CI (use [browser images](https://github.com/cypress-io/cypress-docker-images/tree/master/browsers) only).",
-          "default": "registry.hub.docker.com/cypress/browsers:latest"
-        },
-        {
-          "name": "LHCI_VERSION",
-          "description": "Lighthouse CI version to run",
-          "default": "latest",
-          "advanced": true
-        },
-        {
-          "name": "LHCI_RUN_OPTS",
-          "description": "Lighthouse CI [autorun options](https://github.com/GoogleChrome/lighthouse-ci/blob/main/docs/configuration.md#autorun)",
-          "default": "--upload.target=filesystem --collect.settings.chromeFlags=\"--no-sandbox\" --collect.url=\"%{environment_url}\"",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Cypress tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.2.0",
-        "tags": [
-          "1.2.0",
-          "1.2",
-          "1.1.0",
-          "1.1",
-          "1.0.2",
-          "1.0.1",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "lighthouse",
-        "path": "to-be-continuous/lighthouse",
-        "web_url": "https://gitlab.com/to-be-continuous/lighthouse",
-        "avatar": "https://gitlab.com/to-be-continuous/lighthouse/-/avatar"
-      }
-    },
-    {
-      "name": "GNU Make",
-      "description": "GitLab CI template for [GNU Make](https://www.gnu.org/software/make/)",
-      "template_path": "templates/gitlab-ci-make.yml",
-      "kind": "build",
-      "prefix": "make",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "MAKE_IMAGE",
-          "description": "The Docker image used to run GNU Make - **set the image required by your project** (see doc)",
-          "default": "registry.hub.docker.com/alpinelinux/build-base"
-        },
-        {
-          "name": "MAKE_BUILD_ARGS",
-          "description": "Make [options](https://www.gnu.org/software/make/manual/html_node/Options-Summary.html) and [goals](https://www.gnu.org/software/make/manual/html_node/Goals.html) for the build & test job",
-          "default": "all test"
-        },
-        {
-          "name": "MAKE_PROJECT_DIR",
-          "description": "Makefile root directory",
-          "default": ".",
-          "advanced": true
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.4.0",
-        "tags": [
-          "1.4.0",
-          "1.4",
-          "1.3.0",
-          "1.3",
-          "1.2.0",
-          "1.2",
-          "1.1.3",
-          "1.1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.1",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "make",
-        "path": "to-be-continuous/make",
-        "web_url": "https://gitlab.com/to-be-continuous/make",
-        "avatar": "https://gitlab.com/to-be-continuous/make/-/avatar"
-      }
-    },
-    {
-      "name": "Maven",
-      "description": "Build, test and analyse your [Maven](https://maven.apache.org/)-based projects",
-      "template_path": "templates/gitlab-ci-maven.yml",
-      "kind": "build",
-      "prefix": "maven",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "MAVEN_IMAGE",
-          "description": "The Docker image used to run Maven - **set the version required by your project**",
-          "default": "registry.hub.docker.com/library/maven:latest"
-        },
-        {
-          "name": "MAVEN_PROJECT_DIR",
-          "description": "Maven project root directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "MAVEN_CFG_DIR",
-          "description": "The Maven configuration directory",
-          "default": ".m2",
-          "advanced": true
-        },
-        {
-          "name": "MAVEN_SETTINGS_FILE",
-          "description": "The Maven `settings.xml` file path",
-          "default": "$MAVEN_CFG_DIR/settings.xml",
-          "advanced": true
-        },
-        {
-          "name": "MAVEN_OPTS",
-          "description": "[Global Maven options](http://maven.apache.org/configure.html#maven_opts-environment-variable)",
-          "default": "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=${MAVEN_CFG_DIR}/repository -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true",
-          "advanced": true
-        },
-        {
-          "name": "MAVEN_CLI_OPTS",
-          "description": "Additional [Maven options](https://maven.apache.org/ref/3-LATEST/maven-embedder/cli.html) used on the command line",
-          "default": "--no-transfer-progress --batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true",
-          "advanced": true
-        },
-        {
-          "name": "MAVEN_BUILD_ARGS",
-          "description": "Maven arguments for the build & test job",
-          "default": "org.jacoco:jacoco-maven-plugin:prepare-agent verify org.jacoco:jacoco-maven-plugin:report",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "sonar",
-          "name": "SONAR",
-          "description": "Code quality and security analysis with [SONARQube](https://www.sonarqube.org/)",
-          "variables": [
-            {
-              "name": "SONAR_HOST_URL",
-              "type": "url",
-              "description": "SonarQube server url",
-              "mandatory": true
-            },
-            {
-              "name": "SONAR_TOKEN",
-              "description": "SonarQube authentication token (see https://docs.sonarqube.org/latest/user-guide/user-token/) - depends on your authentication method",
-              "secret": true
-            },
-            {
-              "name": "SONAR_LOGIN",
-              "description": "SonarQube login (depends on your authentication method)",
-              "secret": true
-            },
-            {
-              "name": "SONAR_PASSWORD",
-              "description": "SonarQube password (depends on your authentication method)",
-              "secret": true
-            },
-            {
-              "name": "SONAR_BASE_ARGS",
-              "description": "SonarQube [analysis arguments](https://docs.sonarqube.org/latest/analysis/analysis-parameters/)",
-              "default": "sonar:sonar -Dsonar.links.homepage=${CI_PROJECT_URL} -Dsonar.links.ci=${CI_PROJECT_URL}/-/pipelines -Dsonar.links.issue=${CI_PROJECT_URL}/-/issues",
-              "advanced": true
-            },
-            {
-              "name": "SONAR_QUALITY_GATE_ENABLED",
-              "description": "Enables SonarQube [Quality Gate](https://docs.sonarqube.org/latest/user-guide/quality-gates/) verification.\n\n_Uses `sonar.qualitygate.wait` parameter ([see doc](https://docs.sonarqube.org/latest/analysis/ci-integration-overview/#header-1))._",
-              "type": "boolean"
-            }
-          ]
-        },
-        {
-          "id": "dependency-check",
-          "name": "Dependency-Check",
-          "description": "[Dependency-Check](https://jeremylong.github.io/DependencyCheck/dependency-check-maven/configuration.html) analysis",
-          "disable_with": "MAVEN_DEPENDENCY_CHECK_DISABLED",
-          "variables": [
-            {
-              "name": "MAVEN_DEPENDENCY_CHECK_ARGS",
-              "description": "Maven arguments for Dependency Check job",
-              "default": "org.owasp:dependency-check-maven:aggregate -DretireJsAnalyzerEnabled=false -DassemblyAnalyzerEnabled=false -Dformats=HTML,JSON,XML",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "forbid-snapshot-dependencies",
-          "name": "Snapshot dependencies verification",
-          "description": "This job verifies your project has no _snapshot_ dependencies. Failure is allowed in feature branches.",
-          "disable_with": "MVN_FORBID_SNAPSHOT_DEPENDENCIES_DISABLED"
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [cyclonedx-maven-plugin](https://github.com/CycloneDX/cyclonedx-maven-plugin)",
-          "disable_with": "MAVEN_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "MAVEN_SBOM_GEN_ARGS",
-              "description": "Maven command used for SBOM analysis",
-              "default": "org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "publish",
-          "name": "Publish",
-          "description": "Publish [Snapshot](https://maven.apache.org/plugins/maven-deploy-plugin/) & [Releases](http://maven.apache.org/maven-release/maven-release-plugin) to a Maven-compliant repository",
-          "enable_with": "MAVEN_DEPLOY_ENABLED",
-          "variables": [
-            {
-              "name": "MAVEN_DEPLOY_ARGS",
-              "description": "Maven arguments for the deploy job",
-              "default": "deploy -Dmaven.test.skip=true",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_DEPLOY_FROM_UNPROTECTED_DISABLED",
-              "description": "Set to limit snapshot publication to protected branches",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_DEPLOY_SNAPSHOT_WITH_SLUG_ENABLED",
-              "description": "Enable to inject the Git branch slug in SNAPSHOT versions",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_RELEASE_ARGS",
-              "description": "Maven arguments for the release job",
-              "default": "release:prepare -DtagNameFormat=@{project.version} -Darguments=-Dmaven.test.skip=true",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_RELEASE_VERSION",
-              "description": "Explicit version to use when triggering a release\n\n_Otherwise uses the current snapshot version from `pom.xml`)_",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_RELEASE_SCM_COMMENT_PREFIX",
-              "description": "Maven release plugin [scmCommentPrefix](https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#scmCommentPrefix) parameter",
-              "default": "chore(maven-release): ",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_RELEASE_SCM_RELEASE_COMMENT",
-              "description": "Maven release plugin [scmReleaseCommitComment](https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#scmReleaseCommitComment) parameter\n\n(since Maven `3.0.0-M1`)",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_RELEASE_SCM_DEV_COMMENT",
-              "description": "Maven release plugin [scmDevelopmentCommitComment](https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#scmDevelopmentCommitComment) parameter\n\n(since Maven `3.0.0-M1`)",
-              "advanced": true
-            },
-            {
-              "name": "MVN_SEMREL_RELEASE_DISABLED",
-              "description": "Disable semantic-release integration",
-              "advanced": true
-            },
-            {
-              "name": "GIT_USERNAME",
-              "description": "Git username (if you wish to release using Git credentials)",
-              "secret": true
-            },
-            {
-              "name": "GIT_PASSWORD",
-              "description": "Git password (if you wish to release using Git credentials)",
-              "secret": true
-            },
-            {
-              "name": "GIT_PRIVATE_KEY",
-              "description": "Git private SSH key (if you wish to release using SSH key or GitLab Deploy Key)",
-              "secret": true
-            },
-            {
-              "name": "MAVEN_REPOSITORY_USERNAME",
-              "description": "Maven repository username (inject in your settings.xml as ${env.MAVEN_REPOSITORY_USERNAME})",
-              "secret": true
-            },
-            {
-              "name": "MAVEN_REPOSITORY_PASSWORD",
-              "description": "Maven repository password (inject in your settings.xml as ${env.MAVEN_REPOSITORY_PASSWORD})",
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "jib",
-          "name": "Jib",
-          "description": "Build Docker and OCI images for your Java applications with [Jib](https://github.com/GoogleContainerTools/jib)",
-          "template_path": "templates/gitlab-ci-maven-jib.yml",
-          "features": [
-            {
-              "id": "mvn-trivy",
-              "name": "Maven Trivy",
-              "description": "[Trivy](https://github.com/aquasecurity/trivy) vulnerability analysis",
-              "disable_with": "MAVEN_TRIVY_DISABLED",
-              "variables": [
-                {
-                  "name": "MAVEN_TRIVY_IMAGE",
-                  "description": "The docker image used to scan images with Trivy",
-                  "default": "registry.hub.docker.com/aquasec/trivy:latest",
-                  "advanced": true
-                },
-                {
-                  "name": "MAVEN_TRIVY_ADDR",
-                  "type": "url",
-                  "description": "The Trivy server address"
-                },
-                {
-                  "name": "MAVEN_TRIVY_SECURITY_LEVEL_THRESHOLD",
-                  "type": "enum",
-                  "values": [
-                    "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL",
-                    "LOW,MEDIUM,HIGH,CRITICAL",
-                    "MEDIUM,HIGH,CRITICAL",
-                    "HIGH,CRITICAL",
-                    "CRITICAL"
-                  ],
-                  "description": "Severities of vulnerabilities to be displayed (comma separated values: `UNKNOWN`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`)",
-                  "default": "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL"
-                },
-                {
-                  "name": "MAVEN_TRIVY_ARGS",
-                  "description": "Additional `trivy client` arguments",
-                  "default": "--ignore-unfixed --vuln-type os",
-                  "advanced": true
-                }
-              ]
-            },
-            {
-              "id": "mvn-sbom",
-              "name": "Maven Software Bill of Materials",
-              "description": "This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)",
-              "disable_with": "MAVEN_SBOM_DISABLED",
-              "variables": [
-                {
-                  "name": "MAVEN_SBOM_IMAGE",
-                  "default": "registry.hub.docker.com/anchore/syft:debug",
-                  "advanced": true
-                },
-                {
-                  "name": "MAVEN_SBOM_OPTS",
-                  "description": "Options for syft used for SBOM analysis",
-                  "default": "--catalogers rpm-db-cataloger,alpmdb-cataloger,apkdb-cataloger,dpkgdb-cataloger,portage-cataloger",
-                  "advanced": true
-                }
-              ]
-            }
-          ],
-          "variables": [
-            {
-              "name": "MAVEN_JIB_SNAPSHOT_IMAGE",
-              "description": "Maven Jib Snapshot image",
-              "default": "$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"
-            },
-            {
-              "name": "MAVEN_JIB_RELEASE_IMAGE",
-              "description": "Maven Jib Release image",
-              "default": "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
-            },
-            {
-              "name": "MAVEN_SKOPEO_IMAGE",
-              "description": "The image used to publish images with Skopeo",
-              "default": "quay.io/skopeo/stable:latest",
-              "advanced": true
-            },
-            {
-              "name": "MAVEN_JIB_BUILD_ARGS",
-              "description": "[Jib Maven Plugin arguments](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#extended-usage)",
-              "default": "-Djib.to.image=$MAVEN_JIB_SNAPSHOT_IMAGE"
-            },
-            {
-              "name": "MAVEN_JIB_PROD_PUBLISH_STRATEGY",
-              "description": "Defines the publish to production strategy.",
-              "type": "enum",
-              "values": ["none", "manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "MAVEN_JIB_PUBLISH_ARGS",
-              "description": "Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)"
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.9.0",
-        "tags": [
-          "3.9.0",
-          "3.9",
-          "3.8.0",
-          "3.8",
-          "3.7.1",
-          "3.7.0",
-          "3.7",
-          "3.6.2",
-          "3.6.1",
-          "3.6.0",
-          "3.6",
-          "3.5.0",
-          "3.5",
-          "3.4.0",
-          "3.4",
-          "3.3.1",
-          "3.3.0",
-          "3.3",
-          "3.2.3",
-          "3.2.2",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.4",
-          "3.1.3",
-          "3.1.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.1.6",
-          "2.1.5",
-          "2.1.4",
-          "2.1.3",
-          "2.1.2",
-          "2.1.1",
-          "2.1.0",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.4.2",
-          "1.4.1",
-          "1.4.0",
-          "1.3.0",
-          "1.2.0",
-          "1.1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "maven",
-        "path": "to-be-continuous/maven",
-        "web_url": "https://gitlab.com/to-be-continuous/maven",
-        "avatar": "https://gitlab.com/to-be-continuous/maven/-/avatar"
-      }
-    },
-    {
-      "name": "MkDocs",
-      "description": "Build your static website with [MkDocs](https://www.mkdocs.org/)",
-      "template_path": "templates/gitlab-ci-mkdocs.yml",
-      "kind": "build",
-      "prefix": "mkd",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "MKD_IMAGE",
-          "description": "The Docker image used to run MkDocs",
-          "default": "registry.hub.docker.com/polinux/mkdocs:latest"
-        },
-        {
-          "name": "MKD_BUILD_ARGS",
-          "description": "Arguments used by the build job",
-          "advanced": true
-        },
-        {
-          "name": "MKD_WORKSPACE_DIR",
-          "description": "MkDocs sources directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "MKD_SITE_DIR",
-          "description": "MkDocs generated site directory (relative to `$MKD_WORKSPACE_DIR`)",
-          "default": "site",
-          "advanced": true
-        },
-        {
-          "name": "MKD_REQUIREMENTS_FILE",
-          "description": "Requirements file. If the file is not found in the repository, requirements are read from the `MKD_REQUIREMENTS` variable",
-          "default": "requirements.txt",
-          "advanced": true
-        },
-        {
-          "name": "MKD_REQUIREMENTS",
-          "description": "Space separated requirements (ignored if a requirement file is found)",
-          "default": "mkdocs",
-          "advanced": true
-        },
-        {
-          "name": "MKD_PREBUILD_SCRIPT",
-          "description": "Pre-build hook script",
-          "default": "mkdocs-pre-build.sh",
-          "advanced": true
-        },
-        {
-          "name": "PIP_OPTS",
-          "description": "pip extra [options](https://pip.pypa.io/en/stable/cli/pip/#general-options)",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "lychee",
-          "name": "lychee",
-          "description": "Checks broken links and emails with [lychee](https://github.com/lycheeverse/lychee)",
-          "enable_with": "MKD_LYCHEE_ENABLED",
-          "variables": [
-            {
-              "name": "MKD_LYCHEE_IMAGE",
-              "description": "The Docker image used to run [lychee](https://github.com/lycheeverse/lychee)",
-              "default": "registry.hub.docker.com/lycheeverse/lychee:latest",
-              "advanced": true
-            },
-            {
-              "name": "MKD_LYCHEE_ARGS",
-              "description": "[lychee arguments](https://github.com/lycheeverse/lychee#commandline-parameters) to execute",
-              "default": "docs/"
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "pages",
-          "name": "GitLab Pages",
-          "description": "Adds a job to publish the generated site to GitLab pages",
-          "template_path": "templates/gitlab-ci-mkdocs-pages.yml"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "2.4.0",
-        "tags": [
-          "2.4.0",
-          "2.4",
-          "2.3.1",
-          "2.3.0",
-          "2.3",
-          "2.2.1",
-          "2.2.0",
-          "2.2",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.5.0",
-          "1.5",
-          "1.4.3",
-          "1.4.2",
-          "1.4.1",
-          "1.4.0",
-          "1.3.0",
-          "1.2.0",
-          "1.1.1",
-          "1.1.0",
-          "1.0.0",
-          "1"
-        ],
-        "name": "mkdocs",
-        "path": "to-be-continuous/mkdocs",
-        "web_url": "https://gitlab.com/to-be-continuous/mkdocs",
-        "avatar": "https://gitlab.com/to-be-continuous/mkdocs/-/avatar"
-      }
-    },
-    {
-      "name": "MobSF",
-      "description": "Perform pen-testing, malware analysis and security assessment for mobile applications with [Mobile Security Framework](https://github.com/MobSF/Mobile-Security-Framework-MobSF) (MobSF)",
-      "template_path": "templates/gitlab-ci-mobsf.yml",
-      "kind": "analyse",
-      "prefix": "mobsf",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "MOBSF_CLIENT_IMAGE",
-          "description": "The Docker image used to send requests to the MobSF server",
-          "default": "registry.hub.docker.com/badouralix/curl-jq"
-        },
-        {
-          "name": "MOBSF_SERVER_URL",
-          "description": "URL of MobSF server",
-          "mandatory": false
-        },
-        {
-          "name": "MOBSF_API_KEY",
-          "description": "API key of the MobSF server",
-          "secret": true
-        },
-        {
-          "name": "MOBSF_APP_FILE",
-          "description": "Application package file (APK or IPA)",
-          "mandatory": true
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "2.3.0",
-        "tags": [
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.3",
-          "2.1.2",
-          "2.1.1",
-          "2.1.0",
-          "2.1",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.2.0",
-          "1.2",
-          "1.1.0",
-          "1.0.1",
-          "1.0.0",
-          "1"
-        ],
-        "name": "mobsf",
-        "path": "to-be-continuous/mobsf",
-        "web_url": "https://gitlab.com/to-be-continuous/mobsf",
-        "avatar": "https://gitlab.com/to-be-continuous/mobsf/-/avatar"
-      }
-    },
-    {
-      "name": "Node.js",
-      "description": "Build, test and analyse your JavaScript/TypeScript/[Node.js](https://nodejs.org/) projects",
-      "template_path": "templates/gitlab-ci-node.yml",
-      "kind": "build",
-      "prefix": "node",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "NODE_CONFIG_REGISTRY",
-          "description": "npm [registry](https://docs.npmjs.com/cli/v8/using-npm/registry)    ",
-          "type": "url",
-          "advanced": true
-        },
-        {
-          "name": "NODE_IMAGE",
-          "description": "The Docker image used to run Node.js - **set the version required by your project**",
-          "default": "registry.hub.docker.com/library/node:lts-alpine"
-        },
-        {
-          "name": "NODE_MANAGER",
-          "description": "The package manager used by your project (npm, yarn or pnpm) - **if undefined, automatic detection**",
-          "default": "auto",
-          "type": "enum",
-          "values": ["auto", "npm", "yarn", "pnpm"],
-          "advanced": true
-        },
-        {
-          "name": "NODE_PROJECT_DIR",
-          "description": "Node project root directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "NODE_SOURCE_DIR",
-          "description": "Sources directory",
-          "default": "src",
-          "advanced": true
-        },
-        {
-          "name": "NODE_CONFIG_SCOPED_REGISTRIES",
-          "description": "Space separated list of NPM [scoped registries](https://docs.npmjs.com/cli/v8/using-npm/scope#associating-a-scope-with-a-registry) (formatted as `@somescope:https://some.npm.registry/some/repo @anotherscope:https://another.npm.registry/another/repo`)",
-          "advanced": true
-        },
-        {
-          "name": "NODE_BUILD_ARGS",
-          "description": "npm [run script](https://docs.npmjs.com/cli/v8/commands/npm-run-script) arguments - yarn [run script](https://classic.yarnpkg.com/en/docs/cli/run) arguments - pnpm [run script](https://pnpm.io/cli/run) arguments",
-          "default": "run build --prod",
-          "advanced": true
-        },
-        {
-          "name": "NODE_BUILD_DIR",
-          "description": "Variable to define build directory",
-          "default": "dist",
-          "advanced": true
-        },
-        {
-          "name": "NODE_TEST_ARGS",
-          "description": "npm [test](https://docs.npmjs.com/cli/v8/commands/npm-test) arguments - yarn [test](https://classic.yarnpkg.com/en/docs/cli/test) arguments - pnpm [test](https://pnpm.io/cli/test) arguments",
-          "default": "test -- --coverage",
-          "advanced": true
-        },
-        {
-          "name": "NODE_INSTALL_EXTRA_OPTS",
-          "description": "Extra options to install project dependencies (either [`npm ci`](https://docs.npmjs.com/cli/ci.html/), [`yarn install`](https://yarnpkg.com/cli/install) or [`pnpm install`](https://pnpm.io/cli/install))",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "node-lint",
-          "name": "node lint",
-          "description": "node lint analysis",
-          "enable_with": "NODE_LINT_ENABLED",
-          "variables": [
-            {
-              "name": "NODE_LINT_ARGS",
-              "description": "npm [run script](https://docs.npmjs.com/cli/v8/commands/npm-run-script) arguments to execute the lint analysis - yarn [run script](https://classic.yarnpkg.com/en/docs/cli/run) arguments to execute the lint analysis - pnpm [run script](https://pnpm.io/cli/run) arguments to execute the lint analysis",
-              "default": "run lint",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "node-audit",
-          "name": "node audit",
-          "description": "node audit analysis",
-          "disable_with": "NODE_AUDIT_DISABLED",
-          "variables": [
-            {
-              "name": "NODE_AUDIT_ARGS",
-              "description": "npm [audit](https://docs.npmjs.com/cli/v8/commands/npm-audit) arguments - yarn [audit](https://classic.yarnpkg.com/en/docs/cli/audit) arguments - [pnpm audit](https://pnpm.io/cli/audit) arguments",
-              "default": "--audit-level=low"
-            }
-          ]
-        },
-        {
-          "id": "node-outdated",
-          "name": "node outdated",
-          "description": "node outdated analysis",
-          "disable_with": "NODE_OUTDATED_DISABLED",
-          "variables": [
-            {
-              "name": "NODE_OUTDATED_ARGS",
-              "description": "npm [outdated](https://docs.npmjs.com/cli/v8/commands/npm-outdated) arguments - yarn [outdated](https://classic.yarnpkg.com/lang/en/docs/cli/outdated/) arguments - pnpm [outdated](https://pnpm.io/cli/outdated) arguments",
-              "default": "--long"
-            }
-          ]
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [@cyclonedx/cyclonedx-npm](https://www.npmjs.com/package/@cyclonedx/cyclonedx-npm)",
-          "disable_with": "NODE_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "NODE_SBOM_VERSION",
-              "description": "Version of the @cyclonedx/cyclonedx-npm used for SBOM analysis",
-              "advanced": true
-            },
-            {
-              "name": "NODE_SBOM_OPTS",
-              "description": "Options for @cyclonedx/cyclonedx-npm used for SBOM analysis",
-              "default": "--omit dev",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "publish",
-          "name": "Publish",
-          "description": "[publishes](https://docs.npmjs.com/cli/v8/commands/npm-publish) the project package to a npm registry",
-          "enable_with": "NODE_PUBLISH_ENABLED",
-          "variables": [
-            {
-              "name": "NODE_PUBLISH_ARGS",
-              "description": "npm [publish](https://docs.npmjs.com/cli/v8/commands/npm-publish) extra arguments - yarn [publish](https://classic.yarnpkg.com/lang/en/docs/cli/publish/) extra arguments - pnpm [publish](https://pnpm.io/cli/publish) extra arguments",
-              "advanced": true
-            },
-            {
-              "name": "NODE_PUBLISH_TOKEN",
-              "description": "npm publication registry authentication token",
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.11.0",
-        "tags": [
-          "3.11.0",
-          "3.11",
-          "3.10.1",
-          "3.10.0",
-          "3.10",
-          "3.9.0",
-          "3.9",
-          "3.8.0",
-          "3.8",
-          "3.7.1",
-          "3.7.0",
-          "3.7",
-          "3.6.0",
-          "3.6",
-          "3.5.3",
-          "3.5.2",
-          "3.5.1",
-          "3.5.0",
-          "3.5",
-          "3.4.2",
-          "3.4.1",
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.4.0",
-          "2.4",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.1.0",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.0",
-          "1.1.1",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "node",
-        "path": "to-be-continuous/node",
-        "web_url": "https://gitlab.com/to-be-continuous/node",
-        "avatar": "https://gitlab.com/to-be-continuous/node/-/avatar"
-      }
-    },
-    {
-      "name": "OpenShift",
-      "description": "Deploy your application to an [OpenShift](https://www.openshift.com/) platform",
-      "template_path": "templates/gitlab-ci-openshift.yml",
-      "kind": "hosting",
-      "prefix": "os",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "OS_CLI_IMAGE",
-          "description": "the Docker image used to run OpenShift Client (OC) CLI commands - **set the version required by your OpenShift server**",
-          "default": "quay.io/openshift/origin-cli:latest"
-        },
-        {
-          "name": "OS_URL",
-          "type": "url",
-          "description": "Global OpenShift API url",
-          "mandatory": true
-        },
-        {
-          "name": "OS_TOKEN",
-          "description": "Global OpenShift API token",
-          "secret": true,
-          "mandatory": true
-        },
-        {
-          "name": "OS_BASE_APP_NAME",
-          "description": "Base application name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "OS_BASE_TEMPLATE_NAME",
-          "description": "Base OpenShift template name",
-          "default": "openshift",
-          "advanced": true
-        },
-        {
-          "name": "OS_ENVIRONMENT_URL",
-          "type": "url",
-          "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.openshift.acme.com`)_"
-        },
-        {
-          "name": "OS_SCRIPTS_DIR",
-          "description": "directory where OpenShift scripts (templates, hook scripts) are located",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "OS_APP_LABEL",
-          "description": "The OpenShift [label](https://docs.openshift.com/container-platform/3.11/dev_guide/templates.html#writing-labels) set with the `$environment_name` dynamic variable.",
-          "default": "app",
-          "advanced": true
-        },
-        {
-          "name": "OS_ENV_LABEL",
-          "description": "The OpenShift [label](https://docs.openshift.com/container-platform/3.11/dev_guide/templates.html#writing-labels) set with the `$environment_type` dynamic variable.",
-          "default": "env",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "variables": [
-            {
-              "name": "OS_REVIEW_PROJECT",
-              "description": "OpenShift project for review env",
-              "mandatory": true
-            },
-            {
-              "name": "OS_REVIEW_APP_NAME",
-              "description": "The application name for review env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            },
-            {
-              "name": "OS_REVIEW_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "OS_REVIEW_URL",
-              "type": "url",
-              "description": "OpenShift API url for review env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_REVIEW_TOKEN",
-              "description": "OpenShift API token for review env (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "CLEANUP_ALL_REVIEW",
-              "description": "Enables a **manual** job to cleanup all review envs at once.\n\nYou may also use it to [schedule](https://docs.gitlab.com/ee/ci/pipelines/schedules.html) cloud resources cleanup. See documentation.",
-              "type": "boolean"
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "variables": [
-            {
-              "name": "OS_INTEG_PROJECT",
-              "description": "OpenShift project for integration env",
-              "mandatory": true
-            },
-            {
-              "name": "OS_INTEG_APP_NAME",
-              "description": "The application name for integration env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_INTEG_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "OS_INTEG_URL",
-              "type": "url",
-              "description": "OpenShift API url for integration env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_INTEG_TOKEN",
-              "description": "OpenShift API token for integration env (only define to override default)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "variables": [
-            {
-              "name": "OS_STAGING_PROJECT",
-              "description": "OpenShift project for staging env",
-              "mandatory": true
-            },
-            {
-              "name": "OS_STAGING_APP_NAME",
-              "description": "The application name for staging env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_STAGING_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "OS_STAGING_URL",
-              "type": "url",
-              "description": "OpenShift API url for staging env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_STAGING_TOKEN",
-              "description": "OpenShift API token for staging env (only define to override default)",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "variables": [
-            {
-              "name": "OS_PROD_PROJECT",
-              "description": "OpenShift project for production env",
-              "mandatory": true
-            },
-            {
-              "name": "OS_PROD_APP_NAME",
-              "description": "The application name for production env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_PROD_ENVIRONMENT_URL",
-              "type": "url",
-              "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
-              "advanced": true
-            },
-            {
-              "name": "OS_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "OS_PROD_URL",
-              "type": "url",
-              "description": "OpenShift API url for production env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "OS_PROD_TOKEN",
-              "description": "OpenShift API token for production env (only define to override default)",
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-openshift-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "5.2.0",
-        "tags": [
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.2.5",
-          "2.2.4",
-          "2.2.3",
-          "2.2.2",
-          "2.2.1",
-          "2.2.0",
-          "2.2",
-          "2.1.0",
-          "2.1",
-          "2.0.0",
-          "2.0",
-          "2",
-          "1.4.0",
-          "1.4",
-          "1.3.0",
-          "1.3",
-          "1.2.7",
-          "1.2.6",
-          "1.2.5",
-          "1.2.4",
-          "1.2.3",
-          "1.2.2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0",
-          "1"
-        ],
-        "name": "openshift",
-        "path": "to-be-continuous/openshift",
-        "web_url": "https://gitlab.com/to-be-continuous/openshift",
-        "avatar": "https://gitlab.com/to-be-continuous/openshift/-/avatar"
-      }
-    },
-    {
-      "name": "PHP",
-      "description": "Build, test and analyse your [PHP](https://www.php.net/) projects",
-      "template_path": "templates/gitlab-ci-php.yml",
-      "kind": "build",
-      "prefix": "php",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "PHP_IMAGE",
-          "description": "The Docker image used to run PHP - **set the version required by your project**",
-          "default": "registry.hub.docker.com/library/php:latest"
-        },
-        {
-          "name": "PHP_PROJECT_DIR",
-          "description": "The PHP project root directory",
-          "default": ".",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "phpunit",
-          "name": "PHPUnit",
-          "description": "[PHPUnit](https://phpunit.readthedocs.io/) tests\n\nAutomatically enabled if a PHPUnit [XML configuration file](https://phpunit.readthedocs.io/en/9.5/configuration.html#appendixes-configuration) is found in the project (`phpunit.xml`)",
-          "disable_with": "PHP_UNIT_DISABLED",
-          "variables": [
-            {
-              "name": "PHP_UNIT_ARGS",
-              "description": "Additional PHPUnit [options](https://phpunit.readthedocs.io/en/9.5/textui.html#command-line-options)",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "codesniffer",
-          "name": "PHP_CodeSniffer",
-          "description": "[PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) analysis",
-          "disable_with": "PHP_CODESNIFFER_DISABLED",
-          "variables": [
-            {
-              "name": "PHP_CODESNIFFER_ARGS",
-              "description": "PHP_CodeSniffer [options](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options)\n\nEither use this variable or use an [XML configuration file](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#using-a-default-configuration-file) in your project.",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [@cyclonedx/cyclonedx-php](https://github.com/CycloneDX/cyclonedx-php-composer)",
-          "disable_with": "PHP_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "PHP_SBOM_VERSION",
-              "description": "Version of the cyclonedx-php-composer used for SBOM analysis",
-              "advanced": true
-            },
-            {
-              "name": "PHP_SBOM_OPTS",
-              "description": "[`cyclonedx/cyclonedx-php` options](https://github.com/CycloneDX/cyclonedx-php-composer#usage) used for SBOM analysis",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "outdated",
-          "name": "composer outdated",
-          "description": "Shows the list of installed packages that have updates available (uses [`composer outdated`](https://getcomposer.org/doc/03-cli.md#outdated))",
-          "variables": [
-            {
-              "name": "PHP_OUTDATED_OPTS",
-              "description": "[`composer outdated` options](https://getcomposer.org/doc/03-cli.md#outdated)",
-              "default": "--direct",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "audit",
-          "name": "composer audit",
-          "description": " Scan your dependencies for vulnerabilities with [`composer audit`](https://getcomposer.org/doc/03-cli.md#audit)",
-          "disable_with": "PHP_COMPOSER_AUDIT_DISABLED",
-          "variables": [
-            {
-              "name": "PHP_COMPOSER_AUDIT_OPTS",
-              "description": "[`composer audit` options](https://getcomposer.org/doc/03-cli.md#audit)",
-              "default": "--locked",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "4.6.0",
-        "tags": [
-          "4.6.0",
-          "4.6",
-          "4.5.0",
-          "4.5",
-          "4.4.2",
-          "4.4.1",
-          "4.4.0",
-          "4.4",
-          "4.3.0",
-          "4.3",
-          "4.2.2",
-          "4.2.1",
-          "4.2.0",
-          "4.2",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.1",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "php",
-        "path": "to-be-continuous/php",
-        "web_url": "https://gitlab.com/to-be-continuous/php",
-        "avatar": "https://gitlab.com/to-be-continuous/php/-/avatar"
-      }
-    },
-    {
-      "name": "Playwright",
-      "description": "Run your automated tests with [Playwright](https://playwright.dev/docs/intro)",
-      "template_path": "templates/gitlab-ci-playwright.yml",
-      "kind": "acceptance",
-      "prefix": "playwright",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "PLAYWRIGHT_IMAGE",
-          "description": "The Docker image used to run Playwright",
-          "default": "mcr.microsoft.com/playwright:latest"
-        },
-        {
-          "name": "PLAYWRIGHT_PROJECT_DIR",
-          "description": "The Playwright root project directory (contains the `playwright.config.ts` file)",
-          "default": "."
-        },
-        {
-          "name": "PLAYWRIGHT_EXTRA_ARGS",
-          "description": "Playwright extra [run options](https://playwright.dev/docs/test-cli)",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Playwright tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.2.0",
-        "tags": ["1.2.0", "1.2", "1.1.0", "1.1", "1.0.0", "1.0", "1"],
-        "name": "playwright",
-        "path": "to-be-continuous/playwright",
-        "web_url": "https://gitlab.com/to-be-continuous/playwright",
-        "avatar": "https://gitlab.com/to-be-continuous/playwright/-/avatar"
-      }
-    },
-    {
-      "name": "Postman",
-      "description": "Run your automated (API) tests with [Postman](https://www.postman.com/automated-testing)",
-      "template_path": "templates/gitlab-ci-postman.yml",
-      "kind": "acceptance",
-      "prefix": "postman",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "POSTMAN_IMAGE",
-          "description": "The Docker image used to run Postman CLI.",
-          "default": "registry.hub.docker.com/postman/newman:latest"
-        },
-        {
-          "name": "POSTMAN_COLLECTIONS",
-          "description": "The matcher to select Postman collection file(s) to run.",
-          "default": "postman/*collection.json"
-        },
-        {
-          "name": "POSTMAN_EXTRA_ARGS",
-          "description": "Newman extra [run options](https://github.com/postmanlabs/newman#command-line-options) (to use global variables, an environment or a data source for e.g.)",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Postman tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.4.0",
-        "tags": [
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "postman",
-        "path": "to-be-continuous/postman",
-        "web_url": "https://gitlab.com/to-be-continuous/postman",
-        "avatar": "https://gitlab.com/to-be-continuous/postman/-/avatar"
-      }
-    },
-    {
-      "name": "Puppeteer",
-      "description": "Run your automated (web) tests with [Puppeteer](https://pptr.dev/)",
-      "template_path": "templates/gitlab-ci-puppeteer.yml",
-      "kind": "acceptance",
-      "prefix": "puppeteer",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "PUPPETEER_IMAGE",
-          "description": "The Docker image used to run [Puppeteer](https://hub.docker.com/r/ghcr.io/puppeteer/puppeteer)",
-          "default": "ghcr.io/puppeteer/puppeteer:latest"
-        },
-        {
-          "name": "PUPPETEER_PROJECT_DIR",
-          "description": "The Puppeteer project directory (containing `package.json`)",
-          "default": "."
-        },
-        {
-          "name": "PUPPETEER_TEST_EXTRA_ARGS",
-          "description": "Testing framework extra options based on [Jest](https://jestjs.io/docs/en/cli)",
-          "advanced": true
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Puppeteer tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.4.0",
-        "tags": [
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "puppeteer",
-        "path": "to-be-continuous/puppeteer",
-        "web_url": "https://gitlab.com/to-be-continuous/puppeteer",
-        "avatar": "https://gitlab.com/to-be-continuous/puppeteer/-/avatar"
-      }
-    },
-    {
-      "name": "Python",
-      "description": "Build, test and analyse your [Python](https://www.python.org/) projects",
-      "template_path": "templates/gitlab-ci-python.yml",
-      "kind": "build",
-      "prefix": "python",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "PYTHON_IMAGE",
-          "description": "The Docker image used to run Python - **set the version required by your project**",
-          "default": "registry.hub.docker.com/library/python:3"
-        },
-        {
-          "name": "PYTHON_PROJECT_DIR",
-          "description": "Python project root directory",
-          "default": "."
-        },
-        {
-          "name": "PYTHON_BUILD_SYSTEM",
-          "description": "Python build-system to use to install dependencies, build and package the project",
-          "type": "enum",
-          "values": ["auto", "setuptools", "poetry", "pipenv", "reqfile"],
-          "default": "auto",
-          "advanced": true
-        },
-        {
-          "name": "PYTHON_REQS_FILE",
-          "description": "Main requirements file _(relative to `$PYTHON_PROJECT_DIR`)_\n\nFor [Requirements Files](https://pip.pypa.io/en/stable/user_guide/#requirements-files) build-system only",
-          "default": "requirements.txt",
-          "advanced": true
-        },
-        {
-          "name": "PYTHON_EXTRA_REQS_FILES",
-          "description": "Extra dev requirements file(s) to install _(relative to `$PYTHON_PROJECT_DIR`)_\n\nFor [Requirements Files](https://pip.pypa.io/en/stable/user_guide/#requirements-files) build-system only",
-          "default": "requirements-dev.txt",
-          "advanced": true
-        },
-        {
-          "name": "PYTHON_COMPILE_ARGS",
-          "description": "[`compileall` CLI options](https://docs.python.org/3/library/compileall.html)",
-          "default": "*",
-          "advanced": true
-        },
-        {
-          "name": "PIP_OPTS",
-          "description": "pip extra [options](https://pip.pypa.io/en/stable/cli/pip/#general-options)",
-          "advanced": true
-        },
-        {
-          "name": "PYTHON_EXTRA_DEPS",
-          "description": "Extra sets of dependencies to install\n\nFor [Setuptools](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html?highlight=extras#optional-dependencies) or [Poetry](https://python-poetry.org/docs/pyproject/#extras) only"
-        }
-      ],
-      "features": [
-        {
-          "id": "package",
-          "name": "package",
-          "description": "This job allows building your Python project [distribution packages](https://packaging.python.org/en/latest/glossary/#term-Distribution-Package).",
-          "enable_with": "PYTHON_PACKAGE_ENABLED"
-        },
-        {
-          "id": "py-lint",
-          "name": "py-lint",
-          "description": "Code analysis based on [pylint](http://pylint.pycqa.org/en/latest/) Python lib.",
-          "enable_with": "PYLINT_ENABLED",
-          "variables": [
-            {
-              "name": "PYLINT_ARGS",
-              "description": "Additional [pylint CLI options](http://pylint.pycqa.org/en/latest/user_guide/run.html#command-line-options)",
-              "advanced": true
-            },
-            {
-              "name": "PYLINT_FILES",
-              "description": "Files or directories to analyse",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "unittest",
-          "name": "unittest",
-          "description": "Unit tests based on [unittest](https://docs.python.org/3/library/unittest.html) framework",
-          "enable_with": "UNITTEST_ENABLED",
-          "variables": [
-            {
-              "name": "UNITTEST_ARGS",
-              "description": "Additional xmlrunner/unittest CLI options",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "pytest",
-          "name": "pytest",
-          "description": "Unit tests based on [pytest](https://docs.pytest.org/) framework",
-          "enable_with": "PYTEST_ENABLED",
-          "variables": [
-            {
-              "name": "PYTEST_ARGS",
-              "description": "Additional [pytest](https://docs.pytest.org/en/stable/usage.html) or [pytest-cov](https://github.com/pytest-dev/pytest-cov#usage) CLI options",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "py-nosetests",
-          "name": "py-nosetests",
-          "description": "Unit tests based on [nose](https://nose.readthedocs.io/) framework",
-          "enable_with": "NOSETESTS_ENABLED",
-          "variables": [
-            {
-              "name": "NOSETESTS_ARGS",
-              "description": "Additional [nose CLI options](https://nose.readthedocs.io/en/latest/usage.html#options)",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "bandit",
-          "name": "Bandit",
-          "description": "[Bandit](https://pypi.org/project/bandit/) analysis (SAST)",
-          "enable_with": "BANDIT_ENABLED",
-          "variables": [
-            {
-              "name": "BANDIT_ARGS",
-              "description": "Additional [Bandit CLI options](https://github.com/PyCQA/bandit#usage)",
-              "default": "--recursive .",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "trivy",
-          "name": "Trivy",
-          "description": "Detect security vulnerabilities with [Trivy](https://github.com/aquasecurity/trivy/) (dependencies analysis)",
-          "enable_with": "PYTHON_TRIVY_ENABLED",
-          "variables": [
-            {
-              "name": "PYTHON_TRIVY_IMAGE",
-              "description": "The Docker image used to run Trivy",
-              "default": "registry.hub.docker.com/aquasec/trivy:latest",
-              "advanced": true
-            },
-            {
-              "name": "PYTHON_TRIVY_ARGS",
-              "description": "Additional [Trivy CLI options](https://aquasecurity.github.io/trivy/v0.21.1/getting-started/cli/fs/)",
-              "default": "--vuln-type library",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)",
-          "disable_with": "PYTHON_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "PYTHON_SBOM_SYFT_URL",
-              "description": "Url to the `tar.gz` package for `linux_amd64` of Syft to use\n\n_When unset, the latest version will be used_",
-              "advanced": true
-            },
-            {
-              "name": "PYTHON_SBOM_NAME",
-              "description": "Component name of the emitted SBOM",
-              "default": "$CI_PROJECT_PATH/$PYTHON_PROJECT_DIR",
-              "advanced": true
-            },
-            {
-              "name": "PYTHON_SBOM_OPTS",
-              "description": "Options for syft used for SBOM analysis",
-              "default": "--override-default-catalogers python-package-cataloger",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "release",
-          "name": "Release",
-          "description": "Manually trigger a release of your code (uses [bumpversion](https://pypi.org/project/bumpversion/))",
-          "enable_with": "PYTHON_RELEASE_ENABLED",
-          "variables": [
-            {
-              "name": "PYTHON_RELEASE_NEXT",
-              "type": "enum",
-              "values": ["", "major", "minor", "patch"],
-              "description": "The part of the version to increase (one of: `major`, `minor`, `patch`)",
-              "default": "minor",
-              "advanced": true
-            },
-            {
-              "name": "PYTHON_SEMREL_RELEASE_DISABLED",
-              "description": "Disable semantic-release integration",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "PYTHON_RELEASE_COMMIT_MESSAGE",
-              "description": "The Git commit message to use on the release commit. This is templated using the [Python Format String Syntax](http://docs.python.org/2/library/string.html#format-string-syntax). Available in the template context are current_version and new_version.",
-              "default": "chore(python-release): {current_version} → {new_version}",
-              "advanced": true
-            },
-            {
-              "name": "GIT_USERNAME",
-              "description": "Git username for Git push operations",
-              "secret": true
-            },
-            {
-              "name": "GIT_PASSWORD",
-              "description": "Git password for Git push operations",
-              "secret": true
-            },
-            {
-              "name": "GIT_PRIVATE_KEY",
-              "description": "SSH key for Git push operations",
-              "secret": true
-            },
-            {
-              "name": "PYTHON_REPOSITORY_URL",
-              "type": "url",
-              "description": "Target PyPI repository to publish packages.\n\n_defaults to [GitLab project's packages repository](https://docs.gitlab.com/ee/user/packages/pypi_repository/)_",
-              "default": "${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/packages/pypi"
-            },
-            {
-              "name": "PYTHON_REPOSITORY_USERNAME",
-              "description": "Target PyPI repository username credential",
-              "secret": true,
-              "default": "gitlab-ci-token"
-            },
-            {
-              "name": "PYTHON_REPOSITORY_PASSWORD",
-              "description": "Target PyPI repository password credential",
-              "secret": true,
-              "default": "$CI_JOB_TOKEN"
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-python-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "6.6.3",
-        "tags": [
-          "6.6.3",
-          "6.6.2",
-          "6.6.1",
-          "6.6.0",
-          "6.6",
-          "6.5.0",
-          "6.5",
-          "6.4.1",
-          "6.4.0",
-          "6.4",
-          "6.3.5",
-          "6.3.4",
-          "6.3.3",
-          "6.3.2",
-          "6.3.1",
-          "6.3.0",
-          "6.3",
-          "6.2.0",
-          "6.2",
-          "6.1.5",
-          "6.1.4",
-          "6.1.3",
-          "6.1.2",
-          "6.1.1",
-          "6.1.0",
-          "6.1",
-          "6.0.2",
-          "6.0.1",
-          "6.0.0",
-          "6.0",
-          "6",
-          "5.1.0",
-          "5.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.2.0",
-          "4.2",
-          "4.1.1",
-          "4.1.0",
-          "4.1",
-          "4.0.1",
-          "4.0.0",
-          "4",
-          "3.2.1",
-          "3.2.0",
-          "3.1.1",
-          "3.1.0",
-          "3.0.1",
-          "3.0.0",
-          "2.2.0",
-          "2.1.1",
-          "2.1.0",
-          "2.0.3",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "1.3.0",
-          "1.2.3",
-          "1.2.2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "python",
-        "path": "to-be-continuous/python",
-        "web_url": "https://gitlab.com/to-be-continuous/python",
-        "avatar": "https://gitlab.com/to-be-continuous/python/-/avatar"
-      }
-    },
-    {
-      "name": "Renovate",
-      "description": "Automate your dependency updates with [Renovate](https://www.mend.io/renovate/)",
-      "template_path": "templates/gitlab-ci-renovate.yml",
-      "kind": "misc",
-      "prefix": "renovate",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "RENOVATE_IMAGE",
-          "description": "The Docker image used to run Renovate",
-          "default": "registry.hub.docker.com/renovate/renovate:latest"
-        },
-        {
-          "name": "RENOVATE_TOKEN",
-          "description": "A GitLab access token to allow Renovate crawl your projects. [See doc](https://docs.renovatebot.com/modules/platform/gitlab/#authentication)",
-          "secret": true
-        },
-        {
-          "name": "GITHUB_COM_TOKEN",
-          "description": "A GitHub access token to allow Renovate fetch changelogs. [See doc](https://docs.renovatebot.com/getting-started/running/#githubcom-token-for-changelogs)",
-          "secret": true
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.2.0",
-        "tags": ["1.2.0", "1.2", "1.1.0", "1.1", "1.0.0", "1.0", "1"],
-        "name": "renovate",
-        "path": "to-be-continuous/renovate",
-        "web_url": "https://gitlab.com/to-be-continuous/renovate",
-        "avatar": "https://gitlab.com/to-be-continuous/renovate/-/avatar"
-      }
-    },
-    {
-      "name": "Robot Framework",
-      "description": "Run your automated tests with [Robot Framework](https://robotframework.org/)",
-      "template_path": "templates/gitlab-ci-robotframework.yml",
-      "kind": "acceptance",
-      "prefix": "robot",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "ROBOT_BASE_IMAGE",
-          "description": "The Docker image used to run Robot frame work CLI",
-          "default": "registry.hub.docker.com/ppodgorsek/robot-framework:latest"
-        },
-        {
-          "name": "ROBOT_TESTS_DIR",
-          "description": "Path to Robot Framework tests directory",
-          "default": "robot"
-        },
-        {
-          "name": "ROBOT_BROWSER",
-          "description": "Browser to use",
-          "default": "firefox",
-          "type": "enum",
-          "values": ["firefox", "chrome"]
-        },
-        {
-          "name": "ROBOT_OPTIONS",
-          "description": "Robot Framework [additional options](http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#all-command-line-options)",
-          "advanced": true
-        },
-        {
-          "name": "ROBOT_THREADS",
-          "description": "Number of threads to execute Robot Framework tests (uses [Pabot](https://pabot.org/) if > `1`)",
-          "default": "1",
-          "type": "number",
-          "advanced": true
-        },
-        {
-          "name": "PABOT_OPTIONS",
-          "description": "Pabot [additional options](https://github.com/mkorpela/pabot#command-line-options) (if `ROBOT_THREADS` > `1`)",
-          "advanced": true
-        },
-        {
-          "name": "ROBOT_SCREEN_COLOUR_DEPTH",
-          "description": "Screen colour depth for X Window Virtual Framebuffer",
-          "type": "number",
-          "default": "24"
-        },
-        {
-          "name": "ROBOT_SCREEN_HEIGHT",
-          "description": "Screen height for X Window Virtual Framebuffer",
-          "type": "number",
-          "default": "1080"
-        },
-        {
-          "name": "ROBOT_SCREEN_WIDTH",
-          "description": "Screen width for X Window Virtual Framebuffer",
-          "type": "number",
-          "default": "1920"
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Robot Framework tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "features": [
-        {
-          "id": "lint",
-          "name": "robotframework-lint",
-          "description": "This job performs a [Lint](https://github.com/boakley/robotframework-lint/) analysis on your `Robot Framework files`.",
-          "disable_with": "ROBOT_LINT_DISABLED"
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-robotframework-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "4.2.0",
-        "tags": [
-          "4.2.0",
-          "4.2",
-          "4.1.0",
-          "4.1",
-          "4.0.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.3.0",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "robotframework",
-        "path": "to-be-continuous/robotframework",
-        "web_url": "https://gitlab.com/to-be-continuous/robotframework",
-        "avatar": "https://gitlab.com/to-be-continuous/robotframework/-/avatar"
-      }
-    },
-    {
-      "name": "Source-to-Image",
-      "description": "Build reproducible container images from your source code with [Source-to-Image](https://github.com/openshift/source-to-image) (S2I)",
-      "template_path": "templates/gitlab-ci-s2i.yml",
-      "kind": "package",
-      "prefix": "s2i",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "S2I_DIND_IMAGE",
-          "description": "The image used to run the Docker daemon",
-          "default": "registry.hub.docker.com/library/docker:dind"
-        },
-        {
-          "name": "S2I_SKOPEO_IMAGE",
-          "description": "The image used to push the built container image with Skopeo",
-          "default": "quay.io/skopeo/stable:latest"
-        },
-        {
-          "name": "S2I_VERSION",
-          "description": "The target S2I version to install/use",
-          "default": "latest",
-          "advanced": true
-        },
-        {
-          "name": "S2I_PLATFORM",
-          "description": "The target S2I platform to install/use",
-          "default": "linux-386",
-          "advanced": true
-        },
-        {
-          "name": "S2I_BUILDER_IMAGE",
-          "description": "The S2I [builder image](https://github.com/openshift/source-to-image/blob/master/docs/builder_image.md) used to build your application image",
-          "mandatory": true
-        },
-        {
-          "name": "S2I_ROOT_DIR",
-          "description": "Relative path to the application source code base directory in your repository",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "S2I_BUILD_EXTRA_FLAGS",
-          "description": "S2I build [extra flags](https://github.com/openshift/source-to-image/blob/master/docs/cli.md#s2i-build)",
-          "advanced": true
-        },
-        {
-          "name": "S2I_SNAPSHOT_IMAGE",
-          "description": "S2I snapshot image",
-          "default": "$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"
-        },
-        {
-          "name": "S2I_RELEASE_IMAGE",
-          "description": "S2I release image",
-          "default": "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
-        },
-        {
-          "name": "S2I_PUBLISH_ARGS",
-          "description": "Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)",
-          "advanced": true
-        },
-        {
-          "name": "S2I_PROD_PUBLISH_STRATEGY",
-          "description": "Defines the publish to production strategy.",
-          "type": "enum",
-          "values": ["none", "manual", "auto"],
-          "default": "manual"
-        },
-        {
-          "name": "S2I_RELEASE_EXTRA_TAGS_PATTERN",
-          "description": "Defines the image tag pattern that `$S2I_RELEASE_IMAGE` should match to push extra tags (supports capturing groups)\n\nDefaults to [SemVer](https://semver.org/) pattern.",
-          "default": "^v?(?P<major>[0-9]+)\\.(?P<minor>[0-9]+)\\.(?P<patch>[0-9]+)(?P<suffix>(?P<prerelease>-[0-9A-Za-z-\\.]+)?(?P<build>\\+[0-9A-Za-z-\\.]+)?)$",
-          "advanced": true
-        },
-        {
-          "name": "S2I_RELEASE_EXTRA_TAGS",
-          "description": "Defines extra tags to publish the _release_ image\n\nSupports capturing group references from `$S2I_RELEASE_EXTRA_TAGS_PATTERN` (ex: `latest \\g<major>.\\g<minor> \\g<major>`)",
-          "advanced": true
-        },
-        {
-          "name": "S2I_SEMREL_RELEASE_DISABLED",
-          "description": "Disable integration with the [semantic release template](https://gitlab.com/to-be-continuous/semantic-release/)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.1.0",
-        "tags": ["1.1.0", "1.1", "1.0.1", "1.0.0", "1.0", "1"],
-        "name": "s2i",
-        "path": "to-be-continuous/s2i",
-        "web_url": "https://gitlab.com/to-be-continuous/s2i",
-        "avatar": "https://gitlab.com/to-be-continuous/s2i/-/avatar"
-      }
-    },
-    {
-      "name": "S3 (Simple Storage Service)",
-      "description": "Deploy your objects to any [S3](https://en.wikipedia.org/wiki/Amazon_S3) (Simple Storage Service) compatible object storage service",
-      "template_path": "templates/gitlab-ci-s3.yml",
-      "kind": "hosting",
-      "prefix": "s3",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "S3_CMD_IMAGE",
-          "description": "The Docker image used to run [s3cmd](https://s3tools.org/usage) commands",
-          "advanced": true,
-          "default": "registry.hub.docker.com/d3fk/s3cmd:latest"
-        },
-        {
-          "name": "S3_ENDPOINT_HOST",
-          "description": "Default S3 endpoint hostname (with port)",
-          "default": "s3.amazonaws.com",
-          "mandatory": true
-        },
-        {
-          "name": "S3_HOST_BUCKET",
-          "description": "Default DNS-style bucket+hostname:port template for accessing a bucket",
-          "default": "%(bucket)s.$S3_ENDPOINT_HOST",
-          "mandatory": true
-        },
-        {
-          "name": "S3_REGION",
-          "description": "Default region to create the buckets in (if not defined, the template won't create any)"
-        },
-        {
-          "name": "S3_ACCESS_KEY",
-          "description": "Default S3 service Access Key",
-          "secret": true,
-          "mandatory": true
-        },
-        {
-          "name": "S3_SECRET_KEY",
-          "description": "Default S3 service Secret Key",
-          "secret": true,
-          "mandatory": true
-        },
-        {
-          "name": "S3_BASE_BUCKET_NAME",
-          "description": "Base bucket name",
-          "default": "$CI_PROJECT_NAME",
-          "advanced": true
-        },
-        {
-          "name": "S3_DEPLOY_ARGS",
-          "description": "[s3cmd](https://s3tools.org/usage) command and options to deploy files to the bucket",
-          "default": "sync --recursive --delete-removed --acl-public --no-mime-magic --guess-mime-type",
-          "advanced": true
-        },
-        {
-          "name": "S3_DEPLOY_FILES",
-          "description": "Pattern(s) of files to deploy to the S3 bucket",
-          "default": "public/"
-        },
-        {
-          "name": "S3_WEBSITE_DISABLED",
-          "description": "Disables WebSite hosting by your S3 bucket",
-          "type": "boolean"
-        },
-        {
-          "name": "S3_WEBSITE_ENDPOINT",
-          "description": "Default WebSite endpoint url pattern (supports `%(bucket)s` and `%(location)s` placeholders)",
-          "default": "http://%(bucket)s.s3-website.%(location)s.amazonaws.com"
-        },
-        {
-          "name": "S3_WEBSITE_ARGS",
-          "description": "[s3cmd](https://s3tools.org/usage) command and options to enable WebSite hosting on the bucket",
-          "default": "ws-create --ws-index=index.html --ws-error=404.html",
-          "advanced": true
-        },
-        {
-          "name": "S3_PREFIX",
-          "description": "Default S3 prefix to use as a root destination to upload objects in the S3 bucket"
-        },
-        {
-          "name": "S3_SCRIPTS_DIR",
-          "description": "Directory where S3 hook scripts are located",
-          "default": ".",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "disable_with": "S3_REVIEW_DISABLED",
-          "variables": [
-            {
-              "name": "S3_REVIEW_ENDPOINT_HOST",
-              "description": "S3 endpoint hostname (with port) for `review` env  _(only define to override default)_"
-            },
-            {
-              "name": "S3_REVIEW_REGION",
-              "description": "Region to create the `review` buckets in (if not defined, the template won't create any)"
-            },
-            {
-              "name": "S3_REVIEW_ACCESS_KEY",
-              "description": "S3 service Access Key for `review` env (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_REVIEW_SECRET_KEY",
-              "description": "S3 service Secret Key for `review` env  (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_REVIEW_BUCKET_NAME",
-              "description": "Bucket name for `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "CLEANUP_ALL_REVIEW",
-              "description": "Enables a **manual** job to cleanup all review envs at once.\n\nYou may also use it to [schedule](https://docs.gitlab.com/ee/ci/pipelines/schedules.html) cloud resources cleanup. See documentation.",
-              "type": "boolean"
-            },
-            {
-              "name": "S3_REVIEW_PREFIX",
-              "description": "S3 prefix to use for `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "S3_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "disable_with": "S3_INTEG_DISABLED",
-          "variables": [
-            {
-              "name": "S3_INTEG_ENDPOINT_HOST",
-              "description": "S3 endpoint hostname (with port) for `integration` env  _(only define to override default)_"
-            },
-            {
-              "name": "S3_INTEG_REGION",
-              "description": "Region to create the `integration` bucket in"
-            },
-            {
-              "name": "S3_INTEG_ACCESS_KEY",
-              "description": "S3 service Access Key for `integration` env (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_INTEG_SECRET_KEY",
-              "description": "S3 service Secret Key for `integration` env  (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_INTEG_BUCKET_NAME",
-              "description": "Bucket name for `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "S3_INTEG_PREFIX",
-              "description": "S3 prefix to use for `integration` env _(only define to override default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "disable_with": "S3_STAGING_DISABLED",
-          "variables": [
-            {
-              "name": "S3_STAGING_ENDPOINT_HOST",
-              "description": "S3 endpoint hostname (with port) for `staging` env  _(only define to override default)_"
-            },
-            {
-              "name": "S3_STAGING_REGION",
-              "description": "Region to create the `staging` bucket in"
-            },
-            {
-              "name": "S3_STAGING_ACCESS_KEY",
-              "description": "S3 service Access Key for `staging` env (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_STAGING_SECRET_KEY",
-              "description": "S3 service Secret Key for `staging` env  (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_STAGING_BUCKET_NAME",
-              "description": "Bucket name for `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "S3_STAGING_PREFIX",
-              "description": "S3 prefix to use for `staging` env _(only define to override default)_",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "disable_with": "S3_PROD_DISABLED",
-          "variables": [
-            {
-              "name": "S3_PROD_ENDPOINT_HOST",
-              "description": "S3 endpoint hostname (with port) for `production` env  _(only define to override default)_"
-            },
-            {
-              "name": "S3_PROD_REGION",
-              "description": "Region to create the `production` bucket in"
-            },
-            {
-              "name": "S3_PROD_ACCESS_KEY",
-              "description": "S3 service Access Key for `production` env (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_PROD_SECRET_KEY",
-              "description": "S3 service Secret Key for `production` env  (only define to override default)",
-              "secret": true
-            },
-            {
-              "name": "S3_PROD_BUCKET_NAME",
-              "description": "Bucket name for `production` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "S3_PROD_DEPLOY_STRATEGY",
-              "description": "Defines the deployment to production strategy.",
-              "type": "enum",
-              "values": ["manual", "auto"],
-              "default": "manual"
-            },
-            {
-              "name": "S3_PROD_PREFIX",
-              "description": "S3 prefix to use for `production` env _(only define to override default)_",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-s3-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "7.2.0",
-        "tags": [
-          "7.2.0",
-          "7.2",
-          "7.1.0",
-          "7.1",
-          "7.0.1",
-          "7.0.0",
-          "7.0",
-          "7",
-          "6.0.0",
-          "6.0",
-          "6",
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.1.1",
-          "4.1.0",
-          "4.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.0",
-          "2.3",
-          "2.2.0",
-          "2.2",
-          "2.1.5",
-          "2.1.4",
-          "2.1.3",
-          "2.1.2",
-          "2.1.1",
-          "2.1.0",
-          "2.0.0",
-          "2",
-          "1.2.1",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "s3",
-        "path": "to-be-continuous/s3",
-        "web_url": "https://gitlab.com/to-be-continuous/s3",
-        "avatar": "https://gitlab.com/to-be-continuous/s3/-/avatar"
-      }
-    },
-    {
-      "name": "Scala/SBT",
-      "description": "Build, test and analyse your [sbt](https://www.scala-sbt.org/)-based projects",
-      "template_path": "templates/gitlab-ci-sbt.yml",
-      "kind": "build",
-      "prefix": "sbt",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "SBT_IMAGE",
-          "description": "The Docker image used to run sbt - **set the version required by your project**",
-          "default": "registry.hub.docker.com/sbtscala/scala-sbt:17.0.2_1.6.2_3.1.3"
-        },
-        {
-          "name": "SBT_BUILD_ARGS",
-          "description": "The sbt arguments for the sbt arguments for the [build job packaging](https://www.scala-sbt.org/1.x/docs/Running.html#Common+commands)",
-          "default": "clean package",
-          "advanced": true
-        },
-        {
-          "name": "SBT_TEST_ARGS",
-          "description": "The sbt arguments for the sbt arguments for the [build job test phase](https://www.scala-sbt.org/1.x/docs/Running.html#Common+commands)",
-          "default": "coverage test coverageAggregate",
-          "advanced": true
-        },
-        {
-          "name": "SBT_OPTS",
-          "description": "Global [sbt options](https://www.scala-sbt.org/1.x/docs/Command-Line-Reference.html#sbt+JVM+options+and+system+properties)",
-          "default": "-Dsbt.global.base=sbt-cache/sbtboot -Dsbt.boot.directory=sbt-cache/boot -Dsbt.coursier.home=sbt-cache/coursier -Dsbt.ci=true -Dsbt.color=always",
-          "advanced": true
-        },
-        {
-          "name": "SBT_CLI_OPTS",
-          "description": "Additional sbt options used on the command line",
-          "default": "--batch",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "sbom",
-          "name": "Software Bill of Materials",
-          "description": "This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)",
-          "disable_with": "SBT_SBOM_DISABLED",
-          "variables": [
-            {
-              "name": "SBT_SBOM_IMAGE",
-              "default": "registry.hub.docker.com/anchore/syft:debug",
-              "description": "The syft image used for SBOM analysis"
-            },
-            {
-              "name": "SBT_SBOM_OPTS",
-              "description": "Options for syft used for SBOM analysis",
-              "default": "dir:sbt-cache/coursier --catalogers java-cataloger",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "publish",
-          "name": "Publish (snapshot & release)",
-          "description": "Enable artifacts publishing to a Nexus repository",
-          "variables": [
-            {
-              "name": "SBT_PUBLISH_MODE",
-              "description": "Publish mode (one of `snapshot`, `ontag`, `release`)",
-              "type": "enum",
-              "values": ["", "snapshot", "ontag", "release"],
-              "default": "",
-              "mandatory": true
-            },
-            {
-              "name": "GIT_PRIVATE_KEY",
-              "description": "Git private key to perform Git operations (for `release` publish mode)",
-              "secret": true
-            },
-            {
-              "name": "MAVEN_REPOSITORY_HOST",
-              "description": "Global Maven repository host where credentials apply",
-              "secret": false
-            },
-            {
-              "name": "MAVEN_REPOSITORY_USERNAME",
-              "description": "Global Maven repository username",
-              "secret": true
-            },
-            {
-              "name": "MAVEN_REPOSITORY_PASSWORD",
-              "description": "Global Maven repository password",
-              "secret": true
-            },
-            {
-              "name": "MAVEN_REPOSITORY_PUBLISH_RELEASE_URL",
-              "description": "Maven repository URL where to publish release artifacts",
-              "secret": false
-            },
-            {
-              "name": "MAVEN_REPOSITORY_PUBLISH_SNAPSHOT_URL",
-              "description": "Maven repository URL where to publish snapshot artifacts",
-              "secret": false
-            },
-            {
-              "name": "MAVEN_REPOSITORY_PUBLISH_USERNAME",
-              "description": "Maven repository username used for publishing purposes",
-              "secret": true
-            },
-            {
-              "name": "MAVEN_REPOSITORY_PUBLISH_PASSWORD",
-              "description": "Maven repository password used for publishing purposes",
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.5.0",
-        "tags": [
-          "1.5.0",
-          "1.5",
-          "1.4.0",
-          "1.4",
-          "1.3.1",
-          "1.3.0",
-          "1.3",
-          "1.2.0",
-          "1.2",
-          "1.1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.1",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "sbt",
-        "path": "to-be-continuous/sbt",
-        "web_url": "https://gitlab.com/to-be-continuous/sbt",
-        "avatar": "https://gitlab.com/to-be-continuous/sbt/-/avatar"
-      }
-    },
-    {
-      "name": "semantic-release",
-      "description": "Automate your versioning and release management with [semantic-release](https://github.com/semantic-release/semantic-release)",
-      "template_path": "templates/gitlab-ci-semrel.yml",
-      "kind": "publish",
-      "prefix": "semrel",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "SEMREL_IMAGE",
-          "description": "The Docker image used to run semantic-release",
-          "default": "registry.hub.docker.com/library/node:latest"
-        },
-        {
-          "name": "SEMREL_VERSION",
-          "description": "The [semantic-release](https://www.npmjs.com/package/semantic-release) version to use",
-          "default": "latest",
-          "advanced": true
-        },
-        {
-          "name": "SEMREL_EXEC_VERSION",
-          "description": "The [@semantic-release/exec](https://www.npmjs.com/package/@semantic-release/exec) version to use",
-          "default": "latest",
-          "advanced": true
-        },
-        {
-          "name": "GITLAB_TOKEN",
-          "description": "A GitLab 'project access token' or 'personal access token' with `api`, `read_repository` and `write repository` scopes.",
-          "mandatory": true,
-          "secret": true
-        },
-        {
-          "name": "SEMREL_CONFIG_DIR",
-          "description": "directory containing your [semantic-release configuration](https://semantic-release.gitbook.io/semantic-release/usage/configuration#configuration-file)",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "SEMREL_TAG_FORMAT",
-          "description": "For generated `.releaserc` file only. [tagFormat semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#tagformat)e. :warning: don't forget to double the `$` character so it is not interpreted by GitLab.",
-          "default": "$${version}",
-          "advanced": true
-        },
-        {
-          "name": "SEMREL_REQUIRED_PLUGINS_FILE",
-          "description": "Full path to `semrel-required-plugins.txt` file _(relative to `$CI_PROJECT_DIR`)_",
-          "default": "semrel-required-plugins.txt",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "semantic-release",
-          "name": "semantic-release",
-          "description": "Performs a semantic release.",
-          "disable_with": "SEMREL_RELEASE_DISABLED",
-          "variables": [
-            {
-              "name": "SEMREL_CHANGELOG_ENABLED",
-              "description": "Add the [@semantic-release/changelog](https://github.com/semantic-release/changelog) plugin which will commit a changelog file in the repository.",
-              "type": "boolean"
-            },
-            {
-              "name": "SEMREL_CHANGELOG_FILE",
-              "description": "[changelogFile @semantic-release/changelog option](https://github.com/semantic-release/changelog#options).",
-              "default": "CHANGELOG.md",
-              "advanced": true
-            },
-            {
-              "name": "SEMREL_CHANGELOG_TITLE",
-              "description": "[changelogTitle @semantic-release/changelog option](https://github.com/semantic-release/changelog#options). You might want to use markdown format (for example `# MyApp Changelog`).",
-              "advanced": true
-            },
-            {
-              "name": "SEMREL_DRY_RUN",
-              "description": "For generated `.releaserc` file only. Activate the [dryRun semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#dryrun) if present.",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "SEMREL_AUTO_RELEASE_ENABLED",
-              "description": "When set the job start automatically. When not set (default), the job is manual.",
-              "type": "boolean"
-            },
-            {
-              "name": "SEMREL_HOOKS_DIR",
-              "description": "Hook scripts folder.",
-              "default": ".",
-              "advanced": true
-            },
-            {
-              "name": "SEMREL_RELEASE_DISABLED",
-              "description": "Disable this job.",
-              "advanced": true
-            },
-            {
-              "name": "SEMREL_GPG_SIGNKEY",
-              "description": "Path to the GPG signkey exported with `gpg --armor --export-secret-key`.",
-              "secret": true,
-              "advanced": true
-            },
-            {
-              "name": "SEMREL_COMMIT_MESSAGE",
-              "description": "[message @semantic-release/git option](https://github.com/semantic-release/git#message)",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "semantic-release-info",
-          "name": "semantic-release-info",
-          "description": "Run `semantic-release` dry run to save next release version information as dotenv artifact and make them available in next pipeline stages",
-          "variables": [
-            {
-              "name": "SEMREL_INFO_ON",
-              "description": "Define on which branch(es) the job shall be run",
-              "type": "enum",
-              "values": ["", "prod", "protected", "all"],
-              "mandatory": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-semrel-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.7.1",
-        "tags": [
-          "3.7.1",
-          "3.7.0",
-          "3.7",
-          "3.6.0",
-          "3.6",
-          "3.5.2",
-          "3.5.1",
-          "3.5.0",
-          "3.5",
-          "3.4.2",
-          "3.4.1",
-          "3.4.0",
-          "3.4",
-          "3.3.1",
-          "3.3.0",
-          "3.3",
-          "3.2.2",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.3.1",
-          "2.3.0",
-          "2.3",
-          "2.2.6",
-          "2.2.5",
-          "2.2.4",
-          "2.2.3",
-          "2.2.2",
-          "2.2.1",
-          "2.2.0",
-          "2.1.0",
-          "2.0.5",
-          "2.0.4",
-          "2.0.3",
-          "2.0.2",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.0",
-          "1.1.0",
-          "1.0.1",
-          "1.0.0"
-        ],
-        "name": "semantic-release",
-        "path": "to-be-continuous/semantic-release",
-        "web_url": "https://gitlab.com/to-be-continuous/semantic-release",
-        "avatar": "https://gitlab.com/to-be-continuous/semantic-release/-/avatar"
-      }
-    },
-    {
-      "name": "SonarQube",
-      "description": "Continuously inspect your codebase with [SonarQube](https://www.sonarqube.org/)",
-      "template_path": "templates/gitlab-ci-sonar.yml",
-      "kind": "analyse",
-      "prefix": "sonar",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "SONAR_SCANNER_IMAGE",
-          "description": "The Docker image used to run [sonar-scanner](https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/)",
-          "default": "registry.hub.docker.com/sonarsource/sonar-scanner-cli:latest"
-        },
-        {
-          "name": "SONAR_HOST_URL",
-          "type": "url",
-          "description": "SonarQube server url",
-          "mandatory": true
-        },
-        {
-          "name": "SONAR_PROJECT_KEY",
-          "description": "SonarQube Project Key (might also be set in the `sonar-project.properties` file)",
-          "advanced": true
-        },
-        {
-          "name": "SONAR_PROJECT_NAME",
-          "description": "SonarQube Project Name (might also be set in the `sonar-project.properties` file)",
-          "advanced": true
-        },
-        {
-          "name": "SONAR_TOKEN",
-          "description": "SonarQube authentication token (depends on your authentication method)",
-          "secret": true
-        },
-        {
-          "name": "SONAR_LOGIN",
-          "description": "SonarQube login (depends on your authentication method)",
-          "secret": true
-        },
-        {
-          "name": "SONAR_PASSWORD",
-          "description": "SonarQube password (depends on your authentication method)",
-          "secret": true
-        },
-        {
-          "name": "SONAR_BASE_ARGS",
-          "description": "SonarQube [analysis arguments](https://docs.sonarqube.org/latest/analysis/analysis-parameters/)",
-          "default": "-Dsonar.links.homepage=${CI_PROJECT_URL} -Dsonar.links.ci=${CI_PROJECT_URL}/-/pipelines -Dsonar.links.issue=${CI_PROJECT_URL}/-/issues",
-          "advanced": true
-        },
-        {
-          "name": "SONAR_QUALITY_GATE_ENABLED",
-          "description": "Enables SonarQube [Quality Gate](https://docs.sonarqube.org/latest/user-guide/quality-gates/) verification.\n\n_Uses `sonar.qualitygate.wait` parameter ([see doc](https://docs.sonarqube.org/latest/analysis/ci-integration-overview/#header-1))._",
-          "type": "boolean"
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-openshift-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url"
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "4.2.0",
-        "tags": [
-          "4.2.0",
-          "4.2",
-          "4.1.1",
-          "4.1.0",
-          "4.1",
-          "4.0.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.3.0",
-          "3.3",
-          "3.2.0",
-          "3.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.3.2",
-          "1.3.1",
-          "1.3.0",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "sonar",
-        "path": "to-be-continuous/sonar",
-        "web_url": "https://gitlab.com/to-be-continuous/sonar",
-        "avatar": "https://gitlab.com/to-be-continuous/sonar/-/avatar"
-      }
-    },
-    {
-      "name": "Spectral",
-      "description": "[Spectral](https://docs.stoplight.io/docs/spectral) is a JSON/YAML Linter with custom rulesets, out of the box support for OpenAPI and AsyncAPI",
-      "template_path": "templates/gitlab-ci-spectral.yml",
-      "kind": "analyse",
-      "prefix": "spectral",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "SPECTRAL_IMAGE",
-          "description": "The Docker image used to run `spectral`",
-          "default": "registry.hub.docker.com/stoplight/spectral:latest"
-        },
-        {
-          "name": "SPECTRAL_DOCUMENTS",
-          "description": "Location of JSON/YAML documents to be linted. Can be either a file, a glob or fetchable resource(s) on the web",
-          "default": "{,api/,src/main/resources/}*{openapi,oas,swagger,async}*.{json,yml,yaml}"
-        },
-        {
-          "name": "SPECTRAL_EXTRA_ARGS",
-          "description": "Extra Spectral CLI [options](https://docs.stoplight.io/docs/spectral/docs/guides/2-cli.md)",
-          "advanced": true
-        },
-        {
-          "name": "SPECTRAL_DISABLED",
-          "description": "Set to `true` to disable this job",
-          "type": "boolean",
-          "advanced": true
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.1.0",
-        "tags": ["1.1.0", "1.1", "1.0.0", "1.0", "1"],
-        "name": "spectral",
-        "path": "to-be-continuous/spectral",
-        "web_url": "https://gitlab.com/to-be-continuous/spectral",
-        "avatar": "https://gitlab.com/to-be-continuous/spectral/-/avatar"
-      }
-    },
-    {
-      "name": "Sphinx",
-      "description": "Build your documentation with [Sphinx](https://www.sphinx-doc.org/)",
-      "template_path": "templates/gitlab-ci-sphinx.yml",
-      "kind": "build",
-      "prefix": "sphinx",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "SPHINX_IMAGE",
-          "description": "The Docker image used to run Sphinx",
-          "default": "ghcr.io/sphinx-doc/sphinx:latest"
-        },
-        {
-          "name": "SPHINX_BUILD_ARGS",
-          "description": "[`sphinx-build` options](https://www.sphinx-doc.org/en/master/man/sphinx-build.html)) to be used",
-          "default": "-M html"
-        },
-        {
-          "name": "SPHINX_PROJECT_DIR",
-          "description": "Sphinx project root directory",
-          "default": "."
-        },
-        {
-          "name": "SPHINX_SOURCE_DIR",
-          "description": "Sphinx source directory (relative to `$SPHINX_PROJECT_DIR`) containing the Sphinx `conf.py` file",
-          "default": "source",
-          "advanced": true
-        },
-        {
-          "name": "SPHINX_BUILD_DIR",
-          "description": "Sphinx build output directory (relative to `$SPHINX_PROJECT_DIR`)",
-          "default": "build",
-          "advanced": true
-        },
-        {
-          "name": "SPHINX_REQUIREMENTS_FILE",
-          "description": "Requirements file (relative to `$SPHINX_PROJECT_DIR`). If the file is not found in the repository, requirements are read from the `SPHINX_REQUIREMENTS` variable",
-          "default": "requirements.txt",
-          "advanced": true
-        },
-        {
-          "name": "SPHINX_REQUIREMENTS",
-          "description": "Space separated requirements (ignored if a requirement file is found)",
-          "default": "",
-          "advanced": true
-        },
-        {
-          "name": "SPHINX_PREBUILD_SCRIPT",
-          "description": "Pre-build hook script (relative to `$SPHINX_PROJECT_DIR`)",
-          "default": "sphinx-pre-build.sh",
-          "advanced": true
-        },
-        {
-          "name": "PIP_OPTS",
-          "description": "pip extra [options](https://pip.pypa.io/en/stable/cli/pip/#general-options)",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "lychee",
-          "name": "lychee",
-          "description": "Checks broken links and emails with [lychee](https://github.com/lycheeverse/lychee)",
-          "enable_with": "SPHINX_LYCHEE_ENABLED",
-          "variables": [
-            {
-              "name": "SPHINX_LYCHEE_IMAGE",
-              "description": "The Docker image used to run [lychee](https://github.com/lycheeverse/lychee)",
-              "default": "registry.hub.docker.com/lycheeverse/lychee:latest",
-              "advanced": true
-            },
-            {
-              "name": "SPHINX_LYCHEE_ARGS",
-              "description": "[lychee arguments](https://github.com/lycheeverse/lychee#commandline-parameters) to execute",
-              "default": "--exclude-loopback $SPHINX_SOURCE_DIR/**/*.rst"
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "pages",
-          "name": "GitLab Pages",
-          "description": "Adds a job to publish the generated documentation to GitLab pages",
-          "template_path": "templates/gitlab-ci-sphinx-pages.yml"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.1.0",
-        "tags": ["1.1.0", "1.1", "1.0.0", "1.0", "1"],
-        "name": "sphinx",
-        "path": "to-be-continuous/sphinx",
-        "web_url": "https://gitlab.com/to-be-continuous/sphinx",
-        "avatar": "https://gitlab.com/to-be-continuous/sphinx/-/avatar"
-      }
-    },
-    {
-      "name": "SQLFluff lint",
-      "description": "Lint your SQL files (whichever your dialect) with [SQLFluff](https://docs.sqlfluff.com)",
-      "template_path": "templates/gitlab-ci-sqlfluff.yml",
-      "kind": "analyse",
-      "prefix": "sqlfluff",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "SQLFLUFF_IMAGE",
-          "description": "The Docker image used to run SQLFluff",
-          "default": "registry.hub.docker.com/sqlfluff/sqlfluff:latest"
-        },
-        {
-          "name": "SQLFLUFF_WORKING_DIR",
-          "description": "Sqlfluff working directory, scope of configuration and sql files used",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "SQLFLUFF_LINT_ARGS",
-          "description": "Lint [options and arguments](https://docs.sqlfluff.com/en/stable/reference/cli.html#sqlfluff-lint)",
-          "advanced": true
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "1.3.0",
-        "tags": [
-          "1.3.0",
-          "1.3",
-          "1.2.0",
-          "1.2",
-          "1.1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.1",
-          "1.0.2",
-          "1.0.1",
-          "1.0.0",
-          "1.0",
-          "1"
-        ],
-        "name": "sqlfluff",
-        "path": "to-be-continuous/sqlfluff",
-        "web_url": "https://gitlab.com/to-be-continuous/sqlfluff",
-        "avatar": "https://gitlab.com/to-be-continuous/sqlfluff/-/avatar"
-      }
-    },
-    {
-      "name": "Terraform",
-      "description": "Manage your infrastructure with [Terraform](https://www.terraform.io)",
-      "template_path": "templates/gitlab-ci-terraform.yml",
-      "kind": "infrastructure",
-      "prefix": "tf",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "TF_IMAGE",
-          "description": "the Docker image used to run Terraform CLI commands - **set the version required by your project**",
-          "default": "registry.hub.docker.com/hashicorp/terraform:latest"
-        },
-        {
-          "name": "TF_GITLAB_BACKEND_DISABLED",
-          "type": "boolean",
-          "description": "Set to disable [GitLab managed Terraform State](https://docs.gitlab.com/ee/user/infrastructure/iac/terraform_state.html)",
-          "advanced": true
-        },
-        {
-          "name": "TF_PROJECT_DIR",
-          "description": "Terraform project root directory",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "TF_SCRIPTS_DIR",
-          "description": "Terraform (hook) scripts base directory (relative to `$TF_PROJECT_DIR`)",
-          "default": ".",
-          "advanced": true
-        },
-        {
-          "name": "TF_OUTPUT_DIR",
-          "description": "Terraform output directory (relative to `$TF_PROJECT_DIR`).\n\n_Everything generated in this directory will be kept as job artifacts._",
-          "default": "tf-output",
-          "advanced": true
-        },
-        {
-          "name": "TF_EXTRA_OPTS",
-          "description": "Default Terraform extra options (applies to all Terraform commands)",
-          "advanced": true
-        },
-        {
-          "name": "TF_INIT_OPTS",
-          "description": "Default Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init)",
-          "advanced": true
-        },
-        {
-          "name": "TF_WORKSPACE",
-          "description": "Default Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces)",
-          "advanced": true
-        },
-        {
-          "name": "TF_PLAN_OPTS",
-          "description": "Default Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan)",
-          "advanced": true
-        },
-        {
-          "name": "TF_APPLY_OPTS",
-          "description": "Default Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply)",
-          "advanced": true
-        },
-        {
-          "name": "TF_DESTROY_OPTS",
-          "description": "Default Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy)",
-          "advanced": true
-        }
-      ],
-      "features": [
-        {
-          "id": "tfsec",
-          "name": "tfsec",
-          "description": "Detect security issues with [tfsec](https://github.com/tfsec/tfsec)",
-          "enable_with": "TF_TFSEC_ENABLED",
-          "variables": [
-            {
-              "name": "TF_TFSEC_IMAGE",
-              "description": "tfsec docker image",
-              "default": "registry.hub.docker.com/aquasec/tfsec-ci",
-              "advanced": true
-            },
-            {
-              "name": "TF_TFSEC_ARGS",
-              "description": "tfsec [options and args](https://aquasecurity.github.io/tfsec/latest/guides/usage/)",
-              "default": "."
-            }
-          ]
-        },
-        {
-          "id": "checkov",
-          "name": "checkov",
-          "description": "Static code analysis tool for infrastructure-as-code",
-          "enable_with": "TF_CHECKOV_ENABLED",
-          "variables": [
-            {
-              "name": "TF_CHECKOV_IMAGE",
-              "description": "checkov docker image",
-              "default": "registry.hub.docker.com/bridgecrew/checkov",
-              "advanced": true
-            },
-            {
-              "name": "TF_CHECKOV_ARGS",
-              "description": "checkov [options and args](https://www.checkov.io/2.Basics/CLI%20Command%20Reference.html)",
-              "default": "--framework terraform",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "tf-infracost",
-          "name": "tf-infracost",
-          "description": "Shows cloud cost estimates for infrastructure-as-code projects",
-          "enable_with": "TF_INFRACOST_ENABLED",
-          "variables": [
-            {
-              "name": "TF_INFRACOST_IMAGE",
-              "description": "Infracost docker image",
-              "default": "registry.hub.docker.com/infracost/infracost",
-              "advanced": true
-            },
-            {
-              "name": "TF_INFRACOST_ARGS",
-              "description": "infracost [CLI options and args](https://www.infracost.io/docs/#usage)",
-              "default": "breakdown"
-            },
-            {
-              "name": "TF_INFACOST_USAGE_FILE",
-              "description": "infracost [usage file](https://www.infracost.io/docs/usage_based_resources/#infracost-usage-file)",
-              "default": "infracost-usage.yml"
-            },
-            {
-              "name": "INFRACOST_API_KEY",
-              "description": "the infracost API key",
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "tf-tflint",
-          "name": "tf-tflint",
-          "description": "Analyse your Terraform code with [tflint](https://github.com/terraform-linters/tflint)",
-          "disable_with": "TF_TFLINT_DISABLED",
-          "variables": [
-            {
-              "name": "TF_TFLINT_IMAGE",
-              "description": "Tflint docker image",
-              "default": "ghcr.io/terraform-linters/tflint-bundle:latest",
-              "advanced": true
-            },
-            {
-              "name": "TF_TFLINT_ARGS",
-              "description": "tflint extra [options and args](https://github.com/terraform-linters/tflint/#usage)",
-              "default": "--enable-plugin=google --enable-plugin=azurerm --enable-plugin=aws --recursive"
-            }
-          ]
-        },
-        {
-          "id": "tf-fmt",
-          "name": "tf-fmt",
-          "description": "Check your Terraform code with [tffmt](https://developer.hashicorp.com/terraform/cli/commands/fmt#usage)",
-          "enable_with": "TF_FMT_ENABLED",
-          "variables": [
-            {
-              "name": "TF_FMT_ARGS",
-              "description": "terraform fmt extra [options](https://developer.hashicorp.com/terraform/cli/commands/fmt#usage)",
-              "default": "-diff -recursive"
-            }
-          ]
-        },
-        {
-          "id": "tf-validate",
-          "name": "tf-validate",
-          "description": "Check your Terraform code with [tfvalidate](https://developer.hashicorp.com/terraform/cli/commands/validate#usage)",
-          "enable_with": "TF_VALIDATE_ENABLED",
-          "variables": []
-        },
-        {
-          "id": "tfdocs",
-          "name": "terraform docs",
-          "description": "Build Terraform documentation based on [terraform docs](https://terraform-docs.io/)",
-          "enable_with": "TF_DOCS_ENABLED",
-          "variables": [
-            {
-              "name": "TF_DOCS_IMAGE",
-              "description": "[terraform docs](https://terraform-docs.io/) container image",
-              "default": "quay.io/terraform-docs/terraform-docs:edge",
-              "advanced": true
-            },
-            {
-              "name": "TF_DOCS_EXTRA_OPTS",
-              "description": "Extra [terraform docs options](https://terraform-docs.io/reference/terraform-docs/)",
-              "advanced": true
-            },
-            {
-              "name": "TF_DOCS_CONFIG",
-              "description": "terraform docs [configuration file](https://terraform-docs.io/user-guide/configuration/) (relative to `$TF_PROJECT_DIR`)",
-              "default": ".terraform-docs.yml",
-              "advanced": true
-            },
-            {
-              "name": "TF_DOCS_OUTPUT_DIR",
-              "description": "terraform docs output directory (relative to `$TF_PROJECT_DIR`)",
-              "default": "docs",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "tfpublish",
-          "name": "publish module",
-          "description": "Publish a Terraform module to GitLab's [Terraform Module Registry](https://docs.gitlab.com/ee/user/packages/terraform_module_registry/)",
-          "enable_with": "TF_PUBLISH_ENABLED",
-          "variables": [
-            {
-              "name": "TF_PUBLISH_IMAGE",
-              "description": "container image used to publish module",
-              "default": "registry.hub.docker.com/curlimages/curl:latest",
-              "advanced": true
-            },
-            {
-              "name": "TF_MODULE_NAME",
-              "description": "The module name. May not contain any spaces or underscores.",
-              "default": "$CI_PROJECT_NAME",
-              "advanced": true
-            },
-            {
-              "name": "TF_MODULE_SYSTEM",
-              "description": "The module system or provider (example: `local`, `aws`, `google`)",
-              "default": "local"
-            },
-            {
-              "name": "TF_MODULE_VERSION",
-              "description": "The module version. It must be valid according to the [semantic versioning](https://semver.org/) specification.",
-              "default": "$CI_COMMIT_TAG",
-              "advanced": true
-            },
-            {
-              "name": "TF_MODULE_FILES",
-              "description": "Glob patterns matching files to include into the Terraform module (:warning: does not support double star)",
-              "default": "*.tf *.tpl *.md"
-            }
-          ]
-        },
-        {
-          "id": "review",
-          "name": "Review",
-          "description": "Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))",
-          "enable_with": "TF_REVIEW_ENABLED",
-          "variables": [
-            {
-              "name": "TF_REVIEW_EXTRA_OPTS",
-              "description": "Terraform extra options for `review` env (applies to all Terraform commands) (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_REVIEW_INIT_OPTS",
-              "description": "Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `review` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_REVIEW_WORKSPACE",
-              "description": "Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `review` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_REVIEW_PLAN_ENABLED",
-              "description": "Set to enable separate Terraform plan job for `review` env.",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "TF_REVIEW_PLAN_OPTS",
-              "description": "Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `review` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_REVIEW_APPLY_OPTS",
-              "description": "Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `review` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_REVIEW_DESTROY_OPTS",
-              "description": "Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `review` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_REVIEW_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop `review` environments",
-              "default": "4 hours"
-            }
-          ]
-        },
-        {
-          "id": "integration",
-          "name": "Integration",
-          "description": "A continuous-integration environment associated to your integration branch (`develop` by default)",
-          "enable_with": "TF_INTEG_ENABLED",
-          "variables": [
-            {
-              "name": "TF_INTEG_EXTRA_OPTS",
-              "description": "Terraform extra options for `integration` env (applies to all Terraform commands) (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_INTEG_INIT_OPTS",
-              "description": "Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `integration` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_INTEG_WORKSPACE",
-              "description": "Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `integration` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_INTEG_PLAN_ENABLED",
-              "description": "Set to enable separate Terraform plan job for `integration` env.",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "TF_INTEG_PLAN_OPTS",
-              "description": "Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `integration` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_INTEG_APPLY_OPTS",
-              "description": "Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `integration` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_INTEG_DESTROY_OPTS",
-              "description": "Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `integration` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_INTEG_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `integration` env",
-              "default": "never"
-            }
-          ]
-        },
-        {
-          "id": "staging",
-          "name": "Staging",
-          "description": "An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)",
-          "enable_with": "TF_STAGING_ENABLED",
-          "variables": [
-            {
-              "name": "TF_STAGING_EXTRA_OPTS",
-              "description": "Terraform extra options for `staging` env (applies to all Terraform commands) (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_STAGING_INIT_OPTS",
-              "description": "Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `staging` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_STAGING_WORKSPACE",
-              "description": "Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `staging` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_STAGING_PLAN_ENABLED",
-              "description": "Set to enable separate Terraform plan job for `staging` env.",
-              "type": "boolean",
-              "advanced": true
-            },
-            {
-              "name": "TF_STAGING_PLAN_OPTS",
-              "description": "Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `staging` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_STAGING_APPLY_OPTS",
-              "description": "Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `staging` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_STAGING_DESTROY_OPTS",
-              "description": "Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `staging` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_STAGING_AUTOSTOP_DURATION",
-              "description": "The amount of time before GitLab will automatically stop the `staging` env",
-              "default": "never"
-            }
-          ]
-        },
-        {
-          "id": "prod",
-          "name": "Production",
-          "description": "The production environment",
-          "enable_with": "TF_PROD_ENABLED",
-          "variables": [
-            {
-              "name": "TF_PROD_EXTRA_OPTS",
-              "description": "Terraform extra options for `production` env (applies to all Terraform commands) (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_PROD_INIT_OPTS",
-              "description": "Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `production` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_PROD_WORKSPACE",
-              "description": "Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `production` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_PROD_PLAN_ENABLED",
-              "description": "Set to enable separate Terraform plan job for `production` env.",
-              "type": "boolean",
-              "default": "true",
-              "advanced": true
-            },
-            {
-              "name": "TF_PROD_PLAN_OPTS",
-              "description": "Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `production` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_PROD_APPLY_OPTS",
-              "description": "Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `production` env (only define to override default)",
-              "advanced": true
-            },
-            {
-              "name": "TF_PROD_DESTROY_OPTS",
-              "description": "Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `production` env (only define to override default)",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "variants": [
-        {
-          "id": "vault",
-          "name": "Vault",
-          "description": "Retrieve secrets from a [Vault](https://www.vaultproject.io/) server",
-          "template_path": "templates/gitlab-ci-terraform-vault.yml",
-          "variables": [
-            {
-              "name": "TBC_VAULT_IMAGE",
-              "description": "The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "VAULT_BASE_URL",
-              "description": "The Vault server base API url",
-              "mandatory": true
-            },
-            {
-              "name": "VAULT_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "VAULT_ROLE_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID",
-              "mandatory": true,
-              "secret": true
-            },
-            {
-              "name": "VAULT_SECRET_ID",
-              "description": "The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID",
-              "mandatory": true,
-              "secret": true
-            }
-          ]
-        },
-        {
-          "id": "gcp-auth-provider",
-          "name": "Google Cloud",
-          "description": "Retrieves an [OAuth access token](https://developers.google.com/identity/protocols/oauth2) for the [Google Cloud Platform Provider for Terraform](https://registry.terraform.io/providers/hashicorp/google/latest/docs)",
-          "template_path": "templates/gitlab-ci-terraform-gcp.yml",
-          "variables": [
-            {
-              "name": "TBC_GCP_PROVIDER_IMAGE",
-              "description": "The [GCP Auth Provider](https://gitlab.com/to-be-continuous/tools/gcp-auth-provider) image to use",
-              "default": "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master",
-              "advanced": true
-            },
-            {
-              "name": "GCP_OIDC_AUD",
-              "description": "The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_",
-              "default": "$CI_SERVER_URL",
-              "advanced": true
-            },
-            {
-              "name": "GCP_OIDC_ACCOUNT",
-              "description": "Default Service Account to which impersonate with OpenID Connect authentication"
-            },
-            {
-              "name": "GCP_OIDC_PROVIDER",
-              "description": "Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"
-            },
-            {
-              "name": "GCP_REVIEW_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `review` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_REVIEW_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `integration` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_INTEG_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `staging` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_STAGING_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_OIDC_ACCOUNT",
-              "description": "Service Account to which impersonate with OpenID Connect authentication on `production` environment",
-              "advanced": true
-            },
-            {
-              "name": "GCP_PROD_OIDC_PROVIDER",
-              "description": "Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment",
-              "advanced": true
-            }
-          ]
-        },
-        {
-          "id": "aws",
-          "name": "AWS",
-          "description": "Sets the appropriate Assume Role with Web Identity configuration for the [AWS Provider for Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#assume-role-with-web-identity-configuration-reference)",
-          "template_path": "templates/gitlab-ci-terraform-aws.yml",
-          "variables": [
-            {
-              "name": "AWS_OIDC_AUD",
-              "description": "The `aud` claim for the JWT",
-              "default": "$CI_SERVER_URL"
-            },
-            {
-              "name": "AWS_OIDC_ROLE_ARN",
-              "description": "Default IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/)",
-              "advanced": true
-            },
-            {
-              "name": "AWS_REVIEW_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `review` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_INTEG_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `integration` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_STAGING_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `staging` env _(only define to override default)_",
-              "advanced": true
-            },
-            {
-              "name": "AWS_PROD_OIDC_ROLE_ARN",
-              "description": "IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `production` env _(only define to override default)_",
-              "advanced": true
-            }
-          ]
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "5.4.0",
-        "tags": [
-          "5.4.0",
-          "5.4",
-          "5.3.0",
-          "5.3",
-          "5.2.0",
-          "5.2",
-          "5.1.0",
-          "5.1",
-          "5.0.2",
-          "5.0.1",
-          "5.0.0",
-          "5.0",
-          "5",
-          "4.0.3",
-          "4.0.2",
-          "4.0.1",
-          "4.0.0",
-          "4.0",
-          "4",
-          "3.12.3",
-          "3.12.2",
-          "3.12.1",
-          "3.12.0",
-          "3.12",
-          "3.11.0",
-          "3.11",
-          "3.10.0",
-          "3.10",
-          "3.9.1",
-          "3.9.0",
-          "3.9",
-          "3.8.0",
-          "3.8",
-          "3.7.0",
-          "3.7",
-          "3.6.3",
-          "3.6.2",
-          "3.6.1",
-          "3.6.0",
-          "3.6",
-          "3.5.1",
-          "3.5.0",
-          "3.5",
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.8.0",
-          "2.8",
-          "2.7.1",
-          "2.7.0",
-          "2.7",
-          "2.6.0",
-          "2.6",
-          "2.5.0",
-          "2.5",
-          "2.4.3",
-          "2.4.2",
-          "2.4.1",
-          "2.4.0",
-          "2.3.2",
-          "2.3.1",
-          "2.3.0",
-          "2.2.4",
-          "2.2.3",
-          "2.2.2",
-          "2.2.1",
-          "2.2.0",
-          "2.1.1",
-          "2.1.0",
-          "2.0.0",
-          "2",
-          "1.1.2",
-          "1.1.1",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "terraform",
-        "path": "to-be-continuous/terraform",
-        "web_url": "https://gitlab.com/to-be-continuous/terraform",
-        "avatar": "https://gitlab.com/to-be-continuous/terraform/-/avatar"
-      }
-    },
-    {
-      "name": "Test SSL",
-      "description": "Test your TLS/SSL servers compliance with [Test SSL](https://testssl.sh/)",
-      "template_path": "templates/gitlab-ci-testssl.yml",
-      "kind": "acceptance",
-      "prefix": "testssl",
-      "is_component": true,
-      "variables": [
-        {
-          "name": "TESTSSL_IMAGE",
-          "description": "The Docker image used to run [Test SSL](https://testssl.sh/)",
-          "default": "registry.hub.docker.com/drwetter/testssl.sh:latest"
-        },
-        {
-          "name": "TESTSSL_ARGS",
-          "description": "Test SSL [command-line options](https://testssl.sh/#usage)",
-          "default": "--severity MEDIUM",
-          "advanced": true
-        },
-        {
-          "name": "TESTSSL_URL",
-          "description": "Server url to test TLS/SSL against\n\n_Leave unset if you're using deployment templates_"
-        },
-        {
-          "name": "REVIEW_ENABLED",
-          "description": "Set to enable Test SSL tests on review environments (dynamic environments instantiated on development branches)",
-          "type": "boolean"
-        }
-      ],
-      "extension_id": null,
-      "project": {
-        "tag": "3.4.0",
-        "tags": [
-          "3.4.0",
-          "3.4",
-          "3.3.0",
-          "3.3",
-          "3.2.1",
-          "3.2.0",
-          "3.2",
-          "3.1.2",
-          "3.1.1",
-          "3.1.0",
-          "3.1",
-          "3.0.0",
-          "3.0",
-          "3",
-          "2.1.0",
-          "2.1",
-          "2.0.1",
-          "2.0.0",
-          "2",
-          "1.2.0",
-          "1.1.0",
-          "1.0.0"
-        ],
-        "name": "testssl",
-        "path": "to-be-continuous/testssl",
-        "web_url": "https://gitlab.com/to-be-continuous/testssl",
-        "avatar": "https://gitlab.com/to-be-continuous/testssl/-/avatar"
-      }
-    }
-  ]
-}
+{"extensions":[],"presets":[{"name":"OpenShift Sandbox","description":"[OpenShift Sandbox](https://developers.redhat.com/developer-sandbox) by RedHat","values":{"OS_URL":"https://api.sandbox.x8i5.p1.openshiftapps.com:6443","OS_ENVIRONMENT_URL":"https://%{environment_name}.apps.sandbox.x8i5.p1.openshiftapps.com","K8S_URL":"https://api.sandbox.x8i5.p1.openshiftapps.com:6443","K8S_ENVIRONMENT_URL":"https://%{environment_name}.apps.sandbox.x8i5.p1.openshiftapps.com"},"extension_id":null,"project":{"tag":"1.0.0","tags":["1.0.0"],"name":"kicker-extras","path":"to-be-continuous/tools/kicker-extras","web_url":"https://gitlab.com/to-be-continuous/tools/kicker-extras"}},{"name":"SonarCloud","description":"[SonarCloud](https://www.sonarsource.com/products/sonarcloud/) (SaaS)","values":{"SONAR_HOST_URL":"https://sonarcloud.io"},"extension_id":null,"project":{"tag":"1.0.0","tags":["1.0.0"],"name":"kicker-extras","path":"to-be-continuous/tools/kicker-extras","web_url":"https://gitlab.com/to-be-continuous/tools/kicker-extras"}}],"templates":[{"name":"Angular","description":"Build, test and analyse your [Angular](https://angular.io/) projects","template_path":"templates/gitlab-ci-angular.yml","kind":"build","prefix":"ng","is_component":true,"variables":[{"name":"NG_CLI_IMAGE","description":"The Docker image used to run Angular-CLI (`ng`) - **set the version required by your project**","default":"registry.hub.docker.com/trion/ng-cli-karma:latest"},{"name":"NPM_CONFIG_REGISTRY","description":"NPM [registry](https://docs.npmjs.com/configuring-your-registry-settings-as-an-npm-enterprise-user)","type":"url","advanced":true},{"name":"NPM_CONFIG_SCOPED_REGISTRIES","description":"Space separated list of NPM [scoped registries](https://docs.npmjs.com/cli/v8/using-npm/scope#associating-a-scope-with-a-registry) (formatted as `@somescope:https://some.npm.registry/some/repo @anotherscope:https://another.npm.registry/another/repo`)","advanced":true},{"name":"NG_WORKSPACE_DIR","description":"Angular workspace directory","default":".","advanced":true},{"name":"NG_INSTALL_EXTRA_OPTS","description":"Extra options to install project dependencies (with [`npm ci`](https://docs.npmjs.com/cli/ci.html/))","advanced":true},{"name":"NG_BUILD_ARGS","description":"Angular [ng build](https://angular.io/cli/build) arguments","default":"build","advanced":true},{"name":"NG_TEST_ARGS","description":"Angular [ng test](https://angular.io/cli/test) arguments","default":"test --code-coverage --reporters progress,junit --watch=false --no-progress","advanced":true}],"features":[{"id":"lint","name":"Angular lint","description":"Angular lint analysis","disable_with":"NG_LINT_DISABLED","variables":[{"name":"NG_LINT_ARGS","description":"Angular [ng lint](https://angular.io/cli/lint) arguments","default":"lint","advanced":true}]},{"id":"publish","name":"Publish","description":"[publishes](https://docs.npmjs.com/cli/v6/commands/npm-publish) the project packages to a npm registry","enable_with":"NG_PUBLISH_ENABLED","variables":[{"name":"NG_PUBLISH_ARGS","description":"npm [publish](https://docs.npmjs.com/cli/v6/commands/npm-publish) arguments","advanced":true},{"name":"NG_PUBLISH_PROJECTS","description":"Space separated list of projects to publish. If no project is specified, all workspace projects are published.","advanced":true},{"name":"NPM_PUBLISH_REGISTRY","description":"npm registry to publish to. If none is specified, uses GitLab project npm packages registry","secret":true},{"name":"NPM_PUBLISH_TOKEN","description":"NPM publication registry authentication token","secret":true}]},{"id":"e2e-test","name":"e2e-test","description":"Run your [e2e tests](https://angular.io/cli/e2e) on your angular project","enable_with":"NG_E2E_ENABLED","variables":[{"name":"NG_E2E_ARGS","description":"ng [e2e](https://angular.io/cli/e2e) arguments","default":"e2e","advanced":true}]},{"id":"ng-outdated","name":"ng-outdated","description":"This job performs outdated analysis ([npm outdated](https://docs.npmjs.com/cli/v8/commands/npm-outdated)), to find dependencies that might be updated.","disable_with":"NG_OUTDATED_DISABLED","variables":[{"name":"NG_OUTDATED_ARGS","description":"npm [outdated](https://docs.npmjs.com/cli/v8/commands/npm-outdated) arguments","default":"--long"},{"name":"NG_OUTDATED_ALLOW_FAILURE","description":"Allow the job to fail and therefore not block the pipeline","type":"boolean","default":"true","advanced":true}]},{"id":" ng-audit","name":"ng-audit","description":"This job performs an audit using ([npm audit](https://docs.npmjs.com/cli/v8/commands/npm-audit)), to find vulnerabilities (security).","disable_with":"NG_AUDIT_DISABLED","variables":[{"name":"NG_AUDIT_ARGS","description":"npm [audit](https://docs.npmjs.com/cli/v8/commands/npm-audit) arguments","default":"--audit-level=low"}]},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [@cyclonedx/cyclonedx-npm](https://www.npmjs.com/package/@cyclonedx/cyclonedx-npm)","disable_with":"NG_SBOM_DISABLED","variables":[{"name":"NG_SBOM_VERSION","description":"Version of the @cyclonedx/cyclonedx-npm used for SBOM analysis","advanced":true},{"name":"NG_SBOM_OPTS","description":"Options for @cyclonedx/cyclonedx-npm used for SBOM analysis","default":"--omit dev","advanced":true}]}],"extension_id":null,"project":{"tag":"4.10.2","tags":["4.10.2","4.10.1","4.10.0","4.10","4.9.1","4.9.0","4.9","4.8.2","4.8.1","4.8.0","4.8","4.7.0","4.7","4.6.0","4.6","4.5.1","4.5.0","4.5","4.4.0","4.4","4.3.2","4.3.1","4.3.0","4.3","4.2.3","4.2.2","4.2.1","4.2.0","4.2","4.1.1","4.1.0","4.1","4.0.0","4.0","4","3.2.1","3.2.0","3.2","3.1.0","3.1","3.0.1","3.0.0","3.0","3","2.2.0","2.2","2.1.0","2.0.1","2.0.0","2","1.2.0","1.1.0","1.0.1","1.0.0"],"name":"angular","path":"to-be-continuous/angular","web_url":"https://gitlab.com/to-be-continuous/angular","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26451062/logo.png"}},{"name":"Ansible","description":"Provision your infrastructure and deploy your application with [Ansible](https://www.ansible.com/)","template_path":"templates/gitlab-ci-ansible.yml","kind":"hosting","prefix":"ansible","is_component":true,"variables":[{"name":"ANSIBLE_IMAGE","description":"The Docker image used to run Ansible. The image may contain your Ansible sources. **set the version required by your project**","default":"registry.hub.docker.com/cytopia/ansible:latest-tools"},{"name":"ANSIBLE_PROJECT_DIR","description":"Ansible project root directory","default":".","advanced":true},{"name":"ANSIBLE_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"ANSIBLE_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.acme.com`)_"},{"name":"ANSIBLE_VAULT_PASSWORD","description":"The Ansible vault password used to decrypt vars","secret":true},{"name":"ANSIBLE_PRIVATE_KEY","description":"The Ansible SSH private key to use in all stages (can be overridden per env)","secret":true},{"name":"ANSIBLE_PUBLIC_KEY","description":"The Ansible SSH public key associated to the private key to be use in all stages (can be overridden per env)","advanced":true},{"name":"ANSIBLE_DEFAULT_INVENTORY","description":"The default inventory, if used"},{"name":"ANSIBLE_DEFAULT_TAGS","description":"The default tags, if used"},{"name":"ANSIBLE_DEFAULT_EXTRA_ARGS","description":"Optional default args to add to the ansible-playbook command line","advanced":true},{"name":"ANSIBLE_FORCE_COLOR","description":"Forces color on Ansible output","type":"boolean","default":"true","advanced":true},{"name":"ANSIBLE_REQUIREMENTS_FILE","description":"The file used to install roles with `ansible-galaxy role install`","default":"requirements.yml","advanced":true},{"name":"ANSIBLE_GALAXY_EXTRA_ARGS","description":"`ansible-galaxy role install` command [extra options](https://docs.ansible.com/ansible/latest/cli/ansible-galaxy.html#role-install)","advanced":true},{"name":"ANSIBLE_SCRIPTS_DIR","description":"The Ansible scripts base directory (relative to `$ANSIBLE_PROJECT_DIR`)","default":".","advanced":true},{"name":"ANSIBLE_HOST_KEY_CHECKING","description":"Enable or disable the SSH host key checking","type":"boolean","default":"false","advanced":true},{"name":"ANSIBLE_DEFAULT_ROLES_PATH","description":"The default path where the roles should be installed","default":"$CI_PROJECT_DIR/roles","advanced":true}],"features":[{"id":"lint","name":"Ansible Lint","description":"Static code analysis of your Ansible scripts with [Ansible Lint](https://docs.ansible.com/ansible-lint/)","disable_with":"ANSIBLE_LINT_DISABLED","variables":[{"name":"ANSIBLE_LINT_IMAGE","description":"The Docker image used to run Ansible Lint.","default":"registry.hub.docker.com/haxorof/ansible-lint:latest"}]},{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","variables":[{"name":"ANSIBLE_REVIEW_APP_NAME","description":"The application name for review env (only define to override default)","advanced":true},{"name":"ANSIBLE_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"ANSIBLE_REVIEW_INVENTORY","description":"The inventory for `review` env (only define to override default)"},{"name":"ANSIBLE_REVIEW_TAGS","description":"The tags for `review` env (only define to override default)"},{"name":"ANSIBLE_REVIEW_CLEANUP_TAGS","description":"The tags to cleanup the `review` env","mandatory":true},{"name":"ANSIBLE_REVIEW_EXTRA_ARGS","description":"The command line extra args for `review` env (only define to override default)","advanced":true},{"name":"ANSIBLE_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"ANSIBLE_REVIEW_PLAYBOOK_FILE","description":"The playbook filename for `review` env","mandatory":true},{"name":"ANSIBLE_REVIEW_CLEANUP_PLAYBOOK_FILE","description":"The playbook filename to cleanup `review` env (only define if different from deployment playbook)","advanced":true},{"name":"ANSIBLE_REVIEW_PRIVATE_KEY","description":"The SSH private key to be use in `review` env (only define to override default)","secret":true},{"name":"ANSIBLE_REVIEW_PUBLIC_KEY","description":"The SSH public key associated to the private key to be use in `review` env (only define to override default)","advanced":true},{"name":"ANSIBLE_REVIEW_VAULT_PASSWORD","description":"The Ansible vault password for `review` env (only define to override default)","secret":true,"advanced":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","variables":[{"name":"ANSIBLE_INTEG_APP_NAME","description":"The application name for integration env (only define to override default)","advanced":true},{"name":"ANSIBLE_INTEG_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `integration` env","default":"never"},{"name":"ANSIBLE_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"ANSIBLE_INTEG_INVENTORY","description":"The inventory for `integration` env (only define to override default)"},{"name":"ANSIBLE_INTEG_TAGS","description":"The tags for `integration` env (only define to override default)"},{"name":"ANSIBLE_INTEG_CLEANUP_TAGS","description":"The tags to cleanup the `integration` env","mandatory":true},{"name":"ANSIBLE_INTEG_EXTRA_ARGS","description":"The command line extra args for `integration` env (only define to override default)","advanced":true},{"name":"ANSIBLE_INTEG_PLAYBOOK_FILE","description":"The playbook filename for `integration` env","mandatory":true},{"name":"ANSIBLE_INTEG_CLEANUP_PLAYBOOK_FILE","description":"The playbook filename to cleanup `integration` env (only define if different from deployment playbook)","advanced":true},{"name":"ANSIBLE_INTEG_PRIVATE_KEY","description":"The SSH private key to be use in `integration` env (only define to override default)","secret":true,"advanced":true},{"name":"ANSIBLE_INTEG_PUBLIC_KEY","description":"The SSH public key associated to the private key to be use in `integration` env (only define to override default)","advanced":true},{"name":"ANSIBLE_INTEG_VAULT_PASSWORD","description":"The Ansible vault password for `integration` env (only define to override default)","secret":true,"advanced":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","variables":[{"name":"ANSIBLE_STAGING_APP_NAME","description":"The application name for staging env (only define to override default)","advanced":true},{"name":"ANSIBLE_STAGING_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `staging` env","default":"never"},{"name":"ANSIBLE_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"ANSIBLE_STAGING_INVENTORY","description":"The inventory for `staging` env (only define to override default)"},{"name":"ANSIBLE_STAGING_TAGS","description":"The tags for `staging` env (only define to override default)"},{"name":"ANSIBLE_STAGING_CLEANUP_TAGS","description":"The tags to cleanup the `staging` env","mandatory":true},{"name":"ANSIBLE_STAGING_EXTRA_ARGS","description":"The command line extra args for `staging` env (only define to override default)","advanced":true},{"name":"ANSIBLE_STAGING_PLAYBOOK_FILE","description":"The playbook filename for `staging` env","mandatory":true},{"name":"ANSIBLE_STAGING_CLEANUP_PLAYBOOK_FILE","description":"The playbook filename to cleanup `staging` env (only define if different from deployment playbook)","advanced":true},{"name":"ANSIBLE_STAGING_PRIVATE_KEY","description":"The SSH private key to be use in `staging` env (only define to override default)","secret":true,"advanced":true},{"name":"ANSIBLE_STAGING_PUBLIC_KEY","description":"The SSH public key associated to the private key to be use in `staging` env (only define to override default)","advanced":true},{"name":"ANSIBLE_STAGING_VAULT_PASSWORD","description":"The Ansible vault password for `staging` env (only define to override default)","secret":true,"advanced":true}]},{"id":"prod","name":"Production","description":"The production environment","variables":[{"name":"ANSIBLE_PROD_APP_NAME","description":"The application name for production env (only define to override default)","advanced":true},{"name":"ANSIBLE_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"ANSIBLE_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"ANSIBLE_PROD_INVENTORY","description":"The inventory for `production` env (only define to override default)"},{"name":"ANSIBLE_PROD_TAGS","description":"The tags for `production` env (only define to override default)"},{"name":"ANSIBLE_PROD_EXTRA_ARGS","description":"The command line extra args for `production` env (only define to override default)","advanced":true},{"name":"ANSIBLE_PROD_PLAYBOOK_FILE","description":"The playbook filename for `production` env","mandatory":true},{"name":"ANSIBLE_PROD_PRIVATE_KEY","description":"The SSH private key to be use in `production` env (only define to override default)","secret":true,"advanced":true},{"name":"ANSIBLE_PROD_PUBLIC_KEY","description":"The SSH public key associated to the private key to be use in `production` env (only define to override default)","advanced":true},{"name":"ANSIBLE_PROD_VAULT_PASSWORD","description":"The Ansible vault password for `production` env (only define to override default)","secret":true,"advanced":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-ansible-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]},{"id":"gcp-auth-provider","name":"Google Cloud","description":"This variant uses [Application Default Credentials][gcp-adc] through the `GOOGLE_APPLICATION_CREDENTIALS` variable using Workload Identity federation.","template_path":"templates/gitlab-ci-ansible-gcp.yml","variables":[{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Default Service Account to which impersonate with OpenID Connect authentication"},{"name":"GCP_OIDC_PROVIDER","description":"Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"},{"name":"GCP_REVIEW_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `review` environment","advanced":true},{"name":"GCP_REVIEW_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment","advanced":true},{"name":"GCP_INTEG_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `integration` environment","advanced":true},{"name":"GCP_INTEG_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment","advanced":true},{"name":"GCP_STAGING_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `staging` environment","advanced":true},{"name":"GCP_STAGING_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment","advanced":true},{"name":"GCP_PROD_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `production` environment","advanced":true},{"name":"GCP_PROD_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment","advanced":true}]}],"extension_id":null,"project":{"tag":"6.4.0","tags":["6.4.0","6.4","6.3.4","6.3.3","6.3.2","6.3.1","6.3.0","6.3","6.2.0","6.2","6.1.3","6.1.2","6.1.1","6.1.0","6.1","6.0.1","6.0.0","6.0","6","5.1.0","5.1","5.0.0","5.0","5","4.1.0","4.1","4.0.0","4.0","4","3.5.2","3.5.1","3.5.0","3.5","3.4.1","3.4.0","3.4","3.3.0","3.3","3.2.0","3.2","3.1.0","3.1","3.0.0","3.0","3","2.3.0","2.3","2.2.0","2.2","2.1.4","2.1.3","2.1.2","2.1.1","2.1.0","2.0.1","2.0.0","2","1.2.1","1.2.0","1.1.0","1.0.0"],"name":"ansible","path":"to-be-continuous/ansible","web_url":"https://gitlab.com/to-be-continuous/ansible","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26473639/logo.png"}},{"name":"Amazon Web Services","description":"Deploy your application to [Amazon Web Services](https://aws.amazon.com/)","template_path":"templates/gitlab-ci-aws.yml","kind":"hosting","prefix":"aws","is_component":true,"variables":[{"name":"AWS_CLI_IMAGE","description":"The Docker image used to run AWS CLI commands","default":"registry.hub.docker.com/amazon/aws-cli:latest"},{"name":"AWS_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"AWS_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.aws.acme.com`)_"},{"name":"AWS_SCRIPTS_DIR","description":"Directory where AWS scripts (deploy & cleanup) are located","default":".","advanced":true}],"features":[{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","enable_with":"AWS_REVIEW_ENABLED","variables":[{"name":"AWS_REVIEW_APP_NAME","description":"The application name for review env (only define to override default)","advanced":true},{"name":"AWS_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"AWS_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","enable_with":"AWS_INTEG_ENABLED","variables":[{"name":"AWS_INTEG_APP_NAME","description":"The application name for integration env (only define to override default)","advanced":true},{"name":"AWS_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","enable_with":"AWS_STAGING_ENABLED","variables":[{"name":"AWS_STAGING_APP_NAME","description":"The application name for staging env (only define to override default)","advanced":true},{"name":"AWS_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true}]},{"id":"prod","name":"Production","description":"The production environment","enable_with":"AWS_PROD_ENABLED","variables":[{"name":"AWS_PROD_APP_NAME","description":"The application name for production env (only define to override default)","advanced":true},{"name":"AWS_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"AWS_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"}]}],"variants":[{"id":"oidc","name":"OpenID Connect","description":"Enables [federated authentication using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)","template_path":"templates/gitlab-ci-aws-oidc.yml","variables":[{"name":"AWS_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"AWS_OIDC_ROLE_ARN","description":"Default IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/)","advanced":true},{"name":"AWS_REVIEW_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `review` env _(only define to override default)_","advanced":true},{"name":"AWS_INTEG_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `integration` env _(only define to override default)_","advanced":true},{"name":"AWS_STAGING_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `staging` env _(only define to override default)_","advanced":true},{"name":"AWS_PROD_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `production` env _(only define to override default)_","advanced":true}]},{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-aws-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"5.2.3","tags":["5.2.3","5.2.2","5.2.1","5.2.0","5.2","5.1.0","5.1","5.0.2","5.0.1","5.0.0","5.0","5","4.1.0","4.1","4.0.0","4.0","4","3.2.0","3.2","3.1.0","3.1","3.0.0","3.0","3","2.3.2","2.3.1","2.3.0","2.3","2.2.0","2.2","2.1.0","2.1","2.0.0","2.0","2","1.4.0","1.4","1.3.0","1.3","1.2.0","1.2","1.1.3","1.1.2","1.1.1","1.1.0","1.0.2","1.0.1","1.0.0","1"],"name":"aws","path":"to-be-continuous/aws","web_url":"https://gitlab.com/to-be-continuous/aws","avatar":"https://gitlab.com/uploads/-/system/project/avatar/30120028/logo.png"}},{"name":"Azure","description":"Deploy your application to [Azure](https://azure.microsoft.com/)","template_path":"templates/gitlab-ci-azure.yml","kind":"hosting","prefix":"azure","is_component":true,"variables":[{"name":"AZURE_CLI_IMAGE","description":"The Docker image used to run Azure CLI commands","default":"mcr.microsoft.com/azure-cli:latest"},{"name":"AZURE_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"AZURE_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.azure.acme.com`)_"},{"name":"AZURE_SCRIPTS_DIR","description":"Directory where Azure scripts (deploy & cleanup) are located","default":".","advanced":true},{"name":"AZURE_SP_CLIENT_ID","description":"Default Service Principal client ID _(only define if using Service Principal authentication with credentials)_","advanced":true},{"name":"AZURE_SP_PASSWORD","description":"Default Service Principal password (client secret or certificate (File type)) (only define if using Service Principal authentication with credentials)","advanced":true,"secret":true},{"name":"AZURE_SP_TENANT_ID","description":"Default Service Principal tenant ID _(only define if using Service Principal authentication with credentials)_","advanced":true}],"features":[{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","enable_with":"AZURE_REVIEW_ENABLED","variables":[{"name":"AZURE_REVIEW_APP_NAME","description":"The application name for review env (only define to override default)","advanced":true},{"name":"AZURE_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"AZURE_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"AZURE_REVIEW_SP_CLIENT_ID","description":"Service Principal client ID for `review` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true},{"name":"AZURE_REVIEW_SP_PASSWORD","description":"Service Principal password (client secret or certificate (File type)) for `review` env - (only define if using Service Principal authentication with credentials and if different from default)","advanced":true,"secret":true},{"name":"AZURE_REVIEW_SP_TENANT_ID","description":"Service Principal tenant ID for `review` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","enable_with":"AZURE_INTEG_ENABLED","variables":[{"name":"AZURE_INTEG_APP_NAME","description":"The application name for integration env (only define to override default)","advanced":true},{"name":"AZURE_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"AZURE_INTEG_SP_CLIENT_ID","description":"Service Principal client ID for `integration` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true},{"name":"AZURE_INTEG_SP_PASSWORD","description":"Service Principal password (client secret or certificate (File type)) for `integration` env - (only define if using Service Principal authentication with credentials and if different from default)","advanced":true,"secret":true},{"name":"AZURE_INTEG_SP_TENANT_ID","description":"Service Principal tenant ID for `integration` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","enable_with":"AZURE_STAGING_ENABLED","variables":[{"name":"AZURE_STAGING_APP_NAME","description":"The application name for staging env (only define to override default)","advanced":true},{"name":"AZURE_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"AZURE_STAGING_SP_CLIENT_ID","description":"Service Principal client ID for `staging` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true},{"name":"AZURE_STAGING_SP_PASSWORD","description":"Service Principal password (client secret or certificate (File type)) for `staging` env - (only define if using Service Principal authentication with credentials and if different from default)","advanced":true,"secret":true},{"name":"AZURE_STAGING_SP_TENANT_ID","description":"Service Principal tenant ID for `staging` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true}]},{"id":"prod","name":"Production","description":"The production environment","enable_with":"AZURE_PROD_ENABLED","variables":[{"name":"AZURE_PROD_APP_NAME","description":"The application name for production env (only define to override default)","advanced":true},{"name":"AZURE_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"AZURE_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"AZURE_PROD_SP_CLIENT_ID","description":"Service Principal client ID for `production` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true},{"name":"AZURE_PROD_SP_PASSWORD","description":"Service Principal password (client secret or certificate (File type)) for `production` env - (only define if using Service Principal authentication with credentials and if different from default)","advanced":true,"secret":true},{"name":"AZURE_PROD_SP_TENANT_ID","description":"Service Principal tenant ID for `production` env - _(only define if using Service Principal authentication with credentials and if different from default)_","advanced":true}]}],"variants":[{"id":"oidc","name":"OpenID Connect","description":"Enables [federated authentication using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/)","template_path":"templates/gitlab-ci-azure-oidc.yml","variables":[{"name":"AZURE_OIDC_AUD","description":"The `aud` claim for the JWT","default":"api://AzureADTokenExchange"},{"name":"AZURE_OIDC_CLIENT_ID","description":"Default Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/)","advanced":true},{"name":"AZURE_OIDC_TENANT_ID","description":"Default Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/)","advanced":true},{"name":"AZURE_REVIEW_OIDC_CLIENT_ID","description":"Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `review` env _(only define to override default)_","advanced":true},{"name":"AZURE_REVIEW_OIDC_TENANT_ID","description":"Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `review` env _(only define to override default)_","advanced":true},{"name":"AZURE_INTEG_OIDC_CLIENT_ID","description":"Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `integration` env _(only define to override default)_","advanced":true},{"name":"AZURE_INTEG_OIDC_TENANT_ID","description":"Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `integration` env _(only define to override default)_","advanced":true},{"name":"AZURE_STAGING_OIDC_CLIENT_ID","description":"Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `staging` env _(only define to override default)_","advanced":true},{"name":"AZURE_STAGING_OIDC_TENANT_ID","description":"Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `staging` env _(only define to override default)_","advanced":true},{"name":"AZURE_PROD_OIDC_CLIENT_ID","description":"Service Principal client ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `production` env _(only define to override default)_","advanced":true},{"name":"AZURE_PROD_OIDC_TENANT_ID","description":"Service Principal tenant ID associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/azure/) on `production` env _(only define to override default)_","advanced":true}]},{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-azure-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"2.2.3","tags":["2.2.3","2.2.2","2.2.1","2.2.0","2.2","2.1.0","2.1","2.0.2","2.0.1","2.0.0","2.0","2","1.0.0","1.0","1"],"name":"azure","path":"to-be-continuous/azure","web_url":"https://gitlab.com/to-be-continuous/azure","avatar":"https://gitlab.com/uploads/-/system/project/avatar/48544609/logo.png"}},{"name":"Bash","description":"Test and analyse your shell code","template_path":"templates/gitlab-ci-bash.yml","kind":"build","prefix":"bash","is_component":true,"features":[{"id":"shellcheck","name":"ShellCheck","description":"Analyse your shell scripts with [ShellCheck](https://github.com/koalaman/shellcheck)","disable_with":"BASH_SHELLCHECK_DISABLED","variables":[{"name":"BASH_SHELLCHECK_IMAGE","description":"The Docker image used to run [ShellCheck](https://github.com/koalaman/shellcheck)","default":"registry.hub.docker.com/koalaman/shellcheck-alpine:stable","advanced":true},{"name":"BASH_SHELLCHECK_FILES","description":"Shell file(s) or pattern(s) to analyse","default":"**/*.sh"},{"name":"BASH_SHELLCHECK_OPTS","description":"ShellCheck [options](https://github.com/koalaman/shellcheck/blob/master/shellcheck.1.md)"}]},{"id":"bats","name":"Bats","description":"Test your shell scripts with [Bats](https://bats-core.readthedocs.io/) (Bash Automated Testing System)","enable_with":"BASH_BATS_ENABLED","variables":[{"name":"BASH_BATS_IMAGE","description":"The Docker image used to run [Bats](https://hub.docker.com/r/bats/bats)","default":"registry.hub.docker.com/bats/bats:latest","advanced":true},{"name":"BASH_BATS_TESTS","description":"The path to a Bats test file, or the path to a directory containing Bats test files","default":"tests"},{"name":"BASH_BATS_OPTS","description":"Bats [options](https://bats-core.readthedocs.io/en/stable/usage.html)"},{"name":"BASH_BATS_LIBRARIES","description":"Coma separated list of Bats [libraries and add-ons](https://bats-core.readthedocs.io/en/stable/writing-tests.html#libraries-and-add-ons)\n\nFormatted as: `lib_name_1@archive_url_1 lib_name_2@archive_url_2 ...`\n\nExample: `bats-support@https://github.com/bats-core/bats-support/archive/v0.3.0.zip bats-assert@https://github.com/bats-core/bats-assert/archive/v2.0.0.zip`"}]}],"extension_id":null,"project":{"tag":"3.5.2","tags":["3.5.2","3.5.1","3.5.0","3.5","3.4.1","3.4.0","3.4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.2","3.1.1","3.1.0","3.1","3.0.1","3.0.0","3.0","3","2.1.1","2.1.0","2.1","2.0.1","2.0.0","2","1.0.0"],"name":"bash","path":"to-be-continuous/bash","web_url":"https://gitlab.com/to-be-continuous/bash","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26449717/logo.png"}},{"name":"Bruno","description":"Test your APIs with [Bruno](https://www.usebruno.com/)","template_path":"templates/gitlab-ci-bruno.yml","kind":"acceptance","prefix":"bru","job_prefix":"bruno","is_component":true,"variables":[{"name":"BRU_IMAGE","description":"The Docker image used to run the [Bruno CLI](https://docs.usebruno.com/cli/overview.html)","default":"registry.hub.docker.com/library/node:lts-alpine"},{"name":"BRU_COLLECTIONS","description":"The matcher to select Bruno collection directory(ies) to run","default":"bruno"},{"name":"BRU_BASE_URL","description":"Explicit base url environment to test.\n\n_Auto-evaluated by default._","type":"url","advanced":true},{"name":"BRU_EXTRA_ARGS","description":"Bruno extra [run options](https://docs.usebruno.com/cli/overview.html#options)","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable Bruno tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"1.5.0","tags":["1.5.0","1.5","1.4.0","1.4","1.3.0","1.3","1.2.2","1.2.1","1.2.0","1.2","1.1.0","1.1","1.0.0","1.0","1"],"name":"bruno","path":"to-be-continuous/bruno","web_url":"https://gitlab.com/to-be-continuous/bruno","avatar":"https://gitlab.com/uploads/-/system/project/avatar/53021411/logo.png"}},{"name":"Cloud Foundry","description":"Deploy your application to a [Cloud Foundry](https://www.cloudfoundry.org/) platform","template_path":"templates/gitlab-ci-cf.yml","kind":"hosting","prefix":"cf","is_component":true,"variables":[{"name":"CF_CLI_IMAGE","description":"The Docker image used to run CF CLI commands - **set the version required by your Cloud Foundry server**","default":"registry.hub.docker.com/governmentpaas/cf-cli"},{"name":"CF_MANIFEST_BASENAME","description":"CF manifest file basename (without extension nor env suffix)","default":"manifest","advanced":true},{"name":"CF_URL","type":"url","description":"Global Cloud Foundry API url","mandatory":true},{"name":"CF_ORG","description":"Global Cloud Foundry organization for project","mandatory":true},{"name":"CF_DEFAULT_DOMAIN","description":"Global Cloud Foundry default CF domain _(only define if you want to use a different domain from CF default)_","advanced":true},{"name":"CF_DEFAULT_ROUTE_PATH","description":"Global Cloud Foundry default CF route path _(only define if you want to add a route path to your application route)_","advanced":true},{"name":"CF_DEFAULT_PUSH_ARGS","description":"Global additional arguments for cf push command _(only define if you want has a specific need not med by the template)_","advanced":true},{"name":"CF_USER","description":"Global Cloud Foundry username","secret":true,"mandatory":true},{"name":"CF_PASSWORD","description":"Global Cloud Foundry password","secret":true,"mandatory":true},{"name":"CF_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"CF_SCRIPTS_DIR","description":"Directory where Cloud Foundry scripts (manifest, hook scripts) are located","default":".","advanced":true},{"name":"CF_ROLLING_STRATEGY","description":"Use Cloud Foundry native zero-downtime deployment strategy instead of the historical blue-green method _(ignores $CF_XXX_ZERODOWNTIME)_","type":"boolean","default":"false","advanced":true}],"features":[{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","variables":[{"name":"CF_REVIEW_ORG","description":"Cloud Foundry organization for review env _(only define if different from global)_"},{"name":"CF_REVIEW_SPACE","description":"Cloud Foundry space for review env","mandatory":true},{"name":"CF_REVIEW_APP_NAME","description":"The application name for review env (only define to override default)","advanced":true},{"name":"CF_REVIEW_HOST_NAME","description":"The review environment host name _(defaults to $CF_BASE_APP_NAME-$CI_ENVIRONMENT_SLUG)_","advanced":true},{"name":"CF_REVIEW_DOMAIN","description":"The review environment domain","advanced":true},{"name":"CF_REVIEW_ENVIRONMENT_SCHEME","description":"The review environment protocol scheme","default":"https","mandatory":true},{"name":"CF_REVIEW_ENVIRONMENT_DOMAIN","description":"The review environment domain (ex: `noprod-cloudfoundry.domain.com`).\n\nBy default review `environment.url` will be built as `${CF_REVIEW_ENVIRONMENT_SCHEME}://${$CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${CF_REVIEW_ENVIRONMENT_DOMAIN}/${CF_REVIEW_ROUTE_PATH}`","mandatory":true},{"name":"CF_REVIEW_ROUTE_PATH","description":"The review environment route path","advanced":true},{"name":"CF_REVIEW_PUSH_ARGS","description":"The review environment additional cf push arguments","advanced":true},{"name":"CF_REVIEW_DOMAIN_TMP","description":"The review environment domain for the temporary blue-green app","advanced":true},{"name":"CF_REVIEW_ZERODOWNTIME","type":"boolean","description":"Enables zero-downtime deployment on review env","advanced":true},{"name":"CF_REVIEW_URL","type":"url","description":"Cloud Foundry API url for review env (only define to override default)","advanced":true},{"name":"CF_REVIEW_USER","description":"Cloud Foundry API username for review env (only define to override default)","secret":true},{"name":"CF_REVIEW_PASSWORD","description":"Cloud Foundry API password for review env (only define to override default)","secret":true},{"name":"CLEANUP_ALL_REVIEW","description":"Enables a **manual** job to cleanup all review envs at once.\n\nYou may also use it to [schedule](https://docs.gitlab.com/ee/ci/pipelines/schedules.html) cloud resources cleanup. See documentation.","type":"enum","values":["","force","true"]},{"name":"CF_REVIEW_RETIRED_APP_SUFFIX","description":"If set, the app old version is not deleted/overriden but renamed with this suffix","advanced":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","variables":[{"name":"CF_INTEG_ORG","description":"Cloud Foundry organization for integration env _(only define if different from global)_"},{"name":"CF_INTEG_SPACE","description":"Cloud Foundry space for integration env","mandatory":true},{"name":"CF_INTEG_APP_NAME","description":"The application name for integration env (only define to override default)","advanced":true},{"name":"CF_INTEG_HOST_NAME","description":"The integration environment host name _(defaults to $CF_BASE_APP_NAME-integration)_","advanced":true},{"name":"CF_INTEG_DOMAIN","description":"The integration environment domain","advanced":true},{"name":"CF_INTEG_ROUTE_PATH","description":"The integration environment route path","advanced":true},{"name":"CF_INTEG_PUSH_ARGS","description":"The integration environment additional cf push arguments","advanced":true},{"name":"CF_INTEG_DOMAIN_TMP","description":"The integration environment domain for the temporary blue-green app","advanced":true},{"name":"CF_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url including scheme (ex: `https://my-application-integration.noprod-cloudfoundry.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.","mandatory":true},{"name":"CF_INTEG_ZERODOWNTIME","type":"boolean","description":"Enables zero-downtime deployment on integration env","advanced":true},{"name":"CF_INTEG_URL","type":"url","description":"Cloud Foundry API url for integration env (only define to override default)","advanced":true},{"name":"CF_INTEG_USER","description":"Cloud Foundry API username for integration env (only define to override default)","secret":true},{"name":"CF_INTEG_PASSWORD","description":"Cloud Foundry API password for integration env (only define to override default)","secret":true},{"name":"CF_INTEG_RETIRED_APP_SUFFIX","description":"If set, the app old version is not deleted/overriden but renamed with this suffix","advanced":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","variables":[{"name":"CF_STAGING_ORG","description":"Cloud Foundry organization for staging env _(only define if different from global)_"},{"name":"CF_STAGING_SPACE","description":"Cloud Foundry space for staging env","mandatory":true},{"name":"CF_STAGING_APP_NAME","description":"The application name for staging env (only define to override default)","advanced":true},{"name":"CF_STAGING_HOST_NAME","description":"The staging environment host name _(defaults to $CF_BASE_APP_NAME-staging)_","advanced":true},{"name":"CF_STAGING_DOMAIN","description":"The staing environment domain","advanced":true},{"name":"CF_STAGING_ROUTE_PATH","description":"The staging environment route path","advanced":true},{"name":"CF_STAGING_PUSH_ARGS","description":"The staging environment additional cf push arguments","advanced":true},{"name":"CF_STAGING_DOMAIN_TMP","description":"The staging environment domain for the temporary blue-green app","advanced":true},{"name":"CF_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url including scheme (ex: `https://my-application-staging.noprod-cloudfoundry.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.","mandatory":true},{"name":"CF_STAGING_ZERODOWNTIME","type":"boolean","description":"Enables zero-downtime deployment on staging env","advanced":true},{"name":"CF_STAGING_URL","type":"url","description":"Cloud Foundry API url for staging env (only define to override default)","advanced":true},{"name":"CF_STAGING_USER","description":"Cloud Foundry API username for staging env (only define to override default)","secret":true},{"name":"CF_STAGING_PASSWORD","description":"Cloud Foundry API password for staging env (only define to override default)","secret":true},{"name":"CF_STAGING_RETIRED_APP_SUFFIX","description":"If set, the app old version is not deleted/overriden but renamed with this suffix","advanced":true}]},{"id":"prod","name":"Production","description":"The production environment","variables":[{"name":"CF_PROD_ORG","description":"Cloud Foundry organization for production env _(only define if different from global)_"},{"name":"CF_PROD_SPACE","description":"Cloud Foundry space for production env","mandatory":true},{"name":"CF_PROD_APP_NAME","description":"The application name for production env (only define to override default)","advanced":true},{"name":"CF_PROD_HOST_NAME","description":"The production environment host name _(defaults to $CF_BASE_APP_NAME)_","advanced":true},{"name":"CF_PROD_DOMAIN","description":"The production environment domain","advanced":true},{"name":"CF_PROD_ROUTE_PATH","description":"The production environment route path","advanced":true},{"name":"CF_PROD_PUSH_ARGS","description":"The production environment additional cf push arguments","advanced":true},{"name":"CF_PROD_DOMAIN_TMP","description":"The production environment domain for the temporary blue-green app","advanced":true},{"name":"CF_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url including scheme (ex: `https://my-application.cloudfoundry.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.","mandatory":true},{"name":"CF_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"CF_PROD_ZERODOWNTIME","type":"boolean","description":"Enables zero-downtime deployment on production env","default":"true","advanced":true},{"name":"CF_PROD_URL","type":"url","description":"Cloud Foundry API url for production env (only define to override default)","advanced":true},{"name":"CF_PROD_USER","description":"Cloud Foundry API username for production env (only define to override default)","secret":true},{"name":"CF_PROD_PASSWORD","description":"Cloud Foundry API password for production env (only define to override default)","secret":true},{"name":"CF_PROD_RETIRED_APP_SUFFIX","description":"If set, the app old version is not deleted/overriden but renamed with this suffix","advanced":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-cf-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"4.6.2","tags":["4.6.2","4.6.1","4.6.0","4.6","4.5.0","4.5","4.4.0","4.4","4.3.6","4.3.5","4.3.4","4.3.3","4.3.2","4.3.1","4.3.0","4.3","4.2.0","4.2","4.1.0","4.1","4.0.2","4.0.1","4.0.0","4.0","4","3.1.0","3.1","3.0.0","3.0","3","2.1.1","2.1.0","2.1","2.0.1","2.0.0","2.0","2","1.8.1","1.8.0","1.8","1.7.0","1.7","1.6.4","1.6.3","1.6.2","1.6.1","1.6.0","1.5.1","1.5.0","1.4.4","1.4.3","1.4.2","1.4.1","1.4.0","1.3.0","1.2.1","1.2.0","1.1.0","1.0.1","1.0.0","1"],"name":"cloud-foundry","path":"to-be-continuous/cloud-foundry","web_url":"https://gitlab.com/to-be-continuous/cloud-foundry","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26453989/cloud-foundry.png"}},{"name":"Cloud Native Buildpacks","description":"Transform your application source code into images that can run on any cloud with [Cloud Native Buildpacks](https://buildpacks.io/)","template_path":"templates/gitlab-ci-cnb.yml","kind":"package","prefix":"cnb","is_component":true,"variables":[{"name":"CNB_BUILDER_IMAGE","description":"The CNB builder image used to build your application image\n\n_depending on your needs, [choose the most appropriate one](https://paketo.io/docs/concepts/builders/#what-paketo-builders-are-available)_","default":"registry.hub.docker.com/paketobuildpacks/builder:base"},{"name":"CNB_APP_DIR","description":"Absolute root directory in final image","default":"/workspace","advanced":true},{"name":"CNB_SRC_APP_DIR","description":"Relative path to the application source code base directory in your repository","default":".","advanced":true},{"name":"CNB_PLATFORM_API","description":"The CNB [platform API version](https://github.com/buildpacks/spec/blob/main/platform.md#platform-api-version)","default":"0.9","advanced":true},{"name":"CNB_SNAPSHOT_IMAGE","description":"CNB snapshot image","default":"$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"},{"name":"CNB_RELEASE_IMAGE","description":"CNB release image","default":"$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"}],"features":[{"id":"trivy","name":"Trivy","description":"[Trivy](https://aquasecurity.github.io/trivy) vulnerability analysis","disable_with":"CNB_TRIVY_DISABLED","variables":[{"name":"CNB_TRIVY_IMAGE","description":"The docker image used to scan images with Trivy","default":"registry.hub.docker.com/aquasec/trivy:latest","advanced":true},{"name":"CNB_TRIVY_ARGS","description":"Additional [`trivy image` options](https://aquasecurity.github.io/trivy/latest/docs/references/configuration/cli/trivy_image/#options)","default":"--ignore-unfixed --vuln-type os --exit-on-eol 1","advanced":true}]},{"id":"publish","name":"Publish","description":"Promotes the snapshot image as the release image using [skopeo](https://github.com/containers/skopeo)","variables":[{"name":"CNB_SKOPEO_IMAGE","description":"The docker image used to publish docker image with Skopeo","default":"quay.io/skopeo/stable:latest"},{"name":"CNB_PUBLISH_ARGS","description":"Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)","advanced":true},{"name":"CNB_PROD_PUBLISH_STRATEGY","description":"Defines the publish to production strategy.","type":"enum","values":["none","manual","auto"],"default":"manual"}]}],"extension_id":null,"project":{"tag":"3.0.0","tags":["3.0.0","3.0","3","2.4.2","2.4.1","2.4.0","2.4","2.3.0","2.3","2.2.1","2.2.0","2.2","2.1.2","2.1.1","2.1.0","2.1","2.0.0","2.0","2","1.0.3","1.0.2","1.0.1","1.0.0","1.0","1"],"name":"cnb","path":"to-be-continuous/cnb","web_url":"https://gitlab.com/to-be-continuous/cnb","avatar":"https://gitlab.com/uploads/-/system/project/avatar/38368181/logo.png"}},{"name":"Cypress","description":"Run your automated (web) tests with [Cypress](https://www.cypress.io/)","template_path":"templates/gitlab-ci-cypress.yml","kind":"acceptance","prefix":"cypress","is_component":true,"variables":[{"name":"CYPRESS_IMAGE","description":"The Docker image used to run Cypress (use [included images](https://github.com/cypress-io/cypress-docker-images/tree/master/included) only).","default":"registry.hub.docker.com/cypress/included:13.13.3"},{"name":"CYPRESS_PROJECT_DIR","description":"The Cypress project directory (containing `cypress.config.js` or `cypress.config.ts`)","default":"."},{"name":"CYPRESS_EXTRA_ARGS","description":"Cypress extra [run options](https://docs.cypress.io/guides/guides/command-line.html#cypress-run) (to select a different browser, configuration or spec files for e.g.)","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable Cypress tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"3.8.0","tags":["3.8.0","3.8","3.7.0","3.7","3.6.1","3.6.0","3.6","3.5.0","3.5","3.4.0","3.4","3.3.1","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.1.0","2.1","2.0.1","2.0.0","2","1.2.0","1.1.0","1.0.0"],"name":"cypress","path":"to-be-continuous/cypress","web_url":"https://gitlab.com/to-be-continuous/cypress","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454216/logo.png"}},{"name":"dbt","description":"Continuously integrate and deploy your data with [dbt](https://www.getdbt.com/)","template_path":"templates/gitlab-ci-dbt.yml","kind":"build","prefix":"dbt","is_component":true,"variables":[{"name":"DBT_IMAGE","description":"The Docker image used to run dbt","default":"ghcr.io/dbt-labs/dbt-core:latest"},{"name":"DBT_PROJECT_DIR","description":"The [dbt_project.yml](https://docs.getdbt.com/reference/dbt_project.yml) dir","default":"."},{"name":"DBT_PROFILES_DIR","description":"The dbt [profile](https://docs.getdbt.com/dbt-cli/configure-your-profile) location","default":"."},{"name":"DBT_ADAPTER","description":"The dbt [adapter](https://docs.getdbt.com/docs/available-adapters) to use ","mandatory":true},{"name":"DBT_TARGET","description":"The dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) to use "},{"name":"DBT_BUILD_ARGS","description":"Arguments used by [dbt cli](https://docs.getdbt.com/reference/global-configs#command-line-flags) ","advanced":true}],"features":[{"id":"dbt-sqlfluff-lint","name":"SQLFluff lint","description":"Lint SQL from dbt project","enable_with":"DBT_SQLFLUFF_ENABLED","variables":[{"name":"DBT_SQLFLUFF_LINT_ARGS","description":"Lint [options and arguments](https://docs.sqlfluff.com/en/stable/reference/cli.html#sqlfluff-lint)","advanced":true},{"name":"SQLFLUFF_WORKING_DIR","description":"Sqlfluff working directory, scope of configuration and sql files used","default":".","advanced":true}]},{"id":"dbt-deploy","name":"dbt deploy","description":"execute generated SQL from models on target","enable_with":"DBT_DEPLOY_ENABLED"},{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","variables":[{"name":"DBT_REVIEW_TARGET","description":"dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `review` env","mandatory":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","variables":[{"name":"DBT_INTEG_TARGET","description":" dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `integration` env","mandatory":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","variables":[{"name":"DBT_STAGING_TARGET","description":"dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `staging` env","mandatory":true}]},{"id":"prod","name":"Production","description":"The production environment","variables":[{"name":"DBT_PROD_TARGET","description":"dbt [target](https://docs.getdbt.com/reference/dbt-jinja-functions/target) for `production` env ","mandatory":true},{"name":"DBT_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"}]}],"variants":[{"id":"pages","name":"GitLab Pages","description":"Adds a job to publish the generated site to GitLab pages","template_path":"templates/gitlab-ci-dbt-pages.yml"},{"id":"gcp-auth-provider","name":"Google Cloud","description":"Retrieves an [OAuth access token](https://developers.google.com/identity/protocols/oauth2) for [dbt BigQuery setup](https://docs.getdbt.com/reference/warehouse-setups/bigquery-setup)","template_path":"templates/gitlab-ci-dbt-gcp.yml","variables":[{"name":"TBC_GCP_PROVIDER_IMAGE","description":"The [GCP Auth Provider](https://gitlab.com/to-be-continuous/tools/gcp-auth-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/gcp-auth-provider:latest","advanced":true},{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Default Service Account to which impersonate with OpenID Connect authentication"},{"name":"GCP_OIDC_PROVIDER","description":"Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"},{"name":"GCP_REVIEW_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `review` environment","advanced":true},{"name":"GCP_REVIEW_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment","advanced":true},{"name":"GCP_INTEG_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `integration` environment","advanced":true},{"name":"GCP_INTEG_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment","advanced":true},{"name":"GCP_STAGING_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `staging` environment","advanced":true},{"name":"GCP_STAGING_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment","advanced":true},{"name":"GCP_PROD_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `production` environment","advanced":true},{"name":"GCP_PROD_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment","advanced":true}]}],"extension_id":null,"project":{"tag":"4.1.0","tags":["4.1.0","4.1","4.0.0","4.0","4","3.3.0","3.3","3.2.3","3.2.2","3.2.1","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.1","3.0.0","3.0","3","2.1.1","2.1.0","2.1","2.0.0","2.0","2","1.3.0","1.3","1.2.0","1.2","1.1.1","1.1.0","1.1","1.0.1","1.0.0","1.0","1"],"name":"dbt","path":"to-be-continuous/dbt","web_url":"https://gitlab.com/to-be-continuous/dbt","avatar":"https://gitlab.com/uploads/-/system/project/avatar/37018181/logo.png"}},{"name":"DefectDojo","description":"Import security reports into [DefectDojo](https://www.defectdojo.org/)","template_path":"templates/gitlab-ci-defectdojo.yml","kind":"analyse","prefix":"defectdojo","is_component":true,"variables":[{"name":"DEFECTDOJO_BASE_IMAGE","description":"The Docker image used to run import","default":"registry.hub.docker.com/library/node:alpine3.11"},{"name":"DEFECTDOJO_SERVER_URL","description":"URL of DefectDojo server","mandatory":true},{"name":"DEFECTDOJO_API_KEY","description":"Your DefectDojo API v2 key - must be saved as a masked CI/CD variable","secret":true,"mandatory":true},{"name":"DEFECTDOJO_DIR","description":"DefectDojo working directory","default":".","advanced":true},{"name":"DEFECTDOJO_NOPROD_ENABLED","description":"Determines whether security reports produced in non-production branches are uploaded to DefectDojo","type":"boolean"},{"name":"DEFECTDOJO_TIMEZONE","description":"Time zone used for naming imports in DefectDojo","default":"Europe/Paris","advanced":true},{"name":"DEFECTDOJO_SMTP_SERVER","description":"name:port of SMTP server used for notifications - if this value is set, DefectDojo will send an e-mail notification in case of new vulnerabilities","advanced":true},{"name":"DEFECTDOJO_NOTIFICATION_SEVERITIES","description":"List of severities for which you want to be notified - DEFECTDOJO_SMTP_SERVER must be defined if you want to be notified","default":"Critical,High","advanced":true},{"name":"DEFECTDOJO_BANDIT_REPORTS","description":"path to Bandit JSON reports","default":"bandit*.json reports/py-bandit.bandit.json","advanced":true},{"name":"DEFECTDOJO_DC_REPORTS","description":"Path to Dependency Check reports","default":"dependency-check*.xml","advanced":true},{"name":"DEFECTDOJO_DC_GRADLE_REPORTS","description":"Path to Dependency Check reports from Gradle template","default":"dependency-check*.xml","advanced":true},{"name":"DEFECTDOJO_GITLEAKS_REPORTS","description":"Path to Gitleaks reports","default":"gitleaks/gitleaks-report.json reports/gitleaks.native.json","advanced":true},{"name":"DEFECTDOJO_HADOLINT_REPORTS","description":"Path to Hadolint reports","default":"hadolint-json-*.json reports/docker-hadolint-*.native.json","advanced":true},{"name":"DEFECTDOJO_MOBSF_REPORTS","description":"Path to MobSF reports","default":"mobsf*.json","advanced":true},{"name":"DEFECTDOJO_NODEJSSCAN_REPORTS","description":"Path to NodeJSScan reports","default":"nodejsscan-report-sarif.json","advanced":true},{"name":"DEFECTDOJO_NPMAUDIT_REPORTS","description":"Path to NPMAudit reports","default":"npm-audit*.json","advanced":true},{"name":"DEFECTDOJO_TESTSSL_REPORTS","description":"Path to TestSSL reports","default":"reports/testssl.native.csv","advanced":true},{"name":"DEFECTDOJO_TRIVY_REPORTS","description":"Path to Trivy reports","default":"trivy/*.json trivy-*.json reports/docker-trivy-*.native.json reports/py-trivy.trivy.json","advanced":true},{"name":"DEFECTDOJO_ZAP_REPORTS","description":"Path to Zap reports","default":"reports/zap.native.xml","advanced":true},{"name":"ZAP_TPL_PROJECT","description":"Path to Zap template","advanced":true},{"name":"DEFECTDOJO_SEMGREP_REPORTS","description":"Path to Semgrep reports","default":"reports/semgrep.native.json","advanced":true},{"name":"SEMGREP_TEMPLATE","description":"Path to Semgrep template","advanced":true},{"name":"DEFECTDOJO_SONARQUBE_SINCELEAKPERIOD","description":"Determines if delta analysis is activated for SonarQube export","type":"boolean","advanced":true},{"name":"DEFECTDOJO_SONARQUBE_NOSECURITYHOTSPOT","description":"Set this flag to true if SonarQube version does not support security hotspots (v < 7.3)","type":"boolean","default":"true","advanced":true},{"name":"DEFECTDOJO_SONARQUBE_ALLBUGS","description":"In SonarQube, determines if all bugs are exported (true) or only vulnerabilities (false)","type":"boolean","advanced":true}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-defectdojo-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"2.6.5","tags":["2.6.5","2.6.4","2.6.3","2.6.2","2.6.1","2.6.0","2.6","2.5.1","2.5.0","2.5","2.4.1","2.4.0","2.4","2.3.2","2.3.1","2.3.0","2.3","2.2.0","2.2","2.1.1","2.1.0","2.1","2.0.7","2.0.6","2.0.5","2.0.4","2.0.3","2.0.2","2.0.1","2.0.0","2.0","2","1.2.0","1.2","1.1.1","1.1.0","1.1","1.0.4","1.0.3","1.0.2","1.0.1","1.0.0","1"],"name":"defectdojo","path":"to-be-continuous/defectdojo","web_url":"https://gitlab.com/to-be-continuous/defectdojo","avatar":"https://gitlab.com/uploads/-/system/project/avatar/31516889/logo.png"}},{"name":"Dependency Track","description":"Identify and reduce risk in your software supply chain with [Dependency Track](https://dependencytrack.org/)","template_path":"templates/gitlab-ci-dependency-track.yml","kind":"analyse","prefix":"deptrack","job_prefix":"dependency-track","is_component":true,"variables":[{"name":"DEPTRACK_SBOM_SCANNER_IMAGE","description":"The container image with [Dependency Track SBOM Scanner](https://gitlab.com/to-be-continuous/tools/dt-sbom-scanner) tool","default":"registry.gitlab.com/to-be-continuous/tools/dt-sbom-scanner:latest","advanced":true},{"name":"DEPTRACK_BASE_API_URL","description":"Dependency Track server base API url (includes `/api`)","mandatory":true,"type":"url"},{"name":"DEPTRACK_API_KEY","description":"Dependency Track API key","secret":true},{"name":"DEPTRACK_PROJECT_PATH","description":"Dependency Track target project path to publish SBOM files to","default":"$CI_PROJECT_NAMESPACE//$CI_PROJECT_PATH-{file_prefix}@$CI_COMMIT_REF_NAME"},{"name":"DEPTRACK_PATH_SEPARATOR","description":"Separator to use in project path","default":"//","advanced":true},{"name":"DEPTRACK_MERGE","description":"Merge all SBOM files into one","type":"boolean","default":"false"},{"name":"DEPTRACK_MERGE_OUTPUT","description":"Output merged SBOM file (only used with merge enabled) - _for debugging purpose_","advanced":true,"default":"reports/deptrack-merged.cyclonedx.json"},{"name":"DEPTRACK_PURL_MAX_LEN","description":"PURLs max length (`-1`: auto, `0`: no trim, `>0`: trim to size - default: `-1`)","type":"number","advanced":true,"default":"-1"},{"name":"DEPTRACK_SBOM_PATTERNS","description":"SBOM file patterns to publish (supports glob patterns)","default":"**/*.cyclonedx.json **/*.cyclonedx.xml","advanced":true},{"name":"DEPTRACK_SHOW_FINDINGS","description":"Wait for analysis and display found vulnerabilities in logs","type":"boolean","default":"false"},{"name":"DEPTRACK_RISK_SCORE_THRESHOLD","description":"Fail the job if risk score threshold is exceeded (`<0`: disabled - default: `-1`)","type":"number","default":"-1"}],"features":[{"id":"quality-gate","name":"Quality Gate","description":"Enable a job at acceptance stage which will block the pipeline when failing","enable_with":"DEPTRACK_QUALITY_GATE_ENABLED","variables":[{"name":"DEPTRACK_QUALITY_GATE_BASE_API_URL","description":"Override Dependency Track server base API url (includes `/api`) to use for acceptance stage","type":"url"},{"name":"DEPTRACK_QUALITY_GATE_API_KEY","description":"Override Dependency Track API key to use for acceptance stage","secret":true},{"name":"DEPTRACK_QUALITY_GATE_PROJECT_PATH","description":"Override Dependency Track target project path to publish SBOM files to during acceptance stage"},{"name":"DEPTRACK_QUALITY_GATE_MERGE","description":"Merge all SBOM files into one during acceptance stage","advanced":true},{"name":"DEPTRACK_QUALITY_GATE_SHOW_FINDINGS","description":"Wait for analysis and display found vulnerabilities in logs during acceptance stage","advanced":true},{"name":"DEPTRACK_QUALITY_GATE_RISK_SCORE_THRESHOLD","description":"Fail the acceptance job if risk score threshold is exceeded (`<0`: disabled - default: `-1`)","advanced":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-dependency-track-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"1.5.1","tags":["1.5.1","1.5.0","1.5","1.4.0","1.4","1.3.0","1.3","1.2.0","1.2","1.1.0","1.1","1.0.0","1.0","1"],"name":"dependency-track","path":"to-be-continuous/dependency-track","web_url":"https://gitlab.com/to-be-continuous/dependency-track","avatar":"https://gitlab.com/uploads/-/system/project/avatar/56360582/dependency-track.png"}},{"name":"Docker Compose","description":"Deploy your application with [Docker Compose](https://docs.docker.com/compose/)","template_path":"templates/gitlab-ci-docker-compose.yml","kind":"hosting","prefix":"dcmp","job_prefix":"compose","is_component":true,"variables":[{"name":"DCMP_IMAGE","description":"The Docker image used to run Docker Compose CLI commands - **set the version required by your Docker Compose cluster**","default":"registry.hub.docker.com/library/docker:latest"},{"name":"DCMP_CMD","description":"The docker compose or stack command (empty means _auto_)","values":["","docker compose","docker-compose","docker stack"],"advanced":true},{"name":"DCMP_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"DCMP_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.dcmp.acme.com`)_"},{"name":"DCMP_SCRIPTS_DIR","description":"Directory where Compose files, dotenv files and hook scripts are located","default":".","advanced":true},{"name":"DCMP_UP_OPTS","description":"[`compose up` options](https://docs.docker.com/reference/cli/docker/compose/up/#options) (only when using Docker Compose)","default":"--no-build --remove-orphans --wait --wait-timeout 180"},{"name":"DCMP_DOWN_OPTS","description":"[`compose down` options](https://docs.docker.com/reference/cli/docker/compose/down/#options) (only when using Docker Compose)","default":"--volumes --remove-orphans --rmi all"},{"name":"DCMP_STACK_DEPLOY_OPTS","description":"[`stack deploy` options](https://docs.docker.com/reference/cli/docker/stack/deploy/) (only when using Docker Stack)","default":"--prune"},{"name":"DCMP_SSH_PRIVATE_KEY","description":"Default SSH key to use when connecting to Docker hosts over SSH (can be overridden per env)","secret":true},{"name":"DCMP_SSH_KNOWN_HOSTS","description":"SSH `known_hosts` (file or text variable)"}],"features":[{"id":"config","name":"Compose Config","description":"Runs [`compose config`](https://docs.docker.com/reference/cli/docker/compose/config/) to detect errors in your Compose file(s)","disable_with":"DCMP_CONFIG_DISABLED","variables":[{"name":"DCMP_CONFIG_OPTS","description":"[`compose config` options](https://docs.docker.com/reference/cli/docker/compose/config/#options)","default":"--quiet","advanced":true},{"name":"DCMP_STACK_CONFIG_OPTS","description":"[`stack config` options](https://docs.docker.com/reference/cli/docker/stack/config/)","advanced":true},{"name":"DCMP_STACK_CONFIG_SILENT","description":"Silences standard output of `stack config` command","type":"boolean","default":"true","advanced":true}]},{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","variables":[{"name":"DCMP_REVIEW_DOCKER_HOST","description":"Docker Host for `review` env (ex: `ssh://docker@docker-host-for-review:2375`)","mandatory":true},{"name":"DCMP_REVIEW_SSH_PRIVATE_KEY","description":"`review` env specific SSH key to use when connecting to Docker Host over SSH","secret":true},{"name":"DCMP_REVIEW_APP_NAME","description":"The application name for `review` env (only define to override default)","advanced":true},{"name":"DCMP_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"DCMP_REVIEW_ENVIRONMENT_URL","type":"url","description":"The `review` environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","variables":[{"name":"DCMP_INTEG_DOCKER_HOST","description":"Docker Host for `integration` env (ex: `ssh://docker@docker-host-for-integ:2375`)","mandatory":true},{"name":"DCMP_INTEG_SSH_PRIVATE_KEY","description":"`integration` env specific SSH key to use when connecting to Docker Host over SSH","secret":true},{"name":"DCMP_INTEG_APP_NAME","description":"The application name for `integration` env (only define to override default)","advanced":true},{"name":"DCMP_INTEG_ENVIRONMENT_URL","type":"url","description":"The `integration` environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","variables":[{"name":"DCMP_STAGING_DOCKER_HOST","description":"Docker Host for `staging` env (ex: `ssh://docker@docker-host-for-staging:2375`)","mandatory":true},{"name":"DCMP_STAGING_SSH_PRIVATE_KEY","description":"`staging` env specific SSH key to use when connecting to Docker Host over SSH","secret":true},{"name":"DCMP_STAGING_APP_NAME","description":"The application name for `staging` env (only define to override default)","advanced":true},{"name":"DCMP_STAGING_ENVIRONMENT_URL","type":"url","description":"The `staging` environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true}]},{"id":"prod","name":"Production","description":"The production environment","variables":[{"name":"DCMP_PROD_DOCKER_HOST","description":"Docker Host for `production` env (ex: `ssh://docker@docker-host-for-prod:2375`)","mandatory":true},{"name":"DCMP_PROD_SSH_PRIVATE_KEY","description":"`production` env specific SSH key to use when connecting to Docker Host over SSH","secret":true},{"name":"DCMP_PROD_APP_NAME","description":"The application name for `production` env (only define to override default)","advanced":true},{"name":"DCMP_PROD_ENVIRONMENT_URL","type":"url","description":"The `production` environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"DCMP_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to `production` strategy.","type":"enum","values":["manual","auto"],"default":"manual"}]}],"extension_id":null,"project":{"tag":"1.0.2","tags":["1.0.2","1.0.1","1.0.0","1.0","1"],"name":"docker-compose","path":"to-be-continuous/docker-compose","web_url":"https://gitlab.com/to-be-continuous/docker-compose","avatar":"https://gitlab.com/uploads/-/system/project/avatar/55380145/logo.png"}},{"name":"Docker","description":"Build, check and inspect your containers with [Docker](https://www.docker.com/)","template_path":"templates/gitlab-ci-docker.yml","kind":"package","prefix":"docker","is_component":true,"variables":[{"name":"DOCKER_BUILD_TOOL","type":"enum","values":["kaniko","buildah","dind"],"description":"The build tool to use for building container image","default":"kaniko"},{"name":"DOCKER_KANIKO_IMAGE","description":"The image used to run kaniko\n\n_for kaniko build only_","default":"gcr.io/kaniko-project/executor:debug"},{"name":"DOCKER_BUILDAH_IMAGE","description":"The image used to run buildah\n\n_for buildah build only_","default":"quay.io/buildah/stable:latest"},{"name":"DOCKER_IMAGE","description":"The image used to run the docker client\n\n_for Docker-in-Docker(dind) build only_","default":"registry.hub.docker.com/library/docker:latest"},{"name":"DOCKER_DIND_IMAGE","description":"The image used to run the Docker daemon\n\n_for Docker-in-Docker(dind) build only_","default":"registry.hub.docker.com/library/docker:dind"},{"name":"DOCKER_SKOPEO_IMAGE","description":"The image used to publish docker image with Skopeo","default":"quay.io/skopeo/stable:latest"},{"name":"DOCKER_FILE","description":"The path to your `Dockerfile`","default":"Dockerfile"},{"name":"DOCKER_CONTEXT_PATH","description":"The Docker [context path](https://docs.docker.com/engine/reference/commandline/build/#build-with-path) (working directory) - _only set if you want a context path different from the Dockerfile location_","advanced":true},{"name":"DOCKER_CONFIG_FILE","description":"Path to the [Docker configuration file](https://docs.docker.com/engine/reference/commandline/cli/#sample-configuration-file) (JSON)","default":".docker/config.json","advanced":true},{"name":"DOCKER_SNAPSHOT_IMAGE","description":"Docker snapshot image","default":"$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"},{"name":"DOCKER_RELEASE_IMAGE","description":"Docker release image","default":"$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"},{"name":"DOCKER_RELEASE_EXTRA_TAGS_PATTERN","description":"Defines the image tag pattern that `$DOCKER_RELEASE_IMAGE` should match to push extra tags (supports capturing groups)\n\nDefaults to [SemVer](https://semver.org/) pattern.","default":"^v?(?P<major>[0-9]+)\\.(?P<minor>[0-9]+)\\.(?P<patch>[0-9]+)(?P<suffix>(?P<prerelease>-[0-9A-Za-z-\\.]+)?(?P<build>\\+[0-9A-Za-z-\\.]+)?)$","advanced":true},{"name":"DOCKER_RELEASE_EXTRA_TAGS","description":"Defines extra tags to publish the _release_ image\n\nSupports capturing group references from `$DOCKER_RELEASE_EXTRA_TAGS_PATTERN` (ex: `latest \\g<major>.\\g<minor> \\g<major>`)","advanced":true},{"name":"DOCKER_BUILD_ARGS","description":"Additional docker/kaniko/buildah build arguments.\n\n_If values contain spaces, ensure any required quote are correctly escaped when needed (not supported for Kaniko)_"},{"name":"DOCKER_METADATA","description":"Additional metadata to set as labels.\n\nIf values contain spaces, ensure any required quote are correctly escaped when needed (not supported for Kaniko)_","default":"--label \"org.opencontainers.image.url=${CI_PROJECT_URL}\" --label \"org.opencontainers.image.source=${CI_PROJECT_URL}\" --label \"org.opencontainers.image.title=${CI_PROJECT_PATH}\" --label \"org.opencontainers.image.ref.name=${CI_COMMIT_REF_NAME}\" --label \"org.opencontainers.image.revision=${CI_COMMIT_SHA}\" --label \"org.opencontainers.image.created=${CI_JOB_STARTED_AT}\"","advanced":true},{"name":"DOCKER_PUBLISH_ARGS","description":"Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)"},{"name":"DOCKER_PROD_PUBLISH_STRATEGY","description":"Defines the publish to production strategy.","type":"enum","values":["none","manual","auto"],"default":"manual"},{"name":"DOCKER_SEMREL_RELEASE_DISABLED","description":"Disable integration with the [semantic release template](https://gitlab.com/to-be-continuous/semantic-release/)","type":"boolean"},{"name":"DOCKER_REGISTRY_MIRROR","description":"URL of a Docker registry mirror to use instead of default `https://index.docker.io`\n\n_Used by `kaniko` and `dind` builds only_"},{"name":"CONTAINER_REGISTRIES_CONFIG_FILE","description":"The [registries.conf](https://www.redhat.com/sysadmin/manage-container-registries) configuration to be used\n\n_Used by the `buildah` build only_","advanced":true},{"name":"KANIKO_SNAPSHOT_IMAGE_CACHE","description":"Snapshot image repository that will be used to store cached layers (leave empty to use default: snapshot image repository + `/cache`)\n\n_Used by the `kaniko` build only_","advanced":true},{"name":"DOCKER_BUILD_CACHE_DISABLED","description":"Set to `true` to disable the build cache.","type":"boolean","advanced":true},{"name":"DOCKER_PUSH_ARGS","description":"Additional docker/buildah `push` arguments (executed right after `build`).\n\nEx: `--compression-format zstd --compression-level 20`","advanced":true}],"features":[{"id":"hadolint","name":"Hadolint","description":"This job performs a [Lint](https://github.com/hadolint/hadolint) on your `Dockerfile`.","disable_with":"DOCKER_HADOLINT_DISABLED","variables":[{"name":"DOCKER_HADOLINT_IMAGE","description":"The docker image to lint your Dockerfile with Hadolint","default":"registry.hub.docker.com/hadolint/hadolint:latest-alpine"},{"name":"DOCKER_HADOLINT_ARGS","description":"Additional `hadolint` arguments","advanced":true}]},{"id":"healthcheck","name":"Health Check","description":"[Health Check](https://docs.docker.com/engine/reference/builder/#healthcheck) image analysis","disable_with":"DOCKER_HEALTHCHECK_DISABLED","variables":[{"name":"DOCKER_HEALTHCHECK_TIMEOUT","type":"number","description":"When testing an image, how long (in seconds) wait for the HealthCheck status","default":"60","advanced":true},{"name":"DOCKER_HEALTHCHECK_OPTIONS","description":"Docker options for health check such as port mapping, environment...","advanced":true},{"name":"DOCKER_HEALTHCHECK_CONTAINER_ARGS","description":"Arguments sent to the running container for health check","advanced":true}]},{"id":"trivy","name":"Trivy","description":"[Trivy](https://aquasecurity.github.io/trivy) vulnerability analysis","disable_with":"DOCKER_TRIVY_DISABLED","variables":[{"name":"DOCKER_TRIVY_IMAGE","description":"The docker image used to scan images with Trivy","default":"registry.hub.docker.com/aquasec/trivy:latest","advanced":true},{"name":"DOCKER_TRIVY_ARGS","description":"Additional [`trivy image` options](https://aquasecurity.github.io/trivy/latest/docs/references/configuration/cli/trivy_image/#options)","default":"--ignore-unfixed --pkg-types os --exit-on-eol 1 --detection-priority comprehensive","advanced":true}]},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)","disable_with":"DOCKER_SBOM_DISABLED","variables":[{"name":"DOCKER_SBOM_IMAGE","default":"registry.hub.docker.com/anchore/syft:debug"},{"name":"DOCKER_SBOM_OPTS","description":"Options for syft used for SBOM analysis","default":"--override-default-catalogers rpm-db-cataloger,alpm-db-cataloger,apk-db-cataloger,dpkg-db-cataloger,portage-cataloger","advanced":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-docker-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]},{"id":"gcp","name":"Google Cloud","description":"Retrieves a registry authentication for the Google Cloud's [Artifact Registry](https://cloud.google.com/artifact-registry)","template_path":"templates/gitlab-ci-docker-gcp.yml","variables":[{"name":"TBC_GCP_PROVIDER_IMAGE","description":"The [GCP Auth Provider](https://gitlab.com/to-be-continuous/tools/gcp-auth-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/gcp-auth-provider:latest","advanced":true},{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Default Service Account to which impersonate with OpenID Connect authentication"},{"name":"GCP_OIDC_PROVIDER","description":"Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"},{"name":"GCP_SNAPSHOT_OIDC_ACCOUNT","description":"Service Account to use to push the snapshot image _(only define to override default)_","advanced":true},{"name":"GCP_SNAPSHOT_OIDC_PROVIDER","description":"Workload Identity Provider to push the snapshot image _(only define to override default)_","advanced":true},{"name":"GCP_RELEASE_OIDC_ACCOUNT","description":"Service Account to use to push the release image _(only define to override default)_","advanced":true},{"name":"GCP_RELEASE_OIDC_PROVIDER","description":"Workload Identity Provider to push the release image _(only define to override default)_","advanced":true}]},{"id":"ecr","name":"Amazon ECR","description":"Retrieves a registry authentication for the Amazon's [Elastic Container Registry](https://docs.aws.amazon.com/ecr/)","template_path":"templates/gitlab-ci-docker-ecr.yml","variables":[{"name":"TBC_AWS_PROVIDER_IMAGE","description":"The [AWS Auth Provider](https://gitlab.com/to-be-continuous/tools/aws-auth-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/aws-auth-provider:latest","advanced":true},{"name":"AWS_REGION","description":"Default region (where the ECR registry is located)"},{"name":"AWS_SNAPSHOT_REGION","description":"Region of the ECR registry for the snapshot image _(only define to override default)_","advanced":true},{"name":"AWS_RELEASE_REGION","description":"Region of the ECR registry for the release image _(only define to override default)_","advanced":true},{"name":"AWS_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"AWS_OIDC_ROLE_ARN","description":"Default IAM Role ARN associated with GitLab _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_"},{"name":"AWS_SNAPSHOT_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab for the snapshot image _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/) and if different from default)_","advanced":true},{"name":"AWS_RELEASE_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab for the release image _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/) and if different from default)_","advanced":true},{"name":"AWS_ACCESS_KEY_ID","description":"Default access key ID (only required for basic authentication)","secret":true,"advanced":true},{"name":"AWS_SECRET_ACCESS_KEY","description":"Default secret access key (only required for basic authentication)","secret":true,"advanced":true},{"name":"AWS_SNAPSHOT_ACCESS_KEY_ID","description":"Access key ID for the snapshot image (only required for basic authentication and if different from default)","secret":true,"advanced":true},{"name":"AWS_SNAPSHOT_SECRET_ACCESS_KEY","description":"Secret access key for the snapshot image (only required for basic authentication and if different from default)","secret":true,"advanced":true},{"name":"AWS_RELEASE_ACCESS_KEY_ID","description":"Access key ID for the release image (only required for basic authentication and if different from default)","secret":true,"advanced":true},{"name":"AWS_RELEASE_SECRET_ACCESS_KEY","description":"Secret access key for the release image (only required for basic authentication and if different from default)","secret":true,"advanced":true}]}],"extension_id":null,"project":{"tag":"6.0.0","tags":["6.0.0","6.0","6","5.14.1","5.14.0","5.14","5.13.3","5.13.2","5.13.1","5.13.0","5.13","5.12.1","5.12.0","5.12","5.11.1","5.11.0","5.11","5.10.3","5.10.2","5.10.1","5.10.0","5.10","5.9.1","5.9.0","5.9","5.8.2","5.8.1","5.8.0","5.8","5.7.1","5.7.0","5.7","5.6.1","5.6.0","5.6","5.5.6","5.5.5","5.5.4","5.5.3","5.5.2","5.5.1","5.5.0","5.5","5.4.1","5.4.0","5.4","5.3.1","5.3.0","5.3","5.2.2","5.2.1","5.2.0","5.2","5.1.0","5.1","5.0.3","5.0.2","5.0.1","5.0.0","5.0","5","4.0.0","4.0","4","3.6.0","3.6","3.5.3","3.5.2","3.5.1","3.5.0","3.5","3.4.0","3.4","3.3.0","3.3","3.2.2","3.2.1","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.7.1","2.7.0","2.7","2.6.0","2.6","2.5.0","2.5","2.4.0","2.4","2.3.3","2.3.2","2.3.1","2.3.0","2.3","2"],"name":"docker","path":"to-be-continuous/docker","web_url":"https://gitlab.com/to-be-continuous/docker","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26450930/logo.png"}},{"name":"Google Cloud","description":"Deploy your application to the [Google Cloud](https://cloud.google.com/) platform","template_path":"templates/gitlab-ci-gcloud.yml","kind":"hosting","prefix":"gcp","is_component":true,"variables":[{"name":"GCP_CLI_IMAGE","description":"The Docker image used to run Google Cloud CLI commands","default":"gcr.io/google.com/cloudsdktool/cloud-sdk:latest"},{"name":"GCP_KEY_FILE","description":"Global Service Account key file","secret":true,"mandatory":true},{"name":"GCP_WORKLOAD_IDENTITY_PROVIDER","description":"Default [Workload Identity Provider](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) associated with GitLab to authenticate\n\n(has format `projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID`)","advanced":true},{"name":"GCP_SERVICE_ACCOUNT","description":"Default Service Account to which impersonate with WIF authentication","advanced":true},{"name":"GCP_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"GCP_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.gcloud.acme.com`)_"},{"name":"GCP_SCRIPTS_DIR","description":"Directory where Google Cloud scripts (deploy & cleanup) are located","default":".","advanced":true}],"features":[{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","variables":[{"name":"GCP_REVIEW_PROJECT","description":"Google Cloud project ID for review env","mandatory":true},{"name":"GCP_REVIEW_APP_NAME","description":"The application name for review env (only define to override default)","advanced":true},{"name":"GCP_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"GCP_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"GCP_REVIEW_KEY_FILE","description":"Service Account key file to authenticate on review env (only define to override default)","secret":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","variables":[{"name":"GCP_INTEG_PROJECT","description":"Google Cloud project ID for integration env","mandatory":true},{"name":"GCP_INTEG_APP_NAME","description":"The application name for integration env (only define to override default)","advanced":true},{"name":"GCP_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"GCP_INTEG_KEY_FILE","description":"Service Account key file to authenticate on integration env (only define to override default)","secret":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","variables":[{"name":"GCP_STAGING_PROJECT","description":"Google Cloud project ID for staging env","mandatory":true},{"name":"GCP_STAGING_APP_NAME","description":"The application name for staging env (only define to override default)","advanced":true},{"name":"GCP_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"GCP_STAGING_KEY_FILE","description":"Service Account key file to authenticate on staging env (only define to override default)","secret":true}]},{"id":"prod","name":"Production","description":"The production environment","variables":[{"name":"GCP_PROD_PROJECT","description":"Google Cloud project ID for production env","mandatory":true},{"name":"GCP_PROD_APP_NAME","description":"The application name for production env (only define to override default)","advanced":true},{"name":"GCP_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"GCP_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"GCP_PROD_KEY_FILE","description":"Service Account key file to authenticate on production env (only define to override default)","secret":true}]}],"variants":[{"id":"oidc","name":"OpenID Connect","description":"Enables [federated authentication using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)","template_path":"templates/gitlab-ci-gcloud-oidc.yml","variables":[{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"GCP_OIDC_PROVIDER","description":"Global Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Global Service Account to which impersonate with OpenID Connect authentication","advanced":true},{"name":"GCP_REVIEW_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment\n\n_(only define to override default)_","advanced":true},{"name":"GCP_REVIEW_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `review` environment","advanced":true},{"name":"GCP_INTEG_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment\n\n_(only define to override default)_","advanced":true},{"name":"GCP_INTEG_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `integration` environment","advanced":true},{"name":"GCP_STAGING_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment\n\n_(only define to override default)_","advanced":true},{"name":"GCP_STAGING_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `staging` environment","advanced":true},{"name":"GCP_PROD_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment\n\n_(only define to override default)_","advanced":true},{"name":"GCP_PROD_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `production` environment","advanced":true}]},{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-gcloud-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"5.2.3","tags":["5.2.3","5.2.2","5.2.1","5.2.0","5.2","5.1.0","5.1","5.0.2","5.0.1","5.0.0","5.0","5","4.1.0","4.1","4.0.0","4.0","4","3.2.0","3.2","3.1.0","3.1","3.0.0","3.0","3","2.3.2","2.3.1","2.3.0","2.3","2.2.0","2.2","2.1.1","2.1.0","2.1","2.0.0","2.0","2","1.8.0","1.8","1.7.0","1.7","1.6.2","1.6.1","1.6.0","1.5.2","1.5.1","1.5.0","1.4.1","1.4.0","1.3.0","1.2.0","1.1.0","1.0.0","1"],"name":"gcloud","path":"to-be-continuous/gcloud","web_url":"https://gitlab.com/to-be-continuous/gcloud","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454217/logo.png"}},{"name":"GitLab Butler","description":"Automate cleaning your projects with [GitLab Butler](https://gitlab.com/to-be-continuous/tools/gitlab-butler)","template_path":"templates/gitlab-ci-butler.yml","kind":"misc","prefix":"butler","is_component":true,"variables":[{"name":"BUTLER_IMAGE","description":"The Docker image used to run GitLab Butler","default":"registry.gitlab.com/to-be-continuous/tools/gitlab-butler:latest","advanced":true},{"name":"BUTLER_TOKEN","description":"A GitLab access token to allow GitLab Butler crawl your projects","secret":true},{"name":"BUTLER_GROUP_PATH","description":"GitLab group to process","default":"$CI_PROJECT_NAMESPACE"},{"name":"BUTLER_PIPELINES_DELETE_OLDER_THAN","description":"The max age (in days) after which pipelines are deleted","default":"90"}],"extension_id":null,"project":{"tag":"1.1.0","tags":["1.1.0","1.1","1.0.0","1.0","1"],"name":"gitlab-butler","path":"to-be-continuous/gitlab-butler","web_url":"https://gitlab.com/to-be-continuous/gitlab-butler","avatar":"https://gitlab.com/uploads/-/system/project/avatar/61952173/logo.png"}},{"name":"GitLab Package","description":"Publish artifacts to GitLab's [Generic Package Registry](https://docs.gitlab.com/ee/user/packages/generic_packages/)","template_path":"templates/gitlab-ci-gitlab-package.yml","kind":"build","prefix":"glpkg","is_component":true,"variables":[{"name":"GLPKG_IMAGE","description":"The Docker image used to publish packages","default":"registry.hub.docker.com/curlimages/curl:latest","advanced":true},{"name":"GLPKG_FILES","description":"Glob patterns matching files to include in the GitLab package (:warning: does not support double star)","mandatory":true},{"name":"GLPKG_PACKAGE","description":"Name of the package to publish","default":"$CI_PROJECT_NAME"}],"extension_id":null,"project":{"tag":"1.2.2","tags":["1.2.2","1.2.1","1.2.0","1.2","1.1.0","1.1","1.0.0","1"],"name":"gitlab-package","path":"to-be-continuous/gitlab-package","web_url":"https://gitlab.com/to-be-continuous/gitlab-package","avatar":"https://gitlab.com/uploads/-/system/project/avatar/47461614/logo.png"}},{"name":"Gitleaks","description":"Detect and prevent hardcoded secrets in your Git repository with [Gitleaks](https://github.com/zricethezav/gitleaks/wiki)","template_path":"templates/gitlab-ci-gitleaks.yml","kind":"analyse","prefix":"gitleaks","is_component":true,"variables":[{"name":"GITLEAKS_IMAGE","description":"The Docker image used to run Gitleaks","default":"registry.hub.docker.com/zricethezav/gitleaks:latest"},{"name":"GITLEAKS_RULES","description":"Gitleaks [configuration rules](https://github.com/zricethezav/gitleaks/wiki/Configuration) to use (you may also provide your own `.gitleaks.toml` configuration file in your project).","advanced":true},{"name":"GITLEAKS_ARGS","description":"[Options](https://github.com/zricethezav/gitleaks/wiki/Options) for a full Gitleaks analysis (on master or develop branches)","default":"--verbose --redact","advanced":true}],"extension_id":null,"project":{"tag":"2.6.1","tags":["2.6.1","2.6.0","2.6","2.5.2","2.5.1","2.5.0","2.5","2.4.1","2.4.0","2.4","2.3.0","2.3","2.2.3","2.2.2","2.2.1","2.2.0","2.2","2.1.1","2.1.0","2.1","2.0.0","2.0","2","1.3.0","1.3","1.2.5","1.2.4","1.2.3","1.2.2","1.2.1","1.2.0","1.1.1","1.1.0","1.0.0","1"],"name":"gitleaks","path":"to-be-continuous/gitleaks","web_url":"https://gitlab.com/to-be-continuous/gitleaks","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454220/logo.png"}},{"name":"Go","description":"Build, test and analyse your [Go](https://golang.org/) projects","template_path":"templates/gitlab-ci-golang.yml","kind":"build","prefix":"go","is_component":true,"variables":[{"name":"GO_IMAGE","description":"The Docker image used to run Go (build+test or build only) - **set the version required by your project**","default":"registry.hub.docker.com/library/golang:bookworm"},{"name":"GO_PROJECT_DIR","description":"Go project root directory","default":".","advanced":true},{"name":"GOPROXY","description":"URL of Go module proxy (see [Go env](https://golang.org/cmd/go/#hdr-Environment_variables))","advanced":true},{"name":"GO_TEST_IMAGE","description":"Specific Docker image used to run Go tests (as a separate job)","advanced":true},{"name":"GO_BUILD_FLAGS","description":"Flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)","default":"-mod=readonly","advanced":true},{"name":"GO_BUILD_MODE","description":"The template build mode (accepted values are `application`, `modules` and `auto`)","type":"enum","values":["auto","application","modules"],"default":"auto","advanced":true},{"name":"GO_BUILD_LINKER_FLAGS","description":"Linker flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies) `-ldflags`","default":"-s -w","advanced":true},{"name":"GO_BUILD_PACKAGES","description":"Packages to build with the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)","default":"./..."},{"name":"GO_TARGET_OS","description":"The `$GOOS` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)\n\nFallbacks to default `$GOOS` from the Go Docker image","advanced":true},{"name":"GO_TARGET_ARCH","description":"The `$GOARCH` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)\n\nFallbacks to default `$GOARCH` from the Go Docker image","advanced":true},{"name":"GO_TEST_FLAGS","description":"Flags used by the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)","default":"-mod=readonly -v -race","advanced":true},{"name":"GO_TEST_PACKAGES","description":"Packages to test with the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)","default":"./..."},{"name":"GO_LIST_ARGS","description":"Arguments used by the list command","default":"list -u -m -mod=readonly -json all","advanced":true},{"name":"GO_COBERTURA_FLAGS","description":"Build flags to add to use gocover-cobertura, leave blank if not needed","advanced":true}],"features":[{"id":"generate","name":"go generate","description":"generate code with [go generate](https://go.dev/blog/generate)","variables":[{"name":"GO_GENERATE_MODULES","description":"Space separated list of Go code generator modules (ex: `stringer mockery`)","mandatory":true}]},{"id":"golangci-lint","name":"GolangCI-Lint","description":"[GolangCI-Lint](https://github.com/golangci/golangci-lint) analysis","disable_with":"GO_CI_LINT_DISABLED","variables":[{"name":"GO_CI_LINT_IMAGE","description":"The Docker image used to run `golangci-lint`","default":"registry.hub.docker.com/golangci/golangci-lint:latest-alpine"},{"name":"GO_CI_LINT_ARGS","description":"`golangci-lint` [command line arguments](https://github.com/golangci/golangci-lint#command-line-options)","default":"-E gosec,goimports ./...","advanced":true}]},{"id":"go-mod-outdated","name":"Go-mod-outdated","description":"[Go-mod-outdated](https://github.com/psampaz/go-mod-outdated) analysis","variables":[{"name":"GO_MOD_OUTDATED_ARGS","description":"`god-mod-outdated` [command line arguments](https://github.com/psampaz/go-mod-outdated#usage","default":"-update -direct","advanced":true}]},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [cyclonedx-gomod](https://github.com/CycloneDX/cyclonedx-gomod)","disable_with":"GO_SBOM_DISABLED","variables":[{"name":"GO_SBOM_IMAGE","default":"registry.hub.docker.com/cyclonedx/cyclonedx-gomod:latest"},{"name":"GO_SBOM_OPTS","description":"[@cyclonedx/cyclonedx-gomod options](https://github.com/CycloneDX/cyclonedx-gomod#usage) used for SBOM analysis","default":"-main .","advanced":true}]},{"id":"go-semgrep","name":"Semgrep","description":"[Semgrep](https://semgrep.dev/docs/) analysis","disable_with":"GO_SEMGREP_DISABLED","variables":[{"name":"GO_SEMGREP_IMAGE","description":"The Docker image used to run [Semgrep](https://semgrep.dev/docs/)","default":"registry.hub.docker.com/semgrep/semgrep:latest"},{"name":"GO_SEMGREP_ARGS","description":"Semgrep [scan options](https://semgrep.dev/docs/cli-reference#semgrep-scan-command-options)","default":"--metrics off --disable-version-check"},{"name":"GO_SEMGREP_RULES","description":"Space-separated list of [Semgrep rules](https://semgrep.dev/docs/running-rules).\n\nCan be both local YAML files or remote rules from the [Semgrep Registry](https://semgrep.dev/explore) (denoted by the `p/` prefix)","default":"p/golang p/gosec"},{"name":"GO_SEMGREP_DOWNLOAD_RULES_ENABLED","description":"Download Semgrep remote rules","type":"boolean","default":"true"}]},{"id":"govulncheck","name":"Govulncheck","description":"Vulnerability Management with [Govulncheck](https://go.dev/blog/vuln)","disable_with":"GO_VULNCHECK_DISABLED","variables":[{"name":"GO_VULNCHECK_ARGS","description":"`govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags)","default":"./...","advanced":true}]}],"extension_id":null,"project":{"tag":"4.11.1","tags":["4.11.1","4.11.0","4.11","4.10.0","4.10","4.9.2","4.9.1","4.9.0","4.9","4.8.3","4.8.2","4.8.1","4.8.0","4.8","4.7.0","4.7","4.6.1","4.6.0","4.6","4.5.1","4.5.0","4.5","4.4.0","4.4","4.3.0","4.3","4.2.0","4.2","4.1.2","4.1.1","4.1.0","4.1","4.0.2","4.0.1","4.0.0","4.0","4","3.2.1","3.2.0","3.2","3.1.0","3.1","3.0.0","3.0","3","2.3.0","2.3","2.2.0","2.2","2.1.3","2.1.2","2.1.1","2.1.0","2.0.3","2.0.2","2.0.1","2.0.0","2","1.3.0","1.2.2","1.2.1","1.2.0","1.1.0","1.0.0"],"name":"golang","path":"to-be-continuous/golang","web_url":"https://gitlab.com/to-be-continuous/golang","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454222/logo.png"}},{"name":"Gradle","description":"Build, test and analyse your [Gradle](https://gradle.org/)-based projects","template_path":"templates/gitlab-ci-gradle.yml","kind":"build","prefix":"gradle","is_component":true,"variables":[{"name":"GRADLE_IMAGE","description":"The Docker image used to run Gradle - **set the version required by your project**","default":"registry.hub.docker.com/library/gradle:latest"},{"name":"GRADLE_CLI_OPTS","description":"Additional Gradle options used on the command line","advanced":true},{"name":"GRADLE_CLI_BIN","description":"The location of the gradle binary. If you prefer using a [gradle wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html) you should override this (for e.g. `gradlew`)","default":"gradle","advanced":true},{"name":"GRADLE_USER_HOME","description":"The gradle user home","default":"$CI_PROJECT_DIR/.gradle","advanced":true},{"name":"GRADLE_DAEMON","description":"Whether to use or not gradle daemon","default":"false","advanced":true},{"name":"GRADLE_BUILD_ARGS","description":"Gradle arguments for the build & test job","default":"build","advanced":true},{"name":"GRADLE_PROJECT_DIR","description":"Gradle project root directory","default":".","advanced":true},{"name":"JACOCO_CSV_REPORT","description":"Name of code coverage report","default":"jacocoTestReport.csv","advanced":true}],"features":[{"id":"sonar","name":"SONAR","description":"Code quality and security analysis with [SONARQube](https://www.sonarqube.org/)","variables":[{"name":"SONAR_HOST_URL","type":"url","description":"SonarQube server url","mandatory":true},{"name":"SONAR_TOKEN","description":"SonarQube authentication token (see https://docs.sonarsource.com/sonarqube-server/latest/user-guide/managing-tokens/)","secret":true},{"name":"SONAR_BASE_ARGS","description":"SonarQube [analysis arguments](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/analysis-parameters/)","default":"sonar -Dsonar.links.homepage=${CI_PROJECT_URL} -Dsonar.links.ci=${CI_PROJECT_URL}/-/pipelines -Dsonar.links.issue=${CI_PROJECT_URL}/-/issues","advanced":true},{"name":"SONAR_QUALITY_GATE_ENABLED","description":"Enables SonarQube [Quality Gate](https://docs.sonarsource.com/sonarqube-server/latest/instance-administration/analysis-functions/quality-gates/) verification.\n\n_Uses `sonar.qualitygate.wait` parameter ([see doc](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/ci-integration/overview/#quality-gate-fails))._","type":"boolean"}]},{"id":"dependency-check","name":"Dependency Check","description":"Runs a Gradle dependency check","disable_with":"GRADLE_DEPENDENCY_CHECK_DISABLED","variables":[{"name":"GRADLE_DEPENDENCY_CHECK_TASK","description":"The dependency-check task that is invoked","default":"dependencyCheckAnalyze","advanced":true}]},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [cyclonedx-gradle-plugin](https://github.com/CycloneDX/cyclonedx-gradle-plugin)","disable_with":"GRADLE_SBOM_DISABLED","variables":[{"name":"GRADLE_SBOM_VERSION","description":"Version of the `cyclonedx-gradle-plugin` used for SBOM analysis.\n\n_When unset, the latest version will be used_"},{"name":"GRADLE_MAVEN_PLUGIN_URL","description":"Maven Repository that is used to download the `cyclonedx-gradle-plugin`. No trailing slash.","default":"https://plugins.gradle.org/m2"}]},{"id":"publish","name":"Publish (snapshot & release)","description":"Enable publishing to an artifacts repository","disable_with":"GRADLE_NO_PUBLISH","variables":[{"name":"GRADLE_PUBLISH_ARGS","description":"The publish task that is invoked","default":"publish","advanced":true},{"name":"GRADLE_PUBLISH_VERSION","description":"The value is propagated as gradle properties named `version`.\n\nIt should be used in your publish task","default":"${CI_COMMIT_REF_SLUG}-SNAPSHOT","advanced":true}]}],"extension_id":null,"project":{"tag":"2.8.0","tags":["2.8.0","2.8","2.7.2","2.7.1","2.7.0","2.7","2.6.3","2.6.2","2.6.1","2.6.0","2.6","2.5.0","2.5","2.4.2","2.4.1","2.4.0","2.4","2.3.0","2.3","2.2.2","2.2.1","2.2.0","2.2","2.1.0","2.1","2.0.0","2.0","2","1.4.0","1.4","1.3.1","1.3.0","1.2.1","1.2.0","1.1.0","1.0.0","1"],"name":"gradle","path":"to-be-continuous/gradle","web_url":"https://gitlab.com/to-be-continuous/gradle","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454226/logo.png"}},{"name":"Helm","description":"Build your Helm Charts and/or deploy your application to a Kubernetes platform using [Helm](https://helm.sh/)","template_path":"templates/gitlab-ci-helm.yml","kind":"hosting","prefix":"helm","is_component":true,"variables":[{"name":"HELM_CLI_IMAGE","description":"The Docker image used to run Helm - **set the version required by your Kubernetes server**","default":"registry.hub.docker.com/alpine/helm:latest"},{"name":"HELM_CHART_DIR","description":"The folder where the Helm chart is located","default":"."},{"name":"HELM_SCRIPTS_DIR","description":"The folder where hook scripts are located","default":"."},{"name":"HELM_COMMON_VALUES","description":"Common values file (used for all environments, overridden by specific per-env values files)"},{"name":"HELM_DEPLOY_CHART","description":"The Helm [chart](https://helm.sh/docs/topics/charts/) to deploy. _Only required if you want to deploy an **external** chart._"},{"name":"HELM_REPOS","description":"The Helm [chart repositories](https://helm.sh/docs/topics/chart_repository/) to use (formatted as `repo_name_1@repo_url_1 repo_name_2@repo_url_2 ...`)","default":"stable@https://charts.helm.sh/stable bitnami@https://charts.bitnami.com/bitnami"},{"name":"KUBE_NAMESPACE","description":"The default Kubernetes namespace to use. _Leave default if [GitLab Kubernetes integration](https://docs.gitlab.com/ee/user/project/clusters/index.html) is enabled._"},{"name":"HELM_DEFAULT_KUBE_CONFIG","description":"The default kubeconfig content to use. Automatically set if GitLab Kubernetes integration is enabled.","default":"$KUBECONFIG","secret":true},{"name":"HELM_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"HELM_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.helm.acme.com`)_"},{"name":"HELM_DEPLOY_ARGS","description":"The Helm [command with options](https://helm.sh/docs/helm/helm_upgrade/) to deploy the application (_without dynamic arguments such as release name and chart_)","default":"upgrade --install --atomic --timeout 120s","advanced":true},{"name":"HELM_DELETE_ARGS","description":"The Helm [command with options](https://helm.sh/docs/helm/helm_uninstall/) to cleanup the application (_without dynamic arguments such as release name_)","default":"uninstall","advanced":true},{"name":"HELM_DEPENDENCY_ARGS","description":"The Helm [command with options](https://helm.sh/docs/helm/helm_dependency_update/) to update on-disk the chart dependencies (_without dynamic arguments such as the chart path_)","default":"dependency update","advanced":true},{"name":"HELM_ENV_VALUE_NAME","description":"The name of the Helm [value](https://helm.sh/docs/chart_best_practices/values/) containing the _environment type_","default":"environmentType","advanced":true},{"name":"HELM_HOSTNAME_VALUE_NAME","description":"The name of the Helm [value](https://helm.sh/docs/chart_best_practices/values/) containing the _environment hostname_ (extracted from the environment URL)","default":"hostname","advanced":true}],"features":[{"id":"lint","name":"Helm Lint","description":"Static code analysis of your Helm chart with [Helm Lint](https://helm.sh/docs/helm/helm_lint/)","disable_with":"HELM_LINT_DISABLED","variables":[{"name":"HELM_LINT_ARGS","description":"The Helm [command with options](https://helm.sh/docs/helm/helm_lint/) to trigger the analysis (_without dynamic arguments such as the chart path_)","default":"lint --strict","advanced":true}]},{"id":"test","name":"Helm Test","description":"Acceptance test of your Helm chart with [Helm Test](https://helm.sh/docs/helm/helm_test/)","enable_with":"HELM_TEST_ENABLED","variables":[{"name":"HELM_TEST_ARGS","description":"The Helm [command with options](https://helm.sh/docs/helm/helm_test/) to perform acceptance test (_without dynamic arguments such as release name_)","default":"test","advanced":true}]},{"id":"yamllint","name":"Yaml Lint","description":"[Yaml Lint](https://github.com/adrienverge/yamllint) of your Helm [values file](https://helm.sh/docs/chart_template_guide/values_files/)","disable_with":"HELM_YAMLLINT_DISABLED","variables":[{"name":"HELM_YAMLLINT_IMAGE","description":"The Docker image used to run YamlLint test","default":"registry.hub.docker.com/cytopia/yamllint"},{"name":"HELM_YAMLLINT_CONFIG","description":"Config used with the yamllint tool","default":"{extends: relaxed, rules: {line-length: {max: 160}}}","advanced":true},{"name":"HELM_YAMLLINT_ARGS","description":"Arguments used by the lint job","default":"-f colored --strict","advanced":true}]},{"id":"kube-score","name":"Kube-Score","description":"Run [Kube-Score](https://kube-score.com/) on the resources to be created by Helm","disable_with":"HELM_KUBE_SCORE_DISABLED","variables":[{"name":"HELM_KUBE_SCORE_IMAGE","description":"The Docker image used to run [Kube-Score](https://kube-score.com/)","default":"registry.hub.docker.com/zegl/kube-score"},{"name":"HELM_KUBE_SCORE_ARGS","description":"Arguments used by the kube-score job","advanced":true},{"name":"HELM_K8S_VERSION","description":"Kubernetes version (_so that `.Capabilities.KubeVersion.Version` can be correctly interpreted_). \n\n Expected format: `vX.YY`","advanced":true}]},{"id":"package","name":"Package your chart","description":"[Package](https://helm.sh/docs/helm/helm_package/) your Helm chart","variables":[{"name":"HELM_PACKAGE_ARGS","description":"The Helm [command with options](https://helm.sh/docs/helm/helm_package/) to perform the packaging (_without dynamic arguments such as the chart path_)","default":"package --dependency-update","advanced":true},{"name":"HELM_PUBLISH_SNAPSHOT_ENABLED","description":"Set to `true` to enable publishing the snapshot (untested) chart during the packaging step","type":"boolean","advanced":true},{"name":"HELM_SEMREL_RELEASE_DISABLED","description":"Disable semantic-release integration","type":"boolean","advanced":true}]},{"id":"publish","name":"Publish your chart","description":"Publishes the chart to a [Helm repository](https://helm.sh/docs/topics/chart_repository/) or [OCI-based registry](https://helm.sh/docs/topics/registries/)","variables":[{"name":"HELM_PUBLISH_URL","description":"The URL of the Helm repository to publish your Helm package","default":"oci://$CI_REGISTRY/$CI_PROJECT_PATH/charts"},{"name":"HELM_PUBLISH_METHOD","description":"HTTP method to use to push the package","default":"auto","type":"enum","values":["auto","push","post","put","custom","disabled"],"advanced":true},{"name":"HELM_PUBLISH_USER","description":"Helm repository username","default":"$CI_REGISTRY_USER","secret":true},{"name":"HELM_PUBLISH_PASSWORD","description":"Helm repository password","default":"$CI_REGISTRY_PASSWORD","secret":true},{"name":"HELM_PUBLISH_ON","description":"Defines on which Git reference(s) the publish job shall be enabled\n\n`prod` to enable on production branch only, `protected` to enable on protected references, `all` to enable on all Git branches and `tag` on Git release tags (always auto, superseeds `HELM_PUBLISH_STRATEGY`)","default":"prod","type":"enum","values":["prod","protected","all","tag"]},{"name":"HELM_PUBLISH_STRATEGY","description":"Defines the publish strategy.","type":"enum","values":["none","manual","auto"],"default":"manual"},{"name":"HELM_CM_PUSH_PLUGIN_VERSION","description":"cm-push plugin version to install (only when using `push` method with a regular chart [repository](https://helm.sh/docs/topics/chart_repository/)","advanced":true}]},{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","enable_with":"HELM_REVIEW_ENABLED","variables":[{"name":"HELM_REVIEW_APP_NAME","description":"The application name for `review` env _(only define to override default)_","advanced":true},{"name":"HELM_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"HELM_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELM_REVIEW_VALUES","description":"The Values file to use with `review` environment"},{"name":"HELM_REVIEW_NAMESPACE","description":"The Kubernetes namespace to use for `review` env _(only define to override default)_","advanced":true},{"name":"HELM_REVIEW_KUBE_CONFIG","description":"Specific kubeconfig for review env (only define to override default)","advanced":true,"secret":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","enable_with":"HELM_INTEG_ENABLED","variables":[{"name":"HELM_INTEG_APP_NAME","description":"The application name for `integration` env _(only define to override default)_","advanced":true},{"name":"HELM_INTEG_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `integration` env","default":"never"},{"name":"HELM_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELM_INTEG_VALUES","description":"The Values file to use with `integration` environment"},{"name":"HELM_INTEG_NAMESPACE","description":"The Kubernetes namespace to use for `integration` env _(only define to override default)_","advanced":true},{"name":"HELM_INTEG_KUBE_CONFIG","description":"Specific kubeconfig for integration env (only define to override default)","advanced":true,"secret":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","enable_with":"HELM_STAGING_ENABLED","variables":[{"name":"HELM_STAGING_APP_NAME","description":"The application name for `staging` env _(only define to override default)_","default":"${HELM_BASE_APP_NAME}-staging","advanced":true},{"name":"HELM_STAGING_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `staging` env","default":"never"},{"name":"HELM_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELM_STAGING_VALUES","description":"The Values file to use with `staging` environment"},{"name":"HELM_STAGING_NAMESPACE","description":"The Kubernetes namespace to use for `staging` env _(only define to override default)_","advanced":true},{"name":"HELM_STAGING_KUBE_CONFIG","description":"Specific kubeconfig for staging env (only define to override default)","advanced":true,"secret":true}]},{"id":"prod","name":"Production","description":"The production environment","enable_with":"HELM_PROD_ENABLED","variables":[{"name":"HELM_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"HELM_PROD_APP_NAME","description":"The application name for `production` env _(only define to override default)_","advanced":true},{"name":"HELM_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELM_PROD_VALUES","description":"The Values file to use with `production` environment"},{"name":"HELM_PROD_NAMESPACE","description":"The Kubernetes namespace to use for `production` env _(only define to override default)_","advanced":true},{"name":"HELM_PROD_KUBE_CONFIG","description":"Specific kubeconfig for production env (only define to override default)","advanced":true,"secret":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-helm-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]},{"id":"gcp","name":"Google Cloud","description":"Retrieve credentials for Google Cloud","template_path":"templates/gitlab-ci-helm-gcp.yml","variables":[{"name":"TBC_GCP_PROVIDER_IMAGE","description":"The [GCP Auth Provider](https://gitlab.com/to-be-continuous/tools/gcp-auth-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/gcp-auth-provider:latest","advanced":true},{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Default Service Account to which impersonate with OpenID Connect authentication"},{"name":"GCP_OIDC_PROVIDER","description":"Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"},{"name":"GCP_REVIEW_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `review` environment","advanced":true},{"name":"GCP_REVIEW_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment","advanced":true},{"name":"GCP_INTEG_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `integration` environment","advanced":true},{"name":"GCP_INTEG_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment","advanced":true},{"name":"GCP_STAGING_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `staging` environment","advanced":true},{"name":"GCP_STAGING_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment","advanced":true},{"name":"GCP_PROD_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `production` environment","advanced":true},{"name":"GCP_PROD_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment","advanced":true}]}],"extension_id":null,"project":{"tag":"7.4.1","tags":["7.4.1","7.4.0","7.4","7.3.1","7.3.0","7.3","7.2.6","7.2.5","7.2.4","7.2.3","7.2.2","7.2.1","7.2.0","7.2","7.1.0","7.1","7.0.2","7.0.1","7.0.0","7.0","7","6.1.1","6.1.0","6.1","6.0.0","6.0","6","5.3.1","5.3.0","5.3","5.2.0","5.2","5.1.0","5.1","5.0.0","5.0","5","4.1.7","4.1.6","4.1.5","4.1.4","4.1.3","4.1.2","4.1.1","4.1.0","4.1","4.0.1","4.0.0","4.0","4","3.3.2","3.3.1","3.3.0","3.3","3.2.0","3.2","3.1.0","3.1","3.0.1","3.0.0","3.0","3","2.4.1","2.4.0","2.4","2.3.0","2.3","2.2.0","2.1.0","2.0.6","2.0.5","2.0.4","2.0.3","2.0.2","2.0.1","2.0.0","2","1.4.2","1.4.1","1.4.0","1.3.0","1.2.1","1.2.0","1.1.1","1.1.0","1.0.0"],"name":"helm","path":"to-be-continuous/helm","web_url":"https://gitlab.com/to-be-continuous/helm","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454230/logo.png"}},{"name":"Helmfile","description":"Deploy your application to a [Kubernetes](https://kubernetes.io/) platform using [helmfile](https://github.com/helmfile/helmfile)","template_path":"templates/gitlab-ci-helmfile.yml","kind":"hosting","prefix":"helmfile","is_component":true,"variables":[{"name":"HELMFILE_CLI_IMAGE","description":"The Docker image used to run helmfile - **set the version required by your Kubernetes server**","default":"ghcr.io/helmfile/helmfile:latest"},{"name":"HELMFILE_SCRIPTS_DIR","description":"The folder where hook scripts are located","default":"."},{"name":"HELMFILE_PATH","description":"Path to the `helmfile.yaml` to deploy","default":"./helmfile.yaml"},{"name":"KUBE_NAMESPACE","description":"The default Kubernetes namespace to use. _Leave default if [GitLab Kubernetes integration](https://docs.gitlab.com/ee/user/project/clusters/index.html) is enabled._"},{"name":"HELMFILE_DEFAULT_KUBE_CONFIG","description":"The default kubeconfig content to use. Automatically set if GitLab Kubernetes integration is enabled.","default":"$KUBECONFIG","secret":true},{"name":"HELMFILE_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"HELMFILE_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.helm.acme.com`)_"},{"name":"HELMFILE_DEPLOY_ARGS","description":"The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#apply) to deploy the application (_without dynamic global parameters such as helmfile path, namespace and environment name)","default":"apply --suppress-secrets --wait","advanced":true},{"name":"HELMFILE_DELETE_ARGS","description":"The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#destroy) to cleanup the application (_without dynamic global parameters such as helmfile path, namespace and environment name)","default":"destroy","advanced":true},{"name":"HELMFILE_PGP_PRIVATE_KEY_FILE","description":"PGP Private key for decrypting helmfile secrets with SOPS (optional). Should be set as a File type variable.","secret":true},{"name":"HELMFILE_PGP_PASSPHRASE","description":"Passphrase for PGP private key (optional)","secret":true},{"name":"HELMFILE_IMAGE_PULL_SECRET_NAME","description":"Name of the `docker-registry` k8s secret that will be created if the special [GitLab deploy token](https://docs.gitlab.com/ee/user/project/deploy_tokens/#gitlab-deploy-token) is available.","default":"gitlab-registry","advanced":true}],"features":[{"id":"lint","name":"Helmfile Lint","description":"Runs a [helm lint](https://helm.sh/docs/helm/helm_lint/) across all of the charts/releases in the helmfile manifest.","enable_with":"HELMFILE_LINT_ENABLED","variables":[{"name":"HELMFILE_LINT_ARGS","description":"The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#lint) to trigger the analysis (_without dynamic arguments such as the helmfile path)","default":"lint","advanced":true}]},{"id":"test","name":"Helmfile Test","description":"Runs acceptance [Helm tests](https://helm.sh/docs/topics/chart_tests/) against the specified releases in the helmfile manifest","enable_with":"HELMFILE_TEST_ENABLED","variables":[{"name":"HELMFILE_TEST_ARGS","description":"The helmfile [command with options](https://helmfile.readthedocs.io/en/latest/#test) to perform acceptance test (_without dynamic global arguments such as the helmfile.yaml path, namespace and environment name_)","default":"test --logs --cleanup","advanced":true}]},{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","enable_with":"HELMFILE_REVIEW_ENABLED","variables":[{"name":"HELMFILE_REVIEW_APP_NAME","description":"The application name for `review` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"HELMFILE_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELMFILE_REVIEW_NAMESPACE","description":"The Kubernetes namespace to use for `review` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_REVIEW_KUBE_CONFIG","description":"Specific kubeconfig for review env (only define to override default)","advanced":true,"secret":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","enable_with":"HELMFILE_INTEG_ENABLED","variables":[{"name":"HELMFILE_INTEG_APP_NAME","description":"The application name for `integration` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_INTEG_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `integration` env","default":"never"},{"name":"HELMFILE_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELMFILE_INTEG_NAMESPACE","description":"The Kubernetes namespace to use for `integration` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_INTEG_KUBE_CONFIG","description":"Specific kubeconfig for integration env (only define to override default)","advanced":true,"secret":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","enable_with":"HELMFILE_STAGING_ENABLED","variables":[{"name":"HELMFILE_STAGING_APP_NAME","description":"The application name for `staging` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_STAGING_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `staging` env","default":"never"},{"name":"HELMFILE_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELMFILE_STAGING_NAMESPACE","description":"The Kubernetes namespace to use for `staging` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_STAGING_KUBE_CONFIG","description":"Specific kubeconfig for staging env (only define to override default)","advanced":true,"secret":true}]},{"id":"prod","name":"Production","description":"The production environment","enable_with":"HELMFILE_PROD_ENABLED","variables":[{"name":"HELMFILE_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"HELMFILE_PROD_APP_NAME","description":"The application name for `production` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"HELMFILE_PROD_NAMESPACE","description":"The Kubernetes namespace to use for `production` env _(only define to override default)_","advanced":true},{"name":"HELMFILE_PROD_KUBE_CONFIG","description":"Specific kubeconfig for production env (only define to override default)","advanced":true,"secret":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-helmfile-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"3.2.4","tags":["3.2.4","3.2.3","3.2.2","3.2.1","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.3","3.0.2","3.0.1","3.0.0","3.0","3","2.1.0","2.1","2.0.0","2.0","2","1.1.0","1.1","1.0.0","1.0","1"],"name":"helmfile","path":"to-be-continuous/helmfile","web_url":"https://gitlab.com/to-be-continuous/helmfile","avatar":"https://gitlab.com/uploads/-/system/project/avatar/44473697/logo.png"}},{"name":"Hurl","description":"Run your automated tests with [Hurl](https://hurl.dev/)","template_path":"templates/gitlab-ci-hurl.yml","kind":"acceptance","prefix":"hurl","is_component":true,"variables":[{"name":"HURL_IMAGE","description":"The Docker image used to run Hurl","default":"ghcr.io/orange-opensource/hurl:latest"},{"name":"HURL_TEST_FILES","description":"The Hurl test files to run","default":"--glob **/*.hurl"},{"name":"HURL_EXTRA_ARGS","description":"Hurl extra [run options](https://hurl.dev/docs/manual.html#options)","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable Hurl tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"1.4.0","tags":["1.4.0","1.4","1.3.0","1.3","1.2.1","1.2.0","1.2","1.1.0","1.1","1.0.1","1.0.0","1.0","1"],"name":"hurl","path":"to-be-continuous/hurl","web_url":"https://gitlab.com/to-be-continuous/hurl","avatar":"https://gitlab.com/uploads/-/system/project/avatar/50266464/logo.png"}},{"name":"k6","description":"Run your automated load-testing with [k6](https://k6.io/)","template_path":"templates/gitlab-ci-k6.yml","kind":"acceptance","prefix":"k6","is_component":true,"variables":[{"name":"K6_IMAGE","description":"The Docker image used to run k6 CLI.","default":"registry.hub.docker.com/grafana/k6:latest"},{"name":"K6_TESTS_DIR","description":"The k6 tests directory","default":"k6"},{"name":"K6_EXTRA_ARGS","description":"k6 extra [command-line](https://k6.io/docs/getting-started/running-k6)","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable k6 tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"3.4.3","tags":["3.4.3","3.4.2","3.4.1","3.4.0","3.4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.1.0","2.1","2.0.1","2.0.0","2","1.0.0"],"name":"k6","path":"to-be-continuous/k6","web_url":"https://gitlab.com/to-be-continuous/k6","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26797499/logo.png"}},{"name":"Kubernetes","description":"Deploy your application to a [Kubernetes](https://kubernetes.io/) platform using [declarative configuration](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/) or [Kustomize](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/)","template_path":"templates/gitlab-ci-k8s.yml","kind":"hosting","prefix":"k8s","is_component":true,"variables":[{"name":"K8S_KUBECTL_IMAGE","description":"The Docker image used to run Kubernetes `kubectl` commands - **set the version required by your Kubernetes server**","default":"registry.hub.docker.com/bitnami/kubectl:latest"},{"name":"K8S_DEFAULT_KUBE_CONFIG","description":"The default kubeconfig to use (either content or file variable) (only define if not using exploded kubeconfig parameters)","secret":true},{"name":"K8S_URL","type":"url","description":"Global Kubernetes API url (only define if using exploded kubeconfig parameters)"},{"name":"K8S_TOKEN","description":"Global Kubernetes API token (only define if using exploded kubeconfig parameters)","secret":true},{"name":"K8S_CA_CERT","description":"Global Kubernetes cluster server certificate authority (only define if using exploded kubeconfig parameters)","secret":true},{"name":"K8S_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"K8S_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.k8s.acme.com`)_"},{"name":"K8S_SCRIPTS_DIR","description":"directory where Kubernetes scripts (templates, hook scripts) are located","default":".","advanced":true},{"name":"K8S_KUSTOMIZE_ENABLED","description":"Set to `true` to enable [Kustomize](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/)","type":"boolean","advanced":true},{"name":"K8S_KUSTOMIZE_ARGS","description":"Additional [`kubectl kustomize` options](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#kustomize)\n\n_For example: `--enable-helm`_","advanced":true}],"features":[{"id":"kube-score","name":"kube-score","description":"Static code analysis of your Kubernetes templates with [kube-score](https://github.com/zegl/kube-score)","disable_with":"K8S_SCORE_DISABLED","variables":[{"name":"K8S_KUBE_SCORE_IMAGE","description":"Docker image to run [kube-score](https://github.com/zegl/kube-score)","default":"registry.hub.docker.com/zegl/kube-score:latest"},{"name":"K8S_SCORE_EXTRA_OPTS","description":"Additional [kube-score options](https://github.com/zegl/kube-score#configuration)","advanced":true}]},{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","variables":[{"name":"K8S_REVIEW_SPACE","description":"Kubernetes namespace for review env","mandatory":true},{"name":"K8S_REVIEW_APP_NAME","description":"The application name for review env (only define to override default)","advanced":true},{"name":"K8S_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"K8S_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"K8S_REVIEW_KUBE_CONFIG","description":"Specific kubeconfig for review env (only define if not using exploded parameters and if different from global)","secret":true},{"name":"K8S_REVIEW_URL","type":"url","description":"Kubernetes API url for review env (only define if using exploded kubeconfig parameters and if different from global)","advanced":true},{"name":"K8S_REVIEW_TOKEN","description":"Kubernetes API token for review env (only define if using exploded kubeconfig parameters and if different from global)","secret":true},{"name":"K8S_REVIEW_CA_CERT","description":"Kubernetes cluster server certificate authority for review env (only define if using exploded kubeconfig parameters and if different from global)","secret":true}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","variables":[{"name":"K8S_INTEG_SPACE","description":"Kubernetes namespace for integration env","mandatory":true},{"name":"K8S_INTEG_APP_NAME","description":"The application name for integration env (only define to override default)","advanced":true},{"name":"K8S_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"K8S_INTEG_KUBE_CONFIG","description":"Specific kubeconfig for integration env (only define if not using exploded parameters and if different from global)","secret":true},{"name":"K8S_INTEG_URL","type":"url","description":"Kubernetes API url for integration env (only define if using exploded kubeconfig parameters and if different from global)","advanced":true},{"name":"K8S_INTEG_TOKEN","description":"Kubernetes API token for integration env (only define if using exploded kubeconfig parameters and if different from global)","secret":true},{"name":"K8S_INTEG_CA_CERT","description":"Kubernetes cluster server certificate authority for integration env (only define if using exploded kubeconfig parameters and if different from global)","secret":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","variables":[{"name":"K8S_STAGING_SPACE","description":"Kubernetes namespace for staging env","mandatory":true},{"name":"K8S_STAGING_APP_NAME","description":"The application name for staging env (only define to override default)","advanced":true},{"name":"K8S_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"K8S_STAGING_KUBE_CONFIG","description":"Specific kubeconfig for staging env (only define if not using exploded parameters and if different from global)","secret":true},{"name":"K8S_STAGING_URL","type":"url","description":"Kubernetes API url for staging env (only define if using exploded kubeconfig parameters and if different from global)","advanced":true},{"name":"K8S_STAGING_TOKEN","description":"Kubernetes API token for staging env (only define if using exploded kubeconfig parameters and if different from global)","secret":true},{"name":"K8S_STAGING_CA_CERT","description":"Kubernetes cluster server certificate authority for staging env (only define if using exploded kubeconfig parameters and if  different from global)","secret":true}]},{"id":"prod","name":"Production","description":"The production environment","variables":[{"name":"K8S_PROD_SPACE","description":"Kubernetes namespace for production env","mandatory":true},{"name":"K8S_PROD_APP_NAME","description":"The application name for production env (only define to override default)","advanced":true},{"name":"K8S_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"K8S_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"K8S_PROD_KUBE_CONFIG","description":"Specific kubeconfig for production env (only define if not using exploded parameters and if different from global)","secret":true},{"name":"K8S_PROD_URL","type":"url","description":"Kubernetes API url for production env (only define if using exploded kubeconfig parameters and if different from global)","advanced":true},{"name":"K8S_PROD_TOKEN","description":"Kubernetes API token for production env (only define if using exploded kubeconfig parameters and if different from global)","secret":true},{"name":"K8S_PROD_CA_CERT","description":"Kubernetes cluster server certificate authority for production env (only define if using exploded kubeconfig parameters and if  different from global)","secret":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-k8s-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]},{"id":"gcp-auth-provider","name":"Google Cloud","description":"This variant uses [Application Default Credentials][gcp-adc] through the `GOOGLE_APPLICATION_CREDENTIALS` variable using Workload Identity federation.","template_path":"templates/gitlab-ci-k8s-gcp.yml","variables":[{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Default Service Account to which impersonate with OpenID Connect authentication"},{"name":"GCP_OIDC_PROVIDER","description":"Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"},{"name":"GCP_REVIEW_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `review` environment","advanced":true},{"name":"GCP_REVIEW_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment","advanced":true},{"name":"GCP_INTEG_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `integration` environment","advanced":true},{"name":"GCP_INTEG_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment","advanced":true},{"name":"GCP_STAGING_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `staging` environment","advanced":true},{"name":"GCP_STAGING_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment","advanced":true},{"name":"GCP_PROD_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `production` environment","advanced":true},{"name":"GCP_PROD_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment","advanced":true},{"name":"K8S_KUBECTL_IMAGE","description":"The Docker image used to run Kubernetes `kubectl` commands on [GKE](https://cloud.google.com/kubernetes-engine/docs)","default":"gcr.io/google.com/cloudsdktool/cloud-sdk:latest"}]}],"extension_id":null,"project":{"tag":"6.3.0","tags":["6.3.0","6.3","6.2.0","6.2","6.1.4","6.1.3","6.1.2","6.1.1","6.1.0","6.1","6.0.2","6.0.1","6.0.0","6.0","6","5.2.0","5.2","5.1.0","5.1","5.0.0","5.0","5","4.1.0","4.1","4.0.0","4.0","4","3.5.0","3.5","3.4.3","3.4.2","3.4.1","3.4.0","3.4","3.3.3","3.3.2","3.3.1","3.3.0","3.3","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.3.2","2.3.1","2.3.0","2.3","2.2.0","2.2","2.1.0","2.0.7","2.0.6","2.0.5","2.0.4","2.0.3","2.0.2","2.0.1","2.0.0","2","1.3.1","1.3.0","1.2.0","1.1.0","1.0.0"],"name":"kubernetes","path":"to-be-continuous/kubernetes","web_url":"https://gitlab.com/to-be-continuous/kubernetes","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454231/logo.png"}},{"name":"Lighthouse","description":"Continuously analyse your web apps and web pages performances and developer best practices with [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci)","template_path":"templates/gitlab-ci-lighthouse.yml","kind":"acceptance","prefix":"lhci","job_prefix":"lighthouse","is_component":true,"variables":[{"name":"LHCI_IMAGE","description":"The Docker image used to run Lighthouse CI (use [browser images](https://github.com/cypress-io/cypress-docker-images/tree/master/browsers) only).","default":"registry.hub.docker.com/cypress/browsers:latest"},{"name":"LHCI_VERSION","description":"Lighthouse CI version to run","default":"latest","advanced":true},{"name":"LHCI_RUN_OPTS","description":"Lighthouse CI [autorun options](https://github.com/GoogleChrome/lighthouse-ci/blob/main/docs/configuration.md#autorun)","default":"--upload.target=filesystem --collect.settings.chromeFlags=\"--no-sandbox\" --collect.url=\"%{environment_url}\"","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable Cypress tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"1.4.0","tags":["1.4.0","1.4","1.3.0","1.3","1.2.1","1.2.0","1.2","1.1.0","1.1","1.0.2","1.0.1","1.0.0","1.0","1"],"name":"lighthouse","path":"to-be-continuous/lighthouse","web_url":"https://gitlab.com/to-be-continuous/lighthouse","avatar":"https://gitlab.com/uploads/-/system/project/avatar/47102540/logo.png"}},{"name":"GNU Make","description":"GitLab CI template for [GNU Make](https://www.gnu.org/software/make/)","template_path":"templates/gitlab-ci-make.yml","kind":"build","prefix":"make","is_component":true,"variables":[{"name":"MAKE_IMAGE","description":"The Docker image used to run GNU Make - **set the image required by your project** (see doc)","default":"registry.hub.docker.com/alpinelinux/build-base"},{"name":"MAKE_BUILD_ARGS","description":"Make [options](https://www.gnu.org/software/make/manual/html_node/Options-Summary.html) and [goals](https://www.gnu.org/software/make/manual/html_node/Goals.html) for the build & test job","default":"all test"},{"name":"MAKE_PROJECT_DIR","description":"Makefile root directory","default":".","advanced":true}],"extension_id":null,"project":{"tag":"1.4.1","tags":["1.4.1","1.4.0","1.4","1.3.0","1.3","1.2.0","1.2","1.1.3","1.1.2","1.1.1","1.1.0","1.1","1.0.0","1.0","1"],"name":"make","path":"to-be-continuous/make","web_url":"https://gitlab.com/to-be-continuous/make","avatar":"https://gitlab.com/uploads/-/system/project/avatar/42537057/logo.png"}},{"name":"Maven","description":"Build, test and analyse your [Maven](https://maven.apache.org/)-based projects","template_path":"templates/gitlab-ci-maven.yml","kind":"build","prefix":"maven","job_prefix":"mvn","is_component":true,"variables":[{"name":"MAVEN_IMAGE","description":"The Docker image used to run Maven - **set the version required by your project**","default":"registry.hub.docker.com/library/maven:latest"},{"name":"MAVEN_PROJECT_DIR","description":"Maven project root directory","default":".","advanced":true},{"name":"MAVEN_CFG_DIR","description":"The Maven configuration directory","default":".m2","advanced":true},{"name":"MAVEN_SETTINGS_FILE","description":"The Maven `settings.xml` file path","default":"$MAVEN_CFG_DIR/settings.xml","advanced":true},{"name":"MAVEN_OPTS","description":"[Global Maven options](http://maven.apache.org/configure.html#maven_opts-environment-variable)","default":"-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=${MAVEN_CFG_DIR}/repository -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true","advanced":true},{"name":"MAVEN_CLI_OPTS","description":"Additional [Maven options](https://maven.apache.org/ref/3-LATEST/maven-embedder/cli.html) used on the command line","default":"--no-transfer-progress --batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true","advanced":true},{"name":"MAVEN_BUILD_ARGS","description":"Maven arguments for the build & test job","default":"org.jacoco:jacoco-maven-plugin:prepare-agent verify org.jacoco:jacoco-maven-plugin:report","advanced":true}],"features":[{"id":"sonar","name":"SONAR","description":"Code quality and security analysis with [SONARQube](https://www.sonarqube.org/)","variables":[{"name":"SONAR_HOST_URL","type":"url","description":"SonarQube server url","mandatory":true},{"name":"SONAR_TOKEN","description":"SonarQube authentication token (see https://docs.sonarsource.com/sonarqube-server/latest/user-guide/managing-tokens/) - depends on your authentication method","secret":true},{"name":"SONAR_LOGIN","description":"SonarQube login (depends on your authentication method)","secret":true},{"name":"SONAR_PASSWORD","description":"SonarQube password (depends on your authentication method)","secret":true},{"name":"SONAR_BASE_ARGS","description":"SonarQube [analysis arguments](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/analysis-parameters/)","default":"sonar:sonar -Dsonar.links.homepage=${CI_PROJECT_URL} -Dsonar.links.ci=${CI_PROJECT_URL}/-/pipelines -Dsonar.links.issue=${CI_PROJECT_URL}/-/issues","advanced":true},{"name":"SONAR_QUALITY_GATE_ENABLED","description":"Enables SonarQube [Quality Gate](https://docs.sonarsource.com/sonarqube-server/latest/instance-administration/analysis-functions/quality-gates/) verification.\n\n_Uses `sonar.qualitygate.wait` parameter ([see doc](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/ci-integration/overview/#quality-gate-fails))._","type":"boolean"}]},{"id":"dependency-check","name":"Dependency-Check","description":"[Dependency-Check](https://jeremylong.github.io/DependencyCheck/dependency-check-maven/configuration.html) analysis","disable_with":"MAVEN_DEPENDENCY_CHECK_DISABLED","variables":[{"name":"MAVEN_DEPENDENCY_CHECK_ARGS","description":"Maven arguments for Dependency Check job","default":"org.owasp:dependency-check-maven:aggregate -DretireJsAnalyzerEnabled=false -DassemblyAnalyzerEnabled=false -Dformats=HTML,JSON,XML","advanced":true}]},{"id":"forbid-snapshot-dependencies","name":"Snapshot dependencies verification","description":"This job verifies your project has no _snapshot_ dependencies. Failure is allowed in feature branches.","disable_with":"MVN_FORBID_SNAPSHOT_DEPENDENCIES_DISABLED"},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [cyclonedx-maven-plugin](https://github.com/CycloneDX/cyclonedx-maven-plugin)","disable_with":"MAVEN_SBOM_DISABLED","variables":[{"name":"MAVEN_SBOM_GEN_ARGS","description":"Maven command used for SBOM analysis","default":"org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom","advanced":true}]},{"id":"publish","name":"Publish","description":"Publish [Snapshot](https://maven.apache.org/plugins/maven-deploy-plugin/) & [Releases](http://maven.apache.org/maven-release/maven-release-plugin) to a Maven-compliant repository","enable_with":"MAVEN_DEPLOY_ENABLED","variables":[{"name":"MAVEN_DEPLOY_ARGS","description":"Maven arguments for the deploy job","default":"deploy -Dmaven.test.skip=true","advanced":true},{"name":"MAVEN_DEPLOY_FROM_UNPROTECTED_DISABLED","description":"Set to limit snapshot publication to protected branches","type":"boolean","advanced":true},{"name":"MAVEN_DEPLOY_SNAPSHOT_WITH_SLUG_ENABLED","description":"Enable to inject the Git branch slug in SNAPSHOT versions","type":"boolean","advanced":true},{"name":"MAVEN_RELEASE_ARGS","description":"Maven arguments for the release job","default":"release:prepare -DtagNameFormat=@{project.version} -Darguments=-Dmaven.test.skip=true","advanced":true},{"name":"MAVEN_RELEASE_VERSION","description":"Explicit version to use when triggering a release\n\n_Otherwise uses the current snapshot version from `pom.xml`)_","advanced":true},{"name":"MAVEN_RELEASE_SCM_COMMENT_PREFIX","description":"Maven release plugin [scmCommentPrefix](https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#scmCommentPrefix) parameter","default":"chore(maven-release): ","advanced":true},{"name":"MAVEN_RELEASE_SCM_RELEASE_COMMENT","description":"Maven release plugin [scmReleaseCommitComment](https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#scmReleaseCommitComment) parameter\n\n(since Maven `3.0.0-M1`)","advanced":true},{"name":"MAVEN_RELEASE_SCM_DEV_COMMENT","description":"Maven release plugin [scmDevelopmentCommitComment](https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html#scmDevelopmentCommitComment) parameter\n\n(since Maven `3.0.0-M1`)","advanced":true},{"name":"MVN_SEMREL_RELEASE_DISABLED","description":"Disable semantic-release integration","advanced":true},{"name":"GIT_USERNAME","description":"Git username (if you wish to release using Git credentials)","secret":true},{"name":"GIT_PASSWORD","description":"Git password (if you wish to release using Git credentials)","secret":true},{"name":"GIT_PRIVATE_KEY","description":"Git private SSH key (if you wish to release using SSH key or GitLab Deploy Key)","secret":true},{"name":"MAVEN_REPOSITORY_USERNAME","description":"Maven repository username (inject in your settings.xml as ${env.MAVEN_REPOSITORY_USERNAME})","secret":true},{"name":"MAVEN_REPOSITORY_PASSWORD","description":"Maven repository password (inject in your settings.xml as ${env.MAVEN_REPOSITORY_PASSWORD})","secret":true}]}],"variants":[{"id":"jib","name":"Jib","description":"Build Docker and OCI images for your Java applications with [Jib](https://github.com/GoogleContainerTools/jib)","template_path":"templates/gitlab-ci-maven-jib.yml","features":[{"id":"mvn-trivy","name":"Maven Trivy","description":"[Trivy](https://aquasecurity.github.io/trivy) vulnerability analysis","disable_with":"MAVEN_TRIVY_DISABLED","variables":[{"name":"MAVEN_TRIVY_IMAGE","description":"The docker image used to scan images with Trivy","default":"registry.hub.docker.com/aquasec/trivy:latest","advanced":true},{"name":"MAVEN_TRIVY_ARGS","description":"Additional [`trivy image` options](https://aquasecurity.github.io/trivy/latest/docs/references/configuration/cli/trivy_image/#options)","default":"--ignore-unfixed --vuln-type os","advanced":true}]},{"id":"mvn-sbom","name":"Maven Software Bill of Materials","description":"This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)","disable_with":"MAVEN_SBOM_DISABLED","variables":[{"name":"MAVEN_SBOM_IMAGE","default":"registry.hub.docker.com/anchore/syft:debug","advanced":true},{"name":"MAVEN_SBOM_OPTS","description":"Options for syft used for SBOM analysis","default":"--override-default-catalogers rpm-db-cataloger,alpm-db-cataloger,apk-db-cataloger,dpkg-db-cataloger,portage-cataloger,nix-store-cataloger,java","advanced":true}]}],"variables":[{"name":"MAVEN_JIB_SNAPSHOT_IMAGE","description":"Maven Jib Snapshot image","default":"$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"},{"name":"MAVEN_JIB_RELEASE_IMAGE","description":"Maven Jib Release image","default":"$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"},{"name":"MAVEN_SKOPEO_IMAGE","description":"The image used to publish images with Skopeo","default":"quay.io/skopeo/stable:latest","advanced":true},{"name":"MAVEN_JIB_BUILD_ARGS","description":"[Jib Maven Plugin arguments](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#extended-usage)","default":"-Djib.to.image=$MAVEN_JIB_SNAPSHOT_IMAGE"},{"name":"MAVEN_JIB_PROD_PUBLISH_STRATEGY","description":"Defines the publish to production strategy.","type":"enum","values":["none","manual","auto"],"default":"manual"},{"name":"MAVEN_JIB_PUBLISH_ARGS","description":"Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)"}]}],"extension_id":null,"project":{"tag":"4.0.1","tags":["4.0.1","4.0.0","4.0","4","3.11.4","3.11.3","3.11.2","3.11.1","3.11.0","3.11","3.10.2","3.10.1","3.10.0","3.10","3.9.2","3.9.1","3.9.0","3.9","3.8.0","3.8","3.7.1","3.7.0","3.7","3.6.2","3.6.1","3.6.0","3.6","3.5.0","3.5","3.4.0","3.4","3.3.1","3.3.0","3.3","3.2.3","3.2.2","3.2.1","3.2.0","3.2","3.1.4","3.1.3","3.1.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.3.0","2.3","2.2.0","2.1.6","2.1.5","2.1.4","2.1.3","2.1.2","2.1.1","2.1.0","2.0.1","2.0.0","2","1.4.2","1.4.1","1.4.0","1.3.0","1.2.0","1.1.2","1.1.1","1.1.0","1.0.0"],"name":"maven","path":"to-be-continuous/maven","web_url":"https://gitlab.com/to-be-continuous/maven","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454233/logo.png"}},{"name":"MkDocs","description":"Build your static website with [MkDocs](https://www.mkdocs.org/)","template_path":"templates/gitlab-ci-mkdocs.yml","kind":"build","prefix":"mkd","job_prefix":"mkdocs","is_component":true,"variables":[{"name":"MKD_IMAGE","description":"The Docker image used to run MkDocs","default":"docker.io/squidfunk/mkdocs-material:latest"},{"name":"MKD_BUILD_ARGS","description":"Arguments used by the build job","advanced":true},{"name":"MKD_WORKSPACE_DIR","description":"MkDocs sources directory","default":".","advanced":true},{"name":"MKD_SITE_DIR","description":"MkDocs generated site directory (relative to `$MKD_WORKSPACE_DIR`)","default":"site","advanced":true},{"name":"MKD_REQUIREMENTS_FILE","description":"Requirements file. If the file is not found in the repository, requirements are read from the `MKD_REQUIREMENTS` variable","default":"requirements.txt","advanced":true},{"name":"MKD_REQUIREMENTS","description":"Space separated requirements (ignored if a requirement file is found)","default":"mkdocs","advanced":true},{"name":"MKD_PREBUILD_SCRIPT","description":"Pre-build hook script","default":"mkdocs-pre-build.sh","advanced":true},{"name":"PIP_OPTS","description":"pip extra [options](https://pip.pypa.io/en/stable/cli/pip/#general-options)","advanced":true}],"features":[{"id":"lychee","name":"lychee","description":"Checks broken links and emails with [lychee](https://github.com/lycheeverse/lychee)","enable_with":"MKD_LYCHEE_ENABLED","variables":[{"name":"MKD_LYCHEE_IMAGE","description":"The Docker image used to run [lychee](https://github.com/lycheeverse/lychee)","default":"docker.io/lycheeverse/lychee:latest","advanced":true},{"name":"MKD_LYCHEE_ARGS","description":"[lychee arguments](https://github.com/lycheeverse/lychee#commandline-parameters) to execute","default":"docs/"}]}],"variants":[{"id":"pages","name":"GitLab Pages","description":"Adds a job to publish the generated site to GitLab pages","template_path":"templates/gitlab-ci-mkdocs-pages.yml"}],"extension_id":null,"project":{"tag":"2.7.0","tags":["2.7.0","2.7","2.6.1","2.6.0","2.6","2.5.1","2.5.0","2.5","2.4.0","2.4","2.3.1","2.3.0","2.3","2.2.1","2.2.0","2.2","2.1.0","2.1","2.0.1","2.0.0","2.0","2","1.5.0","1.5","1.4.3","1.4.2","1.4.1","1.4.0","1.3.0","1.2.0","1.1.1","1.1.0","1.0.0","1"],"name":"mkdocs","path":"to-be-continuous/mkdocs","web_url":"https://gitlab.com/to-be-continuous/mkdocs","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26450936/logo.png"}},{"name":"MobSF","description":"Perform pen-testing, malware analysis and security assessment for mobile applications with [Mobile Security Framework](https://github.com/MobSF/Mobile-Security-Framework-MobSF) (MobSF)","template_path":"templates/gitlab-ci-mobsf.yml","kind":"analyse","prefix":"mobsf","is_component":true,"variables":[{"name":"MOBSF_CLIENT_IMAGE","description":"The Docker image used to send requests to the MobSF server","default":"registry.hub.docker.com/badouralix/curl-jq"},{"name":"MOBSF_SERVER_URL","description":"URL of MobSF server","mandatory":false},{"name":"MOBSF_API_KEY","description":"API key of the MobSF server","secret":true},{"name":"MOBSF_APP_FILE","description":"Application package file (APK or IPA)","mandatory":true}],"extension_id":null,"project":{"tag":"2.3.1","tags":["2.3.1","2.3.0","2.3","2.2.0","2.2","2.1.3","2.1.2","2.1.1","2.1.0","2.1","2.0.2","2.0.1","2.0.0","2.0","2","1.2.0","1.2","1.1.0","1.0.1","1.0.0","1"],"name":"mobsf","path":"to-be-continuous/mobsf","web_url":"https://gitlab.com/to-be-continuous/mobsf","avatar":"https://gitlab.com/uploads/-/system/project/avatar/29247375/logo.png"}},{"name":"Node.js","description":"Build, test and analyse your JavaScript/TypeScript/[Node.js](https://nodejs.org/) projects","template_path":"templates/gitlab-ci-node.yml","kind":"build","prefix":"node","is_component":true,"variables":[{"name":"NODE_CONFIG_REGISTRY","description":"npm [registry](https://docs.npmjs.com/cli/v8/using-npm/registry)    ","type":"url","advanced":true},{"name":"NODE_IMAGE","description":"The Docker image used to run Node.js - **set the version required by your project**","default":"registry.hub.docker.com/library/node:lts-alpine"},{"name":"NODE_MANAGER","description":"The package manager used by your project (npm, yarn or pnpm) - **if undefined, automatic detection**","default":"auto","type":"enum","values":["auto","npm","yarn","pnpm"],"advanced":true},{"name":"NODE_PROJECT_DIR","description":"Node project root directory","default":".","advanced":true},{"name":"NODE_SOURCE_DIR","description":"Sources directory","default":"src","advanced":true},{"name":"NODE_CONFIG_SCOPED_REGISTRIES","description":"Space separated list of NPM [scoped registries](https://docs.npmjs.com/cli/v8/using-npm/scope#associating-a-scope-with-a-registry) (formatted as `@somescope:https://some.npm.registry/some/repo @anotherscope:https://another.npm.registry/another/repo`)","advanced":true},{"name":"NODE_BUILD_DISABLED","description":"Set to true to disable build","default":"false","type":"boolean","advanced":true},{"name":"NODE_BUILD_ARGS","description":"npm [run script](https://docs.npmjs.com/cli/v8/commands/npm-run-script) arguments - yarn [run script](https://classic.yarnpkg.com/en/docs/cli/run) arguments - pnpm [run script](https://pnpm.io/cli/run) arguments\n\n⚠ default value should be overridden for `pnpm` as `--prod` is not a valid option","default":"run build --prod","advanced":true},{"name":"NODE_BUILD_DIR","description":"Variable to define build directory","default":"dist","advanced":true},{"name":"NODE_TEST_ARGS","description":"npm [test](https://docs.npmjs.com/cli/v8/commands/npm-test) arguments - yarn [test](https://classic.yarnpkg.com/en/docs/cli/test) arguments - pnpm [test](https://pnpm.io/cli/test) arguments","default":"test -- --coverage","advanced":true},{"name":"NODE_INSTALL_EXTRA_OPTS","description":"Extra options to install project dependencies (either [`npm ci`](https://docs.npmjs.com/cli/ci.html/), [`yarn install`](https://yarnpkg.com/cli/install) or [`pnpm install`](https://pnpm.io/cli/install))","advanced":true}],"features":[{"id":"node-lint","name":"node lint","description":"code analysis with [ESLint](https://eslint.org/)","enable_with":"NODE_LINT_ENABLED","variables":[{"name":"NODE_LINT_ARGS","description":"npm [run script](https://docs.npmjs.com/cli/v8/commands/npm-run-script) arguments to execute the lint analysis - yarn [run script](https://classic.yarnpkg.com/en/docs/cli/run) arguments to execute the lint analysis - pnpm [run script](https://pnpm.io/cli/run) arguments to execute the lint analysis","default":"run lint","advanced":true}]},{"id":"node-audit","name":"node audit","description":"node audit analysis","disable_with":"NODE_AUDIT_DISABLED","variables":[{"name":"NODE_AUDIT_ARGS","description":"npm [audit](https://docs.npmjs.com/cli/v8/commands/npm-audit) arguments - yarn [audit](https://classic.yarnpkg.com/en/docs/cli/audit) arguments - [pnpm audit](https://pnpm.io/cli/audit) arguments","default":"--audit-level=low"}]},{"id":"node-outdated","name":"node outdated","description":"node outdated analysis","disable_with":"NODE_OUTDATED_DISABLED","variables":[{"name":"NODE_OUTDATED_ARGS","description":"npm [outdated](https://docs.npmjs.com/cli/v8/commands/npm-outdated) arguments - yarn [outdated](https://classic.yarnpkg.com/lang/en/docs/cli/outdated/) arguments - pnpm [outdated](https://pnpm.io/cli/outdated) arguments","default":"--long"}]},{"id":"node-semgrep","name":"Semgrep","description":"[Semgrep](https://semgrep.dev/docs/) analysis","disable_with":"NODE_SEMGREP_DISABLED","variables":[{"name":"NODE_SEMGREP_IMAGE","description":"The Docker image used to run [Semgrep](https://semgrep.dev/docs/)","default":"registry.hub.docker.com/semgrep/semgrep:latest"},{"name":"NODE_SEMGREP_ARGS","description":"Semgrep [scan options](https://semgrep.dev/docs/cli-reference#semgrep-scan-command-options)","default":"--metrics off --disable-version-check --no-suppress-errors"},{"name":"NODE_SEMGREP_RULES","description":"Space-separated list of [Semgrep rules](https://semgrep.dev/docs/running-rules).\n\nCan be both local YAML files or remote rules from the [Semgrep Registry](https://semgrep.dev/explore) (denoted by the `p/` prefix).","default":"p/javascript p/eslint p/gitlab-eslint"},{"name":"NODE_SEMGREP_REGISTRY_BASE_URL","description":"The Semgrep Registry base URL that is used to download the rules. No trailing slash.","default":"https://semgrep.dev/c"},{"name":"NODE_SEMGREP_DOWNLOAD_RULES_ENABLED","description":"Download Semgrep remote rules","type":"boolean","default":"true"}]},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [@cyclonedx/cyclonedx-npm](https://www.npmjs.com/package/@cyclonedx/cyclonedx-npm)","disable_with":"NODE_SBOM_DISABLED","variables":[{"name":"NODE_SBOM_VERSION","description":"Version of the @cyclonedx/cyclonedx-npm used for SBOM analysis","advanced":true},{"name":"NODE_SBOM_OPTS","description":"Options for @cyclonedx/cyclonedx-npm used for SBOM analysis","default":"--omit dev","advanced":true}]},{"id":"publish","name":"Publish","description":"[publishes](https://docs.npmjs.com/cli/v8/commands/npm-publish) the project package to a npm registry","enable_with":"NODE_PUBLISH_ENABLED","variables":[{"name":"NODE_PUBLISH_ARGS","description":"npm [publish](https://docs.npmjs.com/cli/v8/commands/npm-publish) extra arguments - yarn [publish](https://classic.yarnpkg.com/lang/en/docs/cli/publish/) extra arguments - pnpm [publish](https://pnpm.io/cli/publish) extra arguments","advanced":true},{"name":"NODE_PUBLISH_TOKEN","description":"npm publication registry authentication token","secret":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-node-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"4.1.1","tags":["4.1.1","4.1.0","4.1","4.0.3","4.0.2","4.0.1","4.0.0","4.0","4","3.15.2","3.15.1","3.15.0","3.15","3.14.0","3.14","3.13.0","3.13","3.12.3","3.12.2","3.12.1","3.12.0","3.12","3.11.1","3.11.0","3.11","3.10.1","3.10.0","3.10","3.9.0","3.9","3.8.0","3.8","3.7.1","3.7.0","3.7","3.6.0","3.6","3.5.3","3.5.2","3.5.1","3.5.0","3.5","3.4.2","3.4.1","3.4.0","3.4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.0","3.1","3.0.1","3.0.0","3.0","3","2.4.0","2.4","2.3.0","2.3","2.2.0","2.1.0","2.0.2","2.0.1","2.0.0","2","1.2.0","1.1.1","1.1.0","1.0.0"],"name":"node","path":"to-be-continuous/node","web_url":"https://gitlab.com/to-be-continuous/node","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454237/logo.png"}},{"name":"OpenShift","description":"Deploy your application to an [OpenShift](https://www.openshift.com/) platform","template_path":"templates/gitlab-ci-openshift.yml","kind":"hosting","prefix":"os","is_component":true,"variables":[{"name":"OS_CLI_IMAGE","description":"the Docker image used to run OpenShift Client (OC) CLI commands - **set the version required by your OpenShift server**","default":"quay.io/openshift/origin-cli:latest"},{"name":"OS_URL","type":"url","description":"Global OpenShift API url","mandatory":true},{"name":"OS_TOKEN","description":"Global OpenShift API token","secret":true,"mandatory":true},{"name":"OS_BASE_APP_NAME","description":"Base application name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"OS_BASE_TEMPLATE_NAME","description":"Base OpenShift template name","default":"openshift","advanced":true},{"name":"OS_ENVIRONMENT_URL","type":"url","description":"The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.openshift.acme.com`)_"},{"name":"OS_SCRIPTS_DIR","description":"directory where OpenShift scripts (templates, hook scripts) are located","default":".","advanced":true},{"name":"OS_APP_LABEL","description":"The OpenShift [label](https://docs.openshift.com/container-platform/3.11/dev_guide/templates.html#writing-labels) set with the `$environment_name` dynamic variable.","default":"app","advanced":true},{"name":"OS_ENV_LABEL","description":"The OpenShift [label](https://docs.openshift.com/container-platform/3.11/dev_guide/templates.html#writing-labels) set with the `$environment_type` dynamic variable.","default":"env","advanced":true}],"features":[{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","variables":[{"name":"OS_REVIEW_PROJECT","description":"OpenShift project for review env","mandatory":true},{"name":"OS_REVIEW_APP_NAME","description":"The application name for review env (only define to override default)","advanced":true},{"name":"OS_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"},{"name":"OS_REVIEW_ENVIRONMENT_URL","type":"url","description":"The review environments url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"OS_REVIEW_URL","type":"url","description":"OpenShift API url for review env (only define to override default)","advanced":true},{"name":"OS_REVIEW_TOKEN","description":"OpenShift API token for review env (only define to override default)","secret":true},{"name":"CLEANUP_ALL_REVIEW","description":"Enables a **manual** job to cleanup all review envs at once.\n\nYou may also use it to [schedule](https://docs.gitlab.com/ee/ci/pipelines/schedules.html) cloud resources cleanup. See documentation.","type":"boolean"}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","variables":[{"name":"OS_INTEG_PROJECT","description":"OpenShift project for integration env","mandatory":true},{"name":"OS_INTEG_APP_NAME","description":"The application name for integration env (only define to override default)","advanced":true},{"name":"OS_INTEG_ENVIRONMENT_URL","type":"url","description":"The integration environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"OS_INTEG_URL","type":"url","description":"OpenShift API url for integration env (only define to override default)","advanced":true},{"name":"OS_INTEG_TOKEN","description":"OpenShift API token for integration env (only define to override default)","secret":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","variables":[{"name":"OS_STAGING_PROJECT","description":"OpenShift project for staging env","mandatory":true},{"name":"OS_STAGING_APP_NAME","description":"The application name for staging env (only define to override default)","advanced":true},{"name":"OS_STAGING_ENVIRONMENT_URL","type":"url","description":"The staging environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"OS_STAGING_URL","type":"url","description":"OpenShift API url for staging env (only define to override default)","advanced":true},{"name":"OS_STAGING_TOKEN","description":"OpenShift API token for staging env (only define to override default)","secret":true}]},{"id":"prod","name":"Production","description":"The production environment","variables":[{"name":"OS_PROD_PROJECT","description":"OpenShift project for production env","mandatory":true},{"name":"OS_PROD_APP_NAME","description":"The application name for production env (only define to override default)","advanced":true},{"name":"OS_PROD_ENVIRONMENT_URL","type":"url","description":"The production environment url _(only define for static environment URLs declaration and if different from default)_","advanced":true},{"name":"OS_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"OS_PROD_URL","type":"url","description":"OpenShift API url for production env (only define to override default)","advanced":true},{"name":"OS_PROD_TOKEN","description":"OpenShift API token for production env (only define to override default)","secret":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-openshift-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"5.2.3","tags":["5.2.3","5.2.2","5.2.1","5.2.0","5.2","5.1.0","5.1","5.0.1","5.0.0","5.0","5","4.1.0","4.1","4.0.0","4.0","4","3.1.0","3.1","3.0.0","3.0","3","2.2.5","2.2.4","2.2.3","2.2.2","2.2.1","2.2.0","2.2","2.1.0","2.1","2.0.0","2.0","2","1.4.0","1.4","1.3.0","1.3","1.2.7","1.2.6","1.2.5","1.2.4","1.2.3","1.2.2","1.2.1","1.2.0","1.1.0","1.0.0","1"],"name":"openshift","path":"to-be-continuous/openshift","web_url":"https://gitlab.com/to-be-continuous/openshift","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454239/logo.png"}},{"name":"PHP","description":"Build, test and analyse your [PHP](https://www.php.net/) projects","template_path":"templates/gitlab-ci-php.yml","kind":"build","prefix":"php","is_component":true,"variables":[{"name":"PHP_IMAGE","description":"The Docker image used to run PHP - **set the version required by your project**","default":"registry.hub.docker.com/library/php:latest"},{"name":"PHP_PROJECT_DIR","description":"The PHP project root directory","default":".","advanced":true}],"features":[{"id":"phpunit","name":"PHPUnit","description":"[PHPUnit](https://docs.phpunit.de/) tests\n\nAutomatically enabled if a PHPUnit [XML configuration file](https://docs.phpunit.de/en/11.5/configuration.html#appendixes-configuration) is found in the project (`phpunit.xml`)","disable_with":"PHP_UNIT_DISABLED","variables":[{"name":"PHP_UNIT_ARGS","description":"Additional PHPUnit [options](https://docs.phpunit.de/en/11.5/textui.html#command-line-options)","advanced":true}]},{"id":"codesniffer","name":"PHP_CodeSniffer","description":"[PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) analysis","disable_with":"PHP_CODESNIFFER_DISABLED","variables":[{"name":"PHP_CODESNIFFER_ARGS","description":"PHP_CodeSniffer [options](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options)\n\nEither use this variable or use an [XML configuration file](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#using-a-default-configuration-file) in your project.","advanced":true}]},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [@cyclonedx/cyclonedx-php](https://github.com/CycloneDX/cyclonedx-php-composer)","disable_with":"PHP_SBOM_DISABLED","variables":[{"name":"PHP_SBOM_VERSION","description":"Version of the cyclonedx-php-composer used for SBOM analysis","advanced":true},{"name":"PHP_SBOM_OPTS","description":"[`cyclonedx/cyclonedx-php` options](https://github.com/CycloneDX/cyclonedx-php-composer#usage) used for SBOM analysis","advanced":true}]},{"id":"outdated","name":"composer outdated","description":"Shows the list of installed packages that have updates available (uses [`composer outdated`](https://getcomposer.org/doc/03-cli.md#outdated))","variables":[{"name":"PHP_OUTDATED_OPTS","description":"[`composer outdated` options](https://getcomposer.org/doc/03-cli.md#outdated)","default":"--direct","advanced":true}]},{"id":"audit","name":"composer audit","description":" Scan your dependencies for vulnerabilities with [`composer audit`](https://getcomposer.org/doc/03-cli.md#audit)","disable_with":"PHP_COMPOSER_AUDIT_DISABLED","variables":[{"name":"PHP_COMPOSER_AUDIT_OPTS","description":"[`composer audit` options](https://getcomposer.org/doc/03-cli.md#audit)","default":"--locked","advanced":true}]}],"extension_id":null,"project":{"tag":"4.8.0","tags":["4.8.0","4.8","4.7.1","4.7.0","4.7","4.6.0","4.6","4.5.0","4.5","4.4.2","4.4.1","4.4.0","4.4","4.3.0","4.3","4.2.2","4.2.1","4.2.0","4.2","4.1.0","4.1","4.0.0","4.0","4","3.0.0","3.0","3","2.1.0","2.1","2.0.1","2.0.0","2","1.2.1","1.2.0","1.1.1","1.1.0","1.0.0"],"name":"php","path":"to-be-continuous/php","web_url":"https://gitlab.com/to-be-continuous/php","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454241/logo.png"}},{"name":"Playwright","description":"Run your automated tests with [Playwright](https://playwright.dev/docs/intro)","template_path":"templates/gitlab-ci-playwright.yml","kind":"acceptance","prefix":"playwright","is_component":true,"variables":[{"name":"PLAYWRIGHT_IMAGE","description":"The Docker image used to run Playwright","default":"mcr.microsoft.com/playwright:latest"},{"name":"PLAYWRIGHT_PROJECT_DIR","description":"The Playwright root project directory (contains the `playwright.config.ts` file)","default":"."},{"name":"PLAYWRIGHT_EXTRA_ARGS","description":"Playwright extra [run options](https://playwright.dev/docs/test-cli)","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable Playwright tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"},{"name":"NODE_INSTALL_EXTRA_OPTS","description":"Extra [`npm ci`](https://docs.npmjs.com/cli/ci.html/) options to install project dependencies","type":"text"}],"extension_id":null,"project":{"tag":"1.4.0","tags":["1.4.0","1.4","1.3.1","1.3.0","1.3","1.2.0","1.2","1.1.0","1.1","1.0.0","1.0","1"],"name":"playwright","path":"to-be-continuous/playwright","web_url":"https://gitlab.com/to-be-continuous/playwright","avatar":"https://gitlab.com/uploads/-/system/project/avatar/51928175/logo.png"}},{"name":"Postman","description":"Run your automated (API) tests with [Postman](https://www.postman.com/automated-testing)","template_path":"templates/gitlab-ci-postman.yml","kind":"acceptance","prefix":"postman","is_component":true,"variables":[{"name":"POSTMAN_IMAGE","description":"The Docker image used to run Postman CLI.","default":"registry.hub.docker.com/postman/newman:latest"},{"name":"POSTMAN_COLLECTIONS","description":"The matcher to select Postman collection file(s) to run.","default":"postman/*collection.json"},{"name":"POSTMAN_EXTRA_ARGS","description":"Newman extra [run options](https://github.com/postmanlabs/newman#command-line-options) (to use global variables, an environment or a data source for e.g.)","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable Postman tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"3.6.0","tags":["3.6.0","3.6","3.5.0","3.5","3.4.1","3.4.0","3.4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.1.0","2.1","2.0.2","2.0.1","2.0.0","2","1.2.0","1.1.0","1.0.0"],"name":"postman","path":"to-be-continuous/postman","web_url":"https://gitlab.com/to-be-continuous/postman","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454247/logo.png"}},{"name":"pre-commit","description":"Test your [pre-commit](https://pre-commit.com/) hooks in CI","template_path":"templates/gitlab-ci-pre-commit.yml","kind":"build","prefix":"pre-commit","is_component":true,"variables":[{"name":"PRE_COMMIT_IMAGE","description":"The Docker image used to run `pre-commit`\n\n:information_source: You may build your own pre-configured image to speed-up things and prevent the tool and plugins from being pip-installed (see documentation).","default":"registry.hub.docker.com/library/python:3-alpine"}],"features":[{"id":"pre-commit-run","name":"pre-commit run","description":"[pre-commit](https://pre-commit.com/) analysis","disable_with":"PRE_COMMIT_DISABLED","variables":[{"name":"PRE_COMMIT_ARGS","description":"Additionnal arguments for the `pre-commit run` command","advanced":true},{"name":"PRE_COMMIT_SKIP","description":"pre-commit `SKIP` environment variable that allows to disable some hooks (see https://pre-commit.com/#temporarily-disabling-hooks)","default":"no-commit-to-branch","advanced":true},{"name":"PRE_COMMIT_FILE","description":"pre-commit config file to use for the `pre-commit run` command","default":".pre-commit-ci.yaml","advanced":true}]}],"extension_id":null,"project":{"tag":"1.1.1","tags":["1.1.1","1.1.0","1.1","1.0.2","1.0.1","1.0.0","1.0","1"],"name":"pre-commit","path":"to-be-continuous/pre-commit","web_url":"https://gitlab.com/to-be-continuous/pre-commit","avatar":"https://gitlab.com/uploads/-/system/project/avatar/56753211/logo.png"}},{"name":"Puppeteer","description":"Run your automated (web) tests with [Puppeteer](https://pptr.dev/)","template_path":"templates/gitlab-ci-puppeteer.yml","kind":"acceptance","prefix":"puppeteer","is_component":true,"variables":[{"name":"PUPPETEER_IMAGE","description":"The Docker image used to run [Puppeteer](https://hub.docker.com/r/ghcr.io/puppeteer/puppeteer)","default":"ghcr.io/puppeteer/puppeteer:latest"},{"name":"PUPPETEER_PROJECT_DIR","description":"The Puppeteer project directory (containing `package.json`)","default":"."},{"name":"PUPPETEER_TEST_EXTRA_ARGS","description":"Testing framework extra options based on [Jest](https://jestjs.io/docs/en/cli)","advanced":true},{"name":"REVIEW_ENABLED","description":"Set to enable Puppeteer tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"3.6.0","tags":["3.6.0","3.6","3.5.0","3.5","3.4.1","3.4.0","3.4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.0","3.1","3.0.0","3.0","3","2.1.0","2.1","2.0.1","2.0.0","2","1.2.0","1.1.0","1.0.0"],"name":"puppeteer","path":"to-be-continuous/puppeteer","web_url":"https://gitlab.com/to-be-continuous/puppeteer","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454250/logo.png"}},{"name":"Python","description":"Build, test and analyse your [Python](https://www.python.org/) projects","template_path":"templates/gitlab-ci-python.yml","kind":"build","prefix":"python","job_prefix":"py","is_component":true,"variables":[{"name":"PYTHON_IMAGE","description":"The Docker image used to run Python - **set the version required by your project**","default":"registry.hub.docker.com/library/python:3-slim"},{"name":"PYTHON_PROJECT_DIR","description":"Python project root directory","default":"."},{"name":"PYTHON_BUILD_SYSTEM","description":"Python build-system to use to install dependencies, build and package the project","type":"enum","values":["auto","setuptools","poetry","pipenv","reqfile","uv"],"default":"auto","advanced":true},{"name":"PYTHON_REQS_FILE","description":"Main requirements file _(relative to `$PYTHON_PROJECT_DIR`)_\n\nFor [Requirements Files](https://pip.pypa.io/en/stable/user_guide/#requirements-files) build-system only","default":"requirements.txt","advanced":true},{"name":"PYTHON_EXTRA_REQS_FILES","description":"Extra dev requirements file(s) to install _(relative to `$PYTHON_PROJECT_DIR`)_\n\nFor [Requirements Files](https://pip.pypa.io/en/stable/user_guide/#requirements-files) build-system only","default":"requirements-dev.txt","advanced":true},{"name":"PYTHON_COMPILE_ARGS","description":"[`compileall` CLI options](https://docs.python.org/3/library/compileall.html)","default":"*","advanced":true},{"name":"PIP_OPTS","description":"pip extra [options](https://pip.pypa.io/en/stable/cli/pip/#general-options)","advanced":true},{"name":"PYTHON_EXTRA_DEPS","description":"Extra sets of dependencies to install\n\nFor [Setuptools](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html?highlight=extras#optional-dependencies) or [Poetry](https://python-poetry.org/docs/pyproject/#extras) only"}],"features":[{"id":"package","name":"package","description":"This job allows building your Python project [distribution packages](https://packaging.python.org/en/latest/glossary/#term-Distribution-Package).","enable_with":"PYTHON_PACKAGE_ENABLED"},{"id":"pylint","name":"pylint","description":"Code analysis based on [pylint](http://pylint.pycqa.org/en/latest/) Python lib.","enable_with":"PYLINT_ENABLED","variables":[{"name":"PYLINT_ARGS","description":"Additional [pylint CLI options](http://pylint.pycqa.org/en/latest/user_guide/run.html#command-line-options)","advanced":true},{"name":"PYLINT_FILES","description":"Files or directories to analyse","advanced":true}]},{"id":"unittest","name":"unittest","description":"Unit tests based on [unittest](https://docs.python.org/3/library/unittest.html) framework","enable_with":"UNITTEST_ENABLED","variables":[{"name":"UNITTEST_ARGS","description":"Additional xmlrunner/unittest CLI options","advanced":true}]},{"id":"pytest","name":"pytest","description":"Unit tests based on [pytest](https://docs.pytest.org/) framework","enable_with":"PYTEST_ENABLED","variables":[{"name":"PYTEST_ARGS","description":"Additional [pytest](https://docs.pytest.org/en/stable/usage.html) or [pytest-cov](https://github.com/pytest-dev/pytest-cov#usage) CLI options","advanced":true}]},{"id":"nose","name":"nose","description":"Unit tests based on [nose](https://nose.readthedocs.io/) framework","enable_with":"NOSETESTS_ENABLED","variables":[{"name":"NOSETESTS_ARGS","description":"Additional [nose CLI options](https://nose.readthedocs.io/en/latest/usage.html#options)","advanced":true}]},{"id":"bandit","name":"Bandit","description":"[Bandit](https://pypi.org/project/bandit/) analysis (SAST)","enable_with":"BANDIT_ENABLED","variables":[{"name":"BANDIT_ARGS","description":"Additional [Bandit CLI options](https://github.com/PyCQA/bandit#usage)","default":"--recursive .","advanced":true}]},{"id":"trivy","name":"Trivy","description":"Detect security vulnerabilities with [Trivy](https://aquasecurity.github.io/trivy) (dependencies analysis)","disable_with":"PYTHON_TRIVY_DISABLED","variables":[{"name":"PYTHON_TRIVY_DIST_URL","description":"Url to the `tar.gz` package for `linux_amd64` of Trivy to use\n\n_When unset, the latest version will be used_","advanced":true},{"name":"PYTHON_TRIVY_ARGS","description":"Additional [Trivy CLI options](https://aquasecurity.github.io/trivy/latest/docs/references/configuration/cli/trivy_filesystem/)","default":"--ignore-unfixed --pkg-types library --detection-priority comprehensive","advanced":true}]},{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)","disable_with":"PYTHON_SBOM_DISABLED","variables":[{"name":"PYTHON_SBOM_SYFT_URL","description":"Url to the `tar.gz` package for `linux_amd64` of Syft to use\n\n_When unset, the latest version will be used_","advanced":true},{"name":"PYTHON_SBOM_NAME","description":"Component name of the emitted SBOM","default":"$CI_PROJECT_PATH/$PYTHON_PROJECT_DIR","advanced":true},{"name":"PYTHON_SBOM_OPTS","description":"Options for syft used for SBOM analysis","default":"--override-default-catalogers python-package-cataloger","advanced":true}]},{"id":"release","name":"Release","description":"Manually trigger a release of your code (uses [bumpversion](https://pypi.org/project/bumpversion/))","enable_with":"PYTHON_RELEASE_ENABLED","variables":[{"name":"PYTHON_RELEASE_NEXT","type":"enum","values":["","major","minor","patch"],"description":"The part of the version to increase (one of: `major`, `minor`, `patch`)","default":"minor","advanced":true},{"name":"PYTHON_SEMREL_RELEASE_DISABLED","description":"Disable semantic-release integration","type":"boolean","advanced":true},{"name":"PYTHON_RELEASE_COMMIT_MESSAGE","description":"The Git commit message to use on the release commit. This is templated using the [Python Format String Syntax](http://docs.python.org/2/library/string.html#format-string-syntax). Available in the template context are current_version and new_version.","default":"chore(python-release): {current_version} → {new_version}","advanced":true},{"name":"GIT_USERNAME","description":"Git username for Git push operations","secret":true},{"name":"GIT_PASSWORD","description":"Git password for Git push operations","secret":true},{"name":"GIT_PRIVATE_KEY","description":"SSH key for Git push operations","secret":true},{"name":"PYTHON_REPOSITORY_URL","type":"url","description":"Target PyPI repository to publish packages.\n\n_defaults to [GitLab project's packages repository](https://docs.gitlab.com/ee/user/packages/pypi_repository/)_","default":"${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/packages/pypi"},{"name":"PYTHON_REPOSITORY_USERNAME","description":"Target PyPI repository username credential","secret":true,"default":"gitlab-ci-token"},{"name":"PYTHON_REPOSITORY_PASSWORD","description":"Target PyPI repository password credential","secret":true,"default":"$CI_JOB_TOKEN"}]},{"id":"black","name":"black","description":"Code formatting based on [black](https://black.readthedocs.io)","enable_with":"PYTHON_BLACK_ENABLED"},{"id":"isort","name":"isort","description":"Check imports order with [isort](https://pycqa.github.io/isort)","enable_with":"PYTHON_ISORT_ENABLED"},{"id":"ruff","name":"Ruff","description":"An extremely fast Python linter and code formatter, written in Rust. [Ruff](https://docs.astral.sh/ruff/)","enable_with":"RUFF_ENABLED","variables":[{"name":"RUFF_ARGS","description":"Additional [Ruff Linter CLI options](https://docs.astral.sh/ruff/configuration/#full-command-line-interface)","advanced":true}]},{"id":"ruff-format","name":"Ruff Format","description":"An extremely fast Python linter and code formatter, written in Rust. [Ruff](https://docs.astral.sh/ruff/)","enable_with":"RUFF_FORMAT_ENABLED","variables":[]},{"id":"mypy","name":"mypy","description":"Code analysis based on [mypy](https://mypy.readthedocs.io/).","enable_with":"MYPY_ENABLED","variables":[{"name":"MYPY_ARGS","description":"Additional [mypy CLI options](https://mypy.readthedocs.io/en/stable/command_line.html)","advanced":true},{"name":"MYPY_FILES","description":"Files or directories to analyse","advanced":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-python-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]},{"id":"gcp-auth-provider","name":"Google Cloud","description":"Retrieves an [ADC](https://cloud.google.com/docs/authentication/application-default-credentials) for Python Google Client","template_path":"templates/gitlab-ci-python-gcp.yml","variables":[{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Default Service Account to which impersonate with OpenID Connect authentication"},{"name":"GCP_OIDC_PROVIDER","description":"Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"}]},{"id":"aws-codeartifact","name":"AWS CodeArtifact","description":"Retrieves AWS CodeArtifact credentials","template_path":"templates/gitlab-ci-python-aws-codeartifact.yml","variables":[{"name":"TBC_AWS_PROVIDER_IMAGE","description":"The [AWS Auth Provider](https://gitlab.com/to-be-continuous/tools/aws-auth-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/aws-auth-provider:latest","advanced":true},{"name":"AWS_REGION","description":"Default region (where the codeartifact repository is located)"},{"name":"AWS_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"AWS_OIDC_ROLE_ARN","description":"Default IAM Role ARN associated with GitLab _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_"},{"name":"AWS_ACCESS_KEY_ID","description":"Default access key ID (only required for basic authentication)","secret":true,"advanced":true},{"name":"AWS_SECRET_ACCESS_KEY","description":"Default secret access key (only required for basic authentication)","secret":true,"advanced":true},{"name":"AWS_CODEARTIFACT_DOMAIN","description":"The AWS CodeArtifact domain","mandatory":true},{"name":"AWS_CODEARTIFACT_DOMAIN_OWNER","description":"The AWS CodeArtifact domain owner","mandatory":true},{"name":"AWS_CODEARTIFACT_REPOSITORY","description":"The AWS CodeArtifact repository","mandatory":true}]}],"extension_id":null,"project":{"tag":"7.5.2","tags":["7.5.2","7.5.1","7.5.0","7.5","7.4.0","7.3.3","7.3.2","7.3.1","7.3.0","7.3","7.2.0","7.2","7.1.1","7.1.0","7.1","7.0.2","7.0.1","7.0.0","7.0","7","6.11.1","6.11.0","6.11","6.10.0","6.10","6.9.0","6.9","6.8.1","6.8.0","6.8","6.7.0","6.7","6.6.5","6.6.4","6.6.3","6.6.2","6.6.1","6.6.0","6.6","6.5.0","6.5","6.4.1","6.4.0","6.4","6.3.5","6.3.4","6.3.3","6.3.2","6.3.1","6.3.0","6.3","6.2.0","6.2","6.1.5","6.1.4","6.1.3","6.1.2","6.1.1","6.1.0","6.1","6.0.2","6.0.1","6.0.0","6.0","6","5.1.0","5.1","5.0.0","5.0","5","4.2.0","4.2","4.1.1","4.1.0","4.1","4.0.1","4.0.0","4","3.2.1","3.2.0","3.1.1","3.1.0","3.0.1","3.0.0","2.2.0","2.1.1","2.1.0","2.0.3","2.0.2","2.0.1","2.0.0","1.3.0","1.2.3","1.2.2","1.2.1","1.2.0","1.1.0","1.0.0"],"name":"python","path":"to-be-continuous/python","web_url":"https://gitlab.com/to-be-continuous/python","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454253/logo.png"}},{"name":"Renovate","description":"Automate your dependency updates with [Renovate](https://www.mend.io/renovate/)","template_path":"templates/gitlab-ci-renovate.yml","kind":"misc","prefix":"renovate","is_component":true,"variables":[{"name":"RENOVATE_IMAGE","description":"The Docker image used to run Renovate","default":"registry.hub.docker.com/renovate/renovate:latest"},{"name":"RENOVATE_ONBOARDING_CONFIG","description":"Renovate configuration to use for onboarding PRs","default":"{\n  \"$$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:recommended\",\n    \":dependencyDashboard\"\n  ],\n \"labels\": [\n   \"dependencies\"\n  ],\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"fileMatch\": [ \"\\\\.gitlab-ci\\\\.ya?ml$\" ], \n      \"matchStrings\": [ \"\\\\s?_IMAGE:\\\\s['\\\"](?<registryUrls>.*?)\\\\/(?<depName>.*?):(?<currentValue>.*)['\\\"]\" ], \n      \"datasourceTemplate\": \"docker\" \n    },\n    {\n      \"customType\": \"regex\",\n      \"fileMatch\": [ \"\\\\.gitlab-ci\\\\.ya?ml$\" ], \n      \"matchStrings\": [ \"\\\\s?image:\\\\s['\\\"](?<registryUrls>.*?)\\\\/(?<depName>.*?):(?<currentValue>.*)['\\\"]\" ], \n      \"datasourceTemplate\": \"docker\" \n    }\n  ] \n}"},{"name":"RENOVATE_TOKEN","description":"A GitLab access token to allow Renovate crawl your projects. [See doc](https://docs.renovatebot.com/modules/platform/gitlab/#authentication)","secret":true},{"name":"GITHUB_COM_TOKEN","description":"A GitHub access token to allow Renovate fetch changelogs. [See doc](https://docs.renovatebot.com/getting-started/running/#githubcom-token-for-changelogs)","secret":true}],"extension_id":null,"project":{"tag":"1.4.1","tags":["1.4.1","1.4.0","1.4","1.3.0","1.3","1.2.2","1.2.1","1.2.0","1.2","1.1.0","1.1","1.0.0","1.0","1"],"name":"renovate","path":"to-be-continuous/renovate","web_url":"https://gitlab.com/to-be-continuous/renovate","avatar":"https://gitlab.com/uploads/-/system/project/avatar/48678619/logo.png"}},{"name":"Robot Framework","description":"Run your automated tests with [Robot Framework](https://robotframework.org/)","template_path":"templates/gitlab-ci-robotframework.yml","kind":"acceptance","prefix":"robot","job_prefix":"robotframework","is_component":true,"variables":[{"name":"ROBOT_BASE_IMAGE","description":"The Docker image used to run Robot frame work CLI","default":"registry.hub.docker.com/ppodgorsek/robot-framework:latest"},{"name":"ROBOT_TESTS_DIR","description":"Path to Robot Framework tests directory","default":"robot"},{"name":"ROBOT_BROWSER","description":"Browser to use","default":"firefox","type":"enum","values":["firefox","chrome"]},{"name":"ROBOT_OPTIONS","description":"Robot Framework [additional options](http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#all-command-line-options)","advanced":true},{"name":"ROBOT_THREADS","description":"Number of threads to execute Robot Framework tests (uses [Pabot](https://pabot.org/) if > `1`)","default":"1","type":"number","advanced":true},{"name":"PABOT_OPTIONS","description":"Pabot [additional options](https://github.com/mkorpela/pabot#command-line-options) (if `ROBOT_THREADS` > `1`)","advanced":true},{"name":"ROBOT_SCREEN_COLOUR_DEPTH","description":"Screen colour depth for X Window Virtual Framebuffer","type":"number","default":"24"},{"name":"ROBOT_SCREEN_HEIGHT","description":"Screen height for X Window Virtual Framebuffer","type":"number","default":"1080"},{"name":"ROBOT_SCREEN_WIDTH","description":"Screen width for X Window Virtual Framebuffer","type":"number","default":"1920"},{"name":"REVIEW_ENABLED","description":"Set to enable Robot Framework tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"features":[{"id":"lint","name":"robotframework-lint","description":"This job performs a [Lint](https://github.com/boakley/robotframework-lint/) analysis on your `Robot Framework files`.","disable_with":"ROBOT_LINT_DISABLED"}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-robotframework-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"4.3.0","tags":["4.3.0","4.3","4.2.2","4.2.1","4.2.0","4.2","4.1.0","4.1","4.0.1","4.0.0","4.0","4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.0","3.1","3.0.0","3.0","3","2.1.0","2.1","2.0.2","2.0.1","2.0.0","2","1.3.0","1.2.0","1.1.0","1.0.0"],"name":"robotframework","path":"to-be-continuous/robotframework","web_url":"https://gitlab.com/to-be-continuous/robotframework","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26546374/logo.png"}},{"name":"Source-to-Image","description":"Build reproducible container images from your source code with [Source-to-Image](https://github.com/openshift/source-to-image) (S2I)","template_path":"templates/gitlab-ci-s2i.yml","kind":"package","prefix":"s2i","is_component":true,"variables":[{"name":"S2I_DIND_IMAGE","description":"The image used to run the Docker daemon","default":"registry.hub.docker.com/library/docker:dind"},{"name":"S2I_SKOPEO_IMAGE","description":"The image used to push the built container image with Skopeo","default":"quay.io/skopeo/stable:latest"},{"name":"S2I_VERSION","description":"The target S2I version to install/use","default":"latest","advanced":true},{"name":"S2I_PLATFORM","description":"The target S2I platform to install/use","default":"linux-386","advanced":true},{"name":"S2I_BUILDER_IMAGE","description":"The S2I [builder image](https://github.com/openshift/source-to-image/blob/master/docs/builder_image.md) used to build your application image","mandatory":true},{"name":"S2I_ROOT_DIR","description":"Relative path to the application source code base directory in your repository","default":".","advanced":true},{"name":"S2I_BUILD_EXTRA_FLAGS","description":"S2I build [extra flags](https://github.com/openshift/source-to-image/blob/master/docs/cli.md#s2i-build)","advanced":true},{"name":"S2I_SNAPSHOT_IMAGE","description":"S2I snapshot image","default":"$CI_REGISTRY_IMAGE/snapshot:$CI_COMMIT_REF_SLUG"},{"name":"S2I_RELEASE_IMAGE","description":"S2I release image","default":"$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"},{"name":"S2I_PUBLISH_ARGS","description":"Additional [`skopeo copy` arguments](https://github.com/containers/skopeo/blob/master/docs/skopeo-copy.1.md#options)","advanced":true},{"name":"S2I_PROD_PUBLISH_STRATEGY","description":"Defines the publish to production strategy.","type":"enum","values":["none","manual","auto"],"default":"manual"},{"name":"S2I_RELEASE_EXTRA_TAGS_PATTERN","description":"Defines the image tag pattern that `$S2I_RELEASE_IMAGE` should match to push extra tags (supports capturing groups)\n\nDefaults to [SemVer](https://semver.org/) pattern.","default":"^v?(?P<major>[0-9]+)\\.(?P<minor>[0-9]+)\\.(?P<patch>[0-9]+)(?P<suffix>(?P<prerelease>-[0-9A-Za-z-\\.]+)?(?P<build>\\+[0-9A-Za-z-\\.]+)?)$","advanced":true},{"name":"S2I_RELEASE_EXTRA_TAGS","description":"Defines extra tags to publish the _release_ image\n\nSupports capturing group references from `$S2I_RELEASE_EXTRA_TAGS_PATTERN` (ex: `latest \\g<major>.\\g<minor> \\g<major>`)","advanced":true},{"name":"S2I_SEMREL_RELEASE_DISABLED","description":"Disable integration with the [semantic release template](https://gitlab.com/to-be-continuous/semantic-release/)","type":"boolean"}],"extension_id":null,"project":{"tag":"1.1.1","tags":["1.1.1","1.1.0","1.1","1.0.1","1.0.0","1.0","1"],"name":"s2i","path":"to-be-continuous/s2i","web_url":"https://gitlab.com/to-be-continuous/s2i","avatar":"https://gitlab.com/uploads/-/system/project/avatar/48540470/logo.png"}},{"name":"S3 (Simple Storage Service)","description":"Deploy your objects to any [S3](https://en.wikipedia.org/wiki/Amazon_S3) (Simple Storage Service) compatible object storage service","template_path":"templates/gitlab-ci-s3.yml","kind":"hosting","prefix":"s3","is_component":true,"variables":[{"name":"S3_CMD_IMAGE","description":"The Docker image used to run [s3cmd](https://s3tools.org/usage) commands","advanced":true,"default":"registry.hub.docker.com/d3fk/s3cmd:latest"},{"name":"S3_ENDPOINT_HOST","description":"Default S3 endpoint hostname (with port)","default":"s3.amazonaws.com","mandatory":true},{"name":"S3_HOST_BUCKET","description":"Default DNS-style bucket+hostname:port template for accessing a bucket","default":"%(bucket)s.$S3_ENDPOINT_HOST","mandatory":true},{"name":"S3_REGION","description":"Default region to create the buckets in (if not defined, the template won't create any)"},{"name":"S3_ACCESS_KEY","description":"Default S3 service Access Key","secret":true,"mandatory":true},{"name":"S3_SECRET_KEY","description":"Default S3 service Secret Key","secret":true,"mandatory":true},{"name":"S3_BASE_BUCKET_NAME","description":"Base bucket name","default":"$CI_PROJECT_NAME","advanced":true},{"name":"S3_DEPLOY_ARGS","description":"[s3cmd](https://s3tools.org/usage) command and options to deploy files to the bucket","default":"sync --recursive --delete-removed --acl-public --no-mime-magic --guess-mime-type","advanced":true},{"name":"S3_DEPLOY_FILES","description":"Pattern(s) of files to deploy to the S3 bucket","default":"public/"},{"name":"S3_WEBSITE_DISABLED","description":"Disables WebSite hosting by your S3 bucket","type":"boolean"},{"name":"S3_WEBSITE_ENDPOINT","description":"Default WebSite endpoint url pattern (supports `%(bucket)s` and `%(location)s` placeholders)","default":"http://%(bucket)s.s3-website.%(location)s.amazonaws.com"},{"name":"S3_WEBSITE_ARGS","description":"[s3cmd](https://s3tools.org/usage) command and options to enable WebSite hosting on the bucket","default":"ws-create --ws-index=index.html --ws-error=404.html","advanced":true},{"name":"S3_PREFIX","description":"Default S3 prefix to use as a root destination to upload objects in the S3 bucket"},{"name":"S3_SCRIPTS_DIR","description":"Directory where S3 hook scripts are located","default":".","advanced":true}],"features":[{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","disable_with":"S3_REVIEW_DISABLED","variables":[{"name":"S3_REVIEW_ENDPOINT_HOST","description":"S3 endpoint hostname (with port) for `review` env  _(only define to override default)_"},{"name":"S3_REVIEW_REGION","description":"Region to create the `review` buckets in (if not defined, the template won't create any)"},{"name":"S3_REVIEW_ACCESS_KEY","description":"S3 service Access Key for `review` env (only define to override default)","secret":true},{"name":"S3_REVIEW_SECRET_KEY","description":"S3 service Secret Key for `review` env  (only define to override default)","secret":true},{"name":"S3_REVIEW_BUCKET_NAME","description":"Bucket name for `review` env _(only define to override default)_","advanced":true},{"name":"CLEANUP_ALL_REVIEW","description":"Enables a **manual** job to cleanup all review envs at once.\n\nYou may also use it to [schedule](https://docs.gitlab.com/ee/ci/pipelines/schedules.html) cloud resources cleanup. See documentation.","type":"boolean"},{"name":"S3_REVIEW_PREFIX","description":"S3 prefix to use for `review` env _(only define to override default)_","advanced":true},{"name":"S3_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","disable_with":"S3_INTEG_DISABLED","variables":[{"name":"S3_INTEG_ENDPOINT_HOST","description":"S3 endpoint hostname (with port) for `integration` env  _(only define to override default)_"},{"name":"S3_INTEG_REGION","description":"Region to create the `integration` bucket in"},{"name":"S3_INTEG_ACCESS_KEY","description":"S3 service Access Key for `integration` env (only define to override default)","secret":true},{"name":"S3_INTEG_SECRET_KEY","description":"S3 service Secret Key for `integration` env  (only define to override default)","secret":true},{"name":"S3_INTEG_BUCKET_NAME","description":"Bucket name for `integration` env _(only define to override default)_","advanced":true},{"name":"S3_INTEG_PREFIX","description":"S3 prefix to use for `integration` env _(only define to override default)_","advanced":true}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","disable_with":"S3_STAGING_DISABLED","variables":[{"name":"S3_STAGING_ENDPOINT_HOST","description":"S3 endpoint hostname (with port) for `staging` env  _(only define to override default)_"},{"name":"S3_STAGING_REGION","description":"Region to create the `staging` bucket in"},{"name":"S3_STAGING_ACCESS_KEY","description":"S3 service Access Key for `staging` env (only define to override default)","secret":true},{"name":"S3_STAGING_SECRET_KEY","description":"S3 service Secret Key for `staging` env  (only define to override default)","secret":true},{"name":"S3_STAGING_BUCKET_NAME","description":"Bucket name for `staging` env _(only define to override default)_","advanced":true},{"name":"S3_STAGING_PREFIX","description":"S3 prefix to use for `staging` env _(only define to override default)_","advanced":true}]},{"id":"prod","name":"Production","description":"The production environment","disable_with":"S3_PROD_DISABLED","variables":[{"name":"S3_PROD_ENDPOINT_HOST","description":"S3 endpoint hostname (with port) for `production` env  _(only define to override default)_"},{"name":"S3_PROD_REGION","description":"Region to create the `production` bucket in"},{"name":"S3_PROD_ACCESS_KEY","description":"S3 service Access Key for `production` env (only define to override default)","secret":true},{"name":"S3_PROD_SECRET_KEY","description":"S3 service Secret Key for `production` env  (only define to override default)","secret":true},{"name":"S3_PROD_BUCKET_NAME","description":"Bucket name for `production` env _(only define to override default)_","advanced":true},{"name":"S3_PROD_DEPLOY_STRATEGY","description":"Defines the deployment to production strategy.","type":"enum","values":["manual","auto"],"default":"manual"},{"name":"S3_PROD_PREFIX","description":"S3 prefix to use for `production` env _(only define to override default)_","advanced":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-s3-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"7.2.3","tags":["7.2.3","7.2.2","7.2.1","7.2.0","7.2","7.1.0","7.1","7.0.1","7.0.0","7.0","7","6.0.0","6.0","6","5.2.0","5.2","5.1.0","5.1","5.0.0","5.0","5","4.1.1","4.1.0","4.1","4.0.0","4.0","4","3.0.0","3.0","3","2.3.0","2.3","2.2.0","2.2","2.1.5","2.1.4","2.1.3","2.1.2","2.1.1","2.1.0","2.0.0","2","1.2.1","1.2.0","1.1.0","1.0.0"],"name":"s3","path":"to-be-continuous/s3","web_url":"https://gitlab.com/to-be-continuous/s3","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26450933/logo.png"}},{"name":"Scala/SBT","description":"Build, test and analyse your [sbt](https://www.scala-sbt.org/)-based projects","template_path":"templates/gitlab-ci-sbt.yml","kind":"build","prefix":"sbt","is_component":true,"variables":[{"name":"SBT_IMAGE","description":"The Docker image used to run sbt - **set the version required by your project**","default":"registry.hub.docker.com/sbtscala/scala-sbt:17.0.2_1.6.2_3.1.3"},{"name":"SBT_BUILD_ARGS","description":"The sbt arguments for the sbt arguments for the [build job packaging](https://www.scala-sbt.org/1.x/docs/Running.html#Common+commands)","default":"clean package","advanced":true},{"name":"SBT_TEST_ARGS","description":"The sbt arguments for the sbt arguments for the [build job test phase](https://www.scala-sbt.org/1.x/docs/Running.html#Common+commands)","default":"coverage test coverageAggregate","advanced":true},{"name":"SBT_OPTS","description":"Global [sbt options](https://www.scala-sbt.org/1.x/docs/Command-Line-Reference.html#sbt+JVM+options+and+system+properties)","default":"-Dsbt.global.base=sbt-cache/sbtboot -Dsbt.boot.directory=sbt-cache/boot -Dsbt.coursier.home=sbt-cache/coursier -Dsbt.ci=true -Dsbt.color=always","advanced":true},{"name":"SBT_CLI_OPTS","description":"Additional sbt options used on the command line","default":"--batch","advanced":true}],"features":[{"id":"sbom","name":"Software Bill of Materials","description":"This job generates a file listing all dependencies using [syft](https://github.com/anchore/syft)","disable_with":"SBT_SBOM_DISABLED","variables":[{"name":"SBT_SBOM_IMAGE","default":"registry.hub.docker.com/anchore/syft:debug","description":"The syft image used for SBOM analysis"},{"name":"SBT_SBOM_OPTS","description":"Options for syft used for SBOM analysis","default":"dir:sbt-cache/coursier --catalogers java-cataloger","advanced":true}]},{"id":"publish","name":"Publish (snapshot & release)","description":"Enable artifacts publishing to a Nexus repository","variables":[{"name":"SBT_PUBLISH_MODE","description":"Publish mode (one of `snapshot`, `ontag`, `release`)","type":"enum","values":["","snapshot","ontag","release"],"mandatory":true},{"name":"GIT_PRIVATE_KEY","description":"Git private key to perform Git operations (for `release` publish mode)","secret":true},{"name":"MAVEN_REPOSITORY_HOST","description":"Global Maven repository host where credentials apply","secret":false},{"name":"MAVEN_REPOSITORY_USERNAME","description":"Global Maven repository username","secret":true},{"name":"MAVEN_REPOSITORY_PASSWORD","description":"Global Maven repository password","secret":true},{"name":"MAVEN_REPOSITORY_PUBLISH_RELEASE_URL","description":"Maven repository URL where to publish release artifacts","secret":false},{"name":"MAVEN_REPOSITORY_PUBLISH_SNAPSHOT_URL","description":"Maven repository URL where to publish snapshot artifacts","secret":false},{"name":"MAVEN_REPOSITORY_PUBLISH_USERNAME","description":"Maven repository username used for publishing purposes","secret":true},{"name":"MAVEN_REPOSITORY_PUBLISH_PASSWORD","description":"Maven repository password used for publishing purposes","secret":true}]}],"extension_id":null,"project":{"tag":"1.7.1","tags":["1.7.1","1.7.0","1.7","1.6.0","1.6","1.5.1","1.5.0","1.5","1.4.0","1.4","1.3.1","1.3.0","1.3","1.2.0","1.2","1.1.2","1.1.1","1.1.0","1.1","1.0.0","1.0","1"],"name":"sbt","path":"to-be-continuous/sbt","web_url":"https://gitlab.com/to-be-continuous/sbt","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26717195/logo.png"}},{"name":"semantic-release","description":"Automate your versioning and release management with [semantic-release](https://github.com/semantic-release/semantic-release)","template_path":"templates/gitlab-ci-semrel.yml","kind":"publish","prefix":"semrel","job_prefix":"semantic-release","is_component":true,"variables":[{"name":"SEMREL_IMAGE","description":"The Docker image used to run semantic-release","default":"registry.hub.docker.com/library/node:lts-slim"},{"name":"SEMREL_VERSION","description":"The [semantic-release](https://www.npmjs.com/package/semantic-release) version to use","default":"latest","advanced":true},{"name":"SEMREL_EXEC_VERSION","description":"The [@semantic-release/exec](https://www.npmjs.com/package/@semantic-release/exec) version to use","default":"latest","advanced":true},{"name":"GITLAB_TOKEN","description":"A GitLab 'project access token' or 'personal access token' with `api`, `read_repository` and `write repository` scopes.","mandatory":true,"secret":true},{"name":"SEMREL_CONFIG_DIR","description":"directory containing your [semantic-release configuration](https://semantic-release.gitbook.io/semantic-release/usage/configuration#configuration-file)","default":".","advanced":true},{"name":"SEMREL_TAG_FORMAT","description":"For generated `.releaserc` file only. [tagFormat semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#tagformat)e. :warning: don't forget to double the `$` character so it is not interpreted by GitLab.","default":"$${version}","advanced":true},{"name":"SEMREL_REQUIRED_PLUGINS_FILE","description":"Full path to `semrel-required-plugins.txt` file _(relative to `$CI_PROJECT_DIR`)_","default":"semrel-required-plugins.txt","advanced":true}],"features":[{"id":"semantic-release","name":"semantic-release","description":"Performs a semantic release.","disable_with":"SEMREL_RELEASE_DISABLED","variables":[{"name":"SEMREL_CHANGELOG_ENABLED","description":"Add the [@semantic-release/changelog](https://github.com/semantic-release/changelog) plugin which will commit a changelog file in the repository.","type":"boolean"},{"name":"SEMREL_CHANGELOG_FILE","description":"[changelogFile @semantic-release/changelog option](https://github.com/semantic-release/changelog#options).","default":"CHANGELOG.md","advanced":true},{"name":"SEMREL_CHANGELOG_TITLE","description":"[changelogTitle @semantic-release/changelog option](https://github.com/semantic-release/changelog#options). You might want to use markdown format (for example `# MyApp Changelog`).","advanced":true},{"name":"SEMREL_DRY_RUN","description":"For generated `.releaserc` file only. Activate the [dryRun semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#dryrun) if present.","type":"boolean","advanced":true},{"name":"SEMREL_AUTO_RELEASE_ENABLED","description":"When set the job start automatically. When not set (default), the job is manual.","type":"boolean"},{"name":"SEMREL_BRANCHES_REF","description":"Regular expression pattern matching branches from which releases should happen (should match your [semantic-release configuration](https://semantic-release.gitbook.io/semantic-release/usage/configuration#branches))","default":"/^(master|main)$/","advanced":true},{"name":"SEMREL_HOOKS_DIR","description":"Hook scripts folder.","default":".","advanced":true},{"name":"SEMREL_GPG_SIGNKEY","description":"Path to the GPG signkey exported with `gpg --armor --export-secret-key`.","secret":true,"advanced":true},{"name":"SEMREL_COMMIT_MESSAGE","description":"[message @semantic-release/git option](https://github.com/semantic-release/git#message)","advanced":true},{"name":"SEMREL_COMMIT_SPEC","description":"Commit specification `preset` (possible values: `angular`, `atom`, `codemirror`, `ember`, `eslint`, `express`, `jquery`, `jshint`, `conventionalcommits`). The default is `angular`.","values":["angular","codemirror","conventionalcommits","ember","eslint","express","jquery","jshint"],"default":"angular","advanced":true}]},{"id":"semantic-release-info","name":"semantic-release-info","description":"Run `semantic-release` dry run to save next release version information as dotenv artifact and make them available in next pipeline stages","variables":[{"name":"SEMREL_INFO_ON","description":"Define on which branch(es) the job shall be run","type":"enum","values":["","prod","branches-ref","protected","all"],"mandatory":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-semrel-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"3.11.5","tags":["3.11.5","3.11.4","3.11.3","3.11.2","3.11.1","3.11.0","3.11","3.10.3","3.10.2","3.10.1","3.10.0","3.10","3.9.1","3.9.0","3.9","3.8.3","3.8.2","3.8.1","3.8.0","3.8","3.7.1","3.7.0","3.7","3.6.0","3.6","3.5.2","3.5.1","3.5.0","3.5","3.4.2","3.4.1","3.4.0","3.4","3.3.1","3.3.0","3.3","3.2.2","3.2.1","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.3.1","2.3.0","2.3","2.2.6","2.2.5","2.2.4","2.2.3","2.2.2","2.2.1","2.2.0","2.1.0","2.0.5","2.0.4","2.0.3","2.0.2","2.0.1","2.0.0","2","1.2.0","1.1.0","1.0.1","1.0.0"],"name":"semantic-release","path":"to-be-continuous/semantic-release","web_url":"https://gitlab.com/to-be-continuous/semantic-release","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454254/logo.png"}},{"name":"SonarQube","description":"Continuously inspect your codebase with [SonarQube](https://www.sonarqube.org/)","template_path":"templates/gitlab-ci-sonar.yml","kind":"analyse","prefix":"sonar","is_component":true,"variables":[{"name":"SONAR_SCANNER_IMAGE","description":"The Docker image used to run [sonar-scanner](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/scanners/sonarscanner/)","default":"registry.hub.docker.com/sonarsource/sonar-scanner-cli:latest"},{"name":"SONAR_HOST_URL","type":"url","description":"SonarQube server url","mandatory":true},{"name":"SONAR_PROJECT_KEY","description":"SonarQube Project Key (might also be set in the `sonar-project.properties` file)","advanced":true},{"name":"SONAR_PROJECT_NAME","description":"SonarQube Project Name (might also be set in the `sonar-project.properties` file)","advanced":true},{"name":"SONAR_TOKEN","description":"SonarQube authentication token (depends on your authentication method)","secret":true},{"name":"SONAR_LOGIN","description":"SonarQube login (depends on your authentication method)","secret":true},{"name":"SONAR_PASSWORD","description":"SonarQube password (depends on your authentication method)","secret":true},{"name":"SONAR_BASE_ARGS","description":"SonarQube [analysis arguments](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/analysis-parameters/)","default":"-Dsonar.links.homepage=${CI_PROJECT_URL} -Dsonar.links.ci=${CI_PROJECT_URL}/-/pipelines -Dsonar.links.issue=${CI_PROJECT_URL}/-/issues","advanced":true},{"name":"SONAR_QUALITY_GATE_ENABLED","description":"Enables SonarQube [Quality Gate](https://docs.sonarsource.com/sonarqube-server/latest/instance-administration/analysis-functions/quality-gates/) verification.\n\n_Uses `sonar.qualitygate.wait` parameter ([see doc](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/ci-integration/overview/#quality-gate-fails))._","type":"boolean"}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-sonar-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url"},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]}],"extension_id":null,"project":{"tag":"4.2.4","tags":["4.2.4","4.2.3","4.2.2","4.2.1","4.2.0","4.2","4.1.1","4.1.0","4.1","4.0.1","4.0.0","4.0","4","3.3.0","3.3","3.2.0","3.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.1.0","2.1","2.0.1","2.0.0","2","1.3.2","1.3.1","1.3.0","1.2.0","1.1.0","1.0.0"],"name":"sonar","path":"to-be-continuous/sonar","web_url":"https://gitlab.com/to-be-continuous/sonar","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454259/logo.png"}},{"name":"Spectral","description":"[Spectral](https://docs.stoplight.io/docs/spectral) is a JSON/YAML Linter with custom rulesets, out of the box support for OpenAPI and AsyncAPI","template_path":"templates/gitlab-ci-spectral.yml","kind":"analyse","prefix":"spectral","is_component":true,"variables":[{"name":"SPECTRAL_IMAGE","description":"The Docker image used to run `spectral`","default":"registry.hub.docker.com/stoplight/spectral:latest"},{"name":"SPECTRAL_DOCUMENTS","description":"Location of JSON/YAML documents to be linted. Can be either a file, a glob or fetchable resource(s) on the web","default":"{,api/,src/main/resources/}*{openapi,oas,swagger,async}*.{json,yml,yaml}"},{"name":"SPECTRAL_EXTRA_ARGS","description":"Extra Spectral CLI [options](https://docs.stoplight.io/docs/spectral/docs/guides/2-cli.md)","advanced":true},{"name":"SPECTRAL_DISABLED","description":"Set to `true` to disable this job","type":"boolean","advanced":true}],"extension_id":null,"project":{"tag":"1.1.2","tags":["1.1.2","1.1.1","1.1.0","1.1","1.0.0","1.0","1"],"name":"spectral","path":"to-be-continuous/spectral","web_url":"https://gitlab.com/to-be-continuous/spectral","avatar":"https://gitlab.com/uploads/-/system/project/avatar/52371414/logo.png"}},{"name":"Sphinx","description":"Build your documentation with [Sphinx](https://www.sphinx-doc.org/)","template_path":"templates/gitlab-ci-sphinx.yml","kind":"build","prefix":"sphinx","is_component":true,"variables":[{"name":"SPHINX_IMAGE","description":"The Docker image used to run Sphinx","default":"ghcr.io/sphinx-doc/sphinx:latest"},{"name":"SPHINX_BUILD_ARGS","description":"[`sphinx-build` options](https://www.sphinx-doc.org/en/master/man/sphinx-build.html)) to be used","default":"-M html"},{"name":"SPHINX_PROJECT_DIR","description":"Sphinx project root directory","default":"."},{"name":"SPHINX_SOURCE_DIR","description":"Sphinx source directory (relative to `$SPHINX_PROJECT_DIR`) containing the Sphinx `conf.py` file","default":"source","advanced":true},{"name":"SPHINX_BUILD_DIR","description":"Sphinx build output directory (relative to `$SPHINX_PROJECT_DIR`)","default":"build","advanced":true},{"name":"SPHINX_REQUIREMENTS_FILE","description":"Requirements file (relative to `$SPHINX_PROJECT_DIR`). If the file is not found in the repository, requirements are read from the `SPHINX_REQUIREMENTS` variable","default":"requirements.txt","advanced":true},{"name":"SPHINX_REQUIREMENTS","description":"Space separated requirements (ignored if a requirement file is found)","advanced":true},{"name":"SPHINX_PREBUILD_SCRIPT","description":"Pre-build hook script (relative to `$SPHINX_PROJECT_DIR`)","default":"sphinx-pre-build.sh","advanced":true},{"name":"PIP_OPTS","description":"pip extra [options](https://pip.pypa.io/en/stable/cli/pip/#general-options)","advanced":true}],"features":[{"id":"lychee","name":"lychee","description":"Checks broken links and emails with [lychee](https://github.com/lycheeverse/lychee)","enable_with":"SPHINX_LYCHEE_ENABLED","variables":[{"name":"SPHINX_LYCHEE_IMAGE","description":"The Docker image used to run [lychee](https://github.com/lycheeverse/lychee)","default":"registry.hub.docker.com/lycheeverse/lychee:latest","advanced":true},{"name":"SPHINX_LYCHEE_ARGS","description":"[lychee arguments](https://github.com/lycheeverse/lychee#commandline-parameters) to execute","default":"--exclude-loopback $SPHINX_SOURCE_DIR/**/*.rst"}]}],"variants":[{"id":"pages","name":"GitLab Pages","description":"Adds a job to publish the generated documentation to GitLab pages","template_path":"templates/gitlab-ci-sphinx-pages.yml"}],"extension_id":null,"project":{"tag":"1.2.0","tags":["1.2.0","1.2","1.1.1","1.1.0","1.1","1.0.0","1.0","1"],"name":"sphinx","path":"to-be-continuous/sphinx","web_url":"https://gitlab.com/to-be-continuous/sphinx","avatar":"https://gitlab.com/uploads/-/system/project/avatar/53144593/logo.png"}},{"name":"SQLFluff lint","description":"Lint your SQL files (whichever your dialect) with [SQLFluff](https://docs.sqlfluff.com)","template_path":"templates/gitlab-ci-sqlfluff.yml","kind":"analyse","prefix":"sqlfluff","is_component":true,"variables":[{"name":"SQLFLUFF_IMAGE","description":"The Docker image used to run SQLFluff","default":"registry.hub.docker.com/sqlfluff/sqlfluff:latest"},{"name":"SQLFLUFF_WORKING_DIR","description":"Sqlfluff working directory, scope of configuration and sql files used","default":".","advanced":true},{"name":"SQLFLUFF_LINT_ARGS","description":"Lint [options and arguments](https://docs.sqlfluff.com/en/stable/reference/cli.html#sqlfluff-lint)","advanced":true}],"extension_id":null,"project":{"tag":"1.3.1","tags":["1.3.1","1.3.0","1.3","1.2.0","1.2","1.1.2","1.1.1","1.1.0","1.1","1.0.2","1.0.1","1.0.0","1.0","1"],"name":"sqlfluff","path":"to-be-continuous/sqlfluff","web_url":"https://gitlab.com/to-be-continuous/sqlfluff","avatar":"https://gitlab.com/uploads/-/system/project/avatar/38513375/logo.png"}},{"name":"Terraform","description":"Manage your infrastructure with [Terraform](https://www.terraform.io)","template_path":"templates/gitlab-ci-terraform.yml","kind":"infrastructure","prefix":"tf","is_component":true,"variables":[{"name":"TF_IMAGE","description":"the Docker image used to run Terraform CLI commands - **set the version required by your project**","default":"registry.hub.docker.com/hashicorp/terraform:latest"},{"name":"TF_GITLAB_BACKEND_DISABLED","type":"boolean","description":"Set to disable [GitLab managed Terraform State](https://docs.gitlab.com/ee/user/infrastructure/iac/terraform_state.html)","advanced":true},{"name":"TF_PROJECT_DIR","description":"Terraform project root directory","default":".","advanced":true},{"name":"TF_SCRIPTS_DIR","description":"Terraform (hook) scripts base directory (relative to `$TF_PROJECT_DIR`)","default":".","advanced":true},{"name":"TF_OUTPUT_DIR","description":"Terraform output directory (relative to `$TF_PROJECT_DIR`).\n\n_Everything generated in this directory will be kept as job artifacts._","default":"tf-output","advanced":true},{"name":"TF_EXTRA_OPTS","description":"Default Terraform extra options (applies to all Terraform commands)","advanced":true},{"name":"TF_INIT_OPTS","description":"Default Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init)","advanced":true},{"name":"TF_WORKSPACE","description":"Default Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces)","advanced":true},{"name":"TF_PLAN_OPTS","description":"Default Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan)","advanced":true},{"name":"TF_APPLY_OPTS","description":"Default Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply)","advanced":true},{"name":"TF_DESTROY_OPTS","description":"Default Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy)","advanced":true}],"features":[{"id":"tfsec","name":"tfsec","description":"Detect security issues with [tfsec](https://github.com/tfsec/tfsec)","enable_with":"TF_TFSEC_ENABLED","variables":[{"name":"TF_TFSEC_IMAGE","description":"tfsec docker image","default":"registry.hub.docker.com/aquasec/tfsec-ci","advanced":true},{"name":"TF_TFSEC_ARGS","description":"tfsec [options and args](https://aquasecurity.github.io/tfsec/latest/guides/usage/)","default":"."}]},{"id":"trivy","name":"trivy","description":"Detect security issues with [trivy config](https://aquasecurity.github.io/trivy/latest/docs/scanner/misconfiguration/)","disable_with":"TF_TRIVY_DISABLED","variables":[{"name":"TF_TRIVY_IMAGE","description":"trivy docker image","default":"registry.hub.docker.com/aquasec/trivy","advanced":true},{"name":"TF_TRIVY_ARGS","description":"trivy config [options and args](https://aquasecurity.github.io/trivy/latest/docs/references/configuration/cli/trivy_config/)","default":"."}]},{"id":"checkov","name":"checkov","description":"Static code analysis tool for infrastructure-as-code","enable_with":"TF_CHECKOV_ENABLED","variables":[{"name":"TF_CHECKOV_IMAGE","description":"checkov docker image","default":"registry.hub.docker.com/bridgecrew/checkov","advanced":true},{"name":"TF_CHECKOV_ARGS","description":"checkov [options and args](https://www.checkov.io/2.Basics/CLI%20Command%20Reference.html)","default":"--framework terraform","advanced":true}]},{"id":"tf-infracost","name":"tf-infracost","description":"Shows cloud cost estimates for infrastructure-as-code projects","enable_with":"TF_INFRACOST_ENABLED","variables":[{"name":"TF_INFRACOST_IMAGE","description":"Infracost docker image","default":"registry.hub.docker.com/infracost/infracost","advanced":true},{"name":"TF_INFRACOST_ARGS","description":"infracost [CLI options and args](https://www.infracost.io/docs/#usage)","default":"breakdown"},{"name":"TF_INFACOST_USAGE_FILE","description":"infracost [usage file](https://www.infracost.io/docs/usage_based_resources/#infracost-usage-file)","default":"infracost-usage.yml"},{"name":"INFRACOST_API_KEY","description":"the infracost API key","secret":true}]},{"id":"tf-tflint","name":"tf-tflint","description":"Analyse your Terraform code with [tflint](https://github.com/terraform-linters/tflint)","disable_with":"TF_TFLINT_DISABLED","variables":[{"name":"TF_TFLINT_IMAGE","description":"Tflint docker image","default":"ghcr.io/terraform-linters/tflint-bundle:latest","advanced":true},{"name":"TF_TFLINT_ARGS","description":"tflint extra [options and args](https://github.com/terraform-linters/tflint/#usage)","default":"--enable-plugin=google --enable-plugin=azurerm --enable-plugin=aws --recursive"}]},{"id":"tf-fmt","name":"tf-fmt","description":"Check your Terraform code with [tffmt](https://developer.hashicorp.com/terraform/cli/commands/fmt#usage)","enable_with":"TF_FMT_ENABLED","variables":[{"name":"TF_FMT_ARGS","description":"terraform fmt extra [options](https://developer.hashicorp.com/terraform/cli/commands/fmt#usage)","default":"-diff -recursive"}]},{"id":"tf-validate","name":"tf-validate","description":"Check your Terraform code with [tfvalidate](https://developer.hashicorp.com/terraform/cli/commands/validate#usage)","enable_with":"TF_VALIDATE_ENABLED","variables":[]},{"id":"tfdocs","name":"terraform docs","description":"Build Terraform documentation based on [terraform docs](https://terraform-docs.io/)","enable_with":"TF_DOCS_ENABLED","variables":[{"name":"TF_DOCS_IMAGE","description":"[terraform docs](https://terraform-docs.io/) container image","default":"quay.io/terraform-docs/terraform-docs:edge","advanced":true},{"name":"TF_DOCS_EXTRA_OPTS","description":"Extra [terraform docs options](https://terraform-docs.io/reference/terraform-docs/)","advanced":true},{"name":"TF_DOCS_CONFIG","description":"terraform docs [configuration file](https://terraform-docs.io/user-guide/configuration/) (relative to `$TF_PROJECT_DIR`)","default":".terraform-docs.yml","advanced":true},{"name":"TF_DOCS_OUTPUT_DIR","description":"terraform docs output directory (relative to `$TF_PROJECT_DIR`)","default":"docs","advanced":true}]},{"id":"tfpublish","name":"publish module","description":"Publish a Terraform module to GitLab's [Terraform Module Registry](https://docs.gitlab.com/ee/user/packages/terraform_module_registry/)","enable_with":"TF_PUBLISH_ENABLED","variables":[{"name":"TF_PUBLISH_IMAGE","description":"container image used to publish module","default":"registry.hub.docker.com/curlimages/curl:latest","advanced":true},{"name":"TF_MODULE_NAME","description":"The module name. May not contain any spaces or underscores.","default":"$CI_PROJECT_NAME","advanced":true},{"name":"TF_MODULE_SYSTEM","description":"The module system or provider (example: `local`, `aws`, `google`)","default":"local"},{"name":"TF_MODULE_VERSION","description":"The module version. It must be valid according to the [semantic versioning](https://semver.org/) specification.","default":"$CI_COMMIT_TAG","advanced":true},{"name":"TF_MODULE_FILES","description":"Glob patterns matching files to include into the Terraform module (:warning: does not support double star)","default":"*.tf *.tpl *.md"}]},{"id":"review","name":"Review","description":"Dynamic review environments for your topic branches (see GitLab [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/))","enable_with":"TF_REVIEW_ENABLED","variables":[{"name":"TF_REVIEW_EXTRA_OPTS","description":"Terraform extra options for `review` env (applies to all Terraform commands) (only define to override default)","advanced":true},{"name":"TF_REVIEW_INIT_OPTS","description":"Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `review` env (only define to override default)","advanced":true},{"name":"TF_REVIEW_WORKSPACE","description":"Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `review` env (only define to override default)","advanced":true},{"name":"TF_REVIEW_PLAN_ENABLED","description":"Set to enable separate Terraform plan job for `review` env.","type":"boolean","advanced":true},{"name":"TF_REVIEW_PLAN_OPTS","description":"Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `review` env (only define to override default)","advanced":true},{"name":"TF_REVIEW_APPLY_OPTS","description":"Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `review` env (only define to override default)","advanced":true},{"name":"TF_REVIEW_DESTROY_OPTS","description":"Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `review` env (only define to override default)","advanced":true},{"name":"TF_REVIEW_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop `review` environments","default":"4 hours"}]},{"id":"integration","name":"Integration","description":"A continuous-integration environment associated to your integration branch (`develop` by default)","enable_with":"TF_INTEG_ENABLED","variables":[{"name":"TF_INTEG_EXTRA_OPTS","description":"Terraform extra options for `integration` env (applies to all Terraform commands) (only define to override default)","advanced":true},{"name":"TF_INTEG_INIT_OPTS","description":"Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `integration` env (only define to override default)","advanced":true},{"name":"TF_INTEG_WORKSPACE","description":"Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `integration` env (only define to override default)","advanced":true},{"name":"TF_INTEG_PLAN_ENABLED","description":"Set to enable separate Terraform plan job for `integration` env.","type":"boolean","advanced":true},{"name":"TF_INTEG_PLAN_OPTS","description":"Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `integration` env (only define to override default)","advanced":true},{"name":"TF_INTEG_APPLY_OPTS","description":"Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `integration` env (only define to override default)","advanced":true},{"name":"TF_INTEG_DESTROY_OPTS","description":"Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `integration` env (only define to override default)","advanced":true},{"name":"TF_INTEG_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `integration` env","default":"never"}]},{"id":"staging","name":"Staging","description":"An iso-prod environment meant for testing and validation purpose on your production branch (`main` or `master` by default)","enable_with":"TF_STAGING_ENABLED","variables":[{"name":"TF_STAGING_EXTRA_OPTS","description":"Terraform extra options for `staging` env (applies to all Terraform commands) (only define to override default)","advanced":true},{"name":"TF_STAGING_INIT_OPTS","description":"Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `staging` env (only define to override default)","advanced":true},{"name":"TF_STAGING_WORKSPACE","description":"Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `staging` env (only define to override default)","advanced":true},{"name":"TF_STAGING_PLAN_ENABLED","description":"Set to enable separate Terraform plan job for `staging` env.","type":"boolean","advanced":true},{"name":"TF_STAGING_PLAN_OPTS","description":"Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `staging` env (only define to override default)","advanced":true},{"name":"TF_STAGING_APPLY_OPTS","description":"Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `staging` env (only define to override default)","advanced":true},{"name":"TF_STAGING_DESTROY_OPTS","description":"Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `staging` env (only define to override default)","advanced":true},{"name":"TF_STAGING_AUTOSTOP_DURATION","description":"The amount of time before GitLab will automatically stop the `staging` env","default":"never"}]},{"id":"prod","name":"Production","description":"The production environment","enable_with":"TF_PROD_ENABLED","variables":[{"name":"TF_PROD_EXTRA_OPTS","description":"Terraform extra options for `production` env (applies to all Terraform commands) (only define to override default)","advanced":true},{"name":"TF_PROD_INIT_OPTS","description":"Terraform extra [init options](https://developer.hashicorp.com/terraform/cli/commands/init) for `production` env (only define to override default)","advanced":true},{"name":"TF_PROD_WORKSPACE","description":"Terraform project [workspace](https://developer.hashicorp.com/terraform/language/state/workspaces) for `production` env (only define to override default)","advanced":true},{"name":"TF_PROD_PLAN_ENABLED","description":"Set to enable separate Terraform plan job for `production` env.","type":"boolean","default":"true","advanced":true},{"name":"TF_PROD_PLAN_OPTS","description":"Terraform extra [plan options](https://developer.hashicorp.com/terraform/cli/commands/plan) for `production` env (only define to override default)","advanced":true},{"name":"TF_PROD_APPLY_OPTS","description":"Terraform extra [apply options](https://developer.hashicorp.com/terraform/cli/commands/apply) for `production` env (only define to override default)","advanced":true},{"name":"TF_PROD_DESTROY_OPTS","description":"Terraform extra [destroy options](https://developer.hashicorp.com/terraform/cli/commands/destroy) for `production` env (only define to override default)","advanced":true}]}],"variants":[{"id":"vault","name":"Vault","description":"Retrieve secrets from a [Vault](https://www.vaultproject.io/) server","template_path":"templates/gitlab-ci-terraform-vault.yml","variables":[{"name":"TBC_VAULT_IMAGE","description":"The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use","default":"registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:latest","advanced":true},{"name":"VAULT_BASE_URL","description":"The Vault server base API url","mandatory":true},{"name":"VAULT_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"VAULT_ROLE_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID","mandatory":true,"secret":true},{"name":"VAULT_SECRET_ID","description":"The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID","mandatory":true,"secret":true}]},{"id":"gcp-auth-provider","name":"Google Cloud","description":"Retrieves an [OAuth access token](https://developers.google.com/identity/protocols/oauth2) for the [Google Cloud Platform Provider for Terraform](https://registry.terraform.io/providers/hashicorp/google/latest/docs)","template_path":"templates/gitlab-ci-terraform-gcp.yml","variables":[{"name":"GCP_OIDC_AUD","description":"The `aud` claim for the JWT token _(only required for [OIDC authentication](https://docs.gitlab.com/ee/ci/cloud_services/aws/))_","default":"$CI_SERVER_URL","advanced":true},{"name":"GCP_OIDC_ACCOUNT","description":"Default Service Account to which impersonate with OpenID Connect authentication"},{"name":"GCP_OIDC_PROVIDER","description":"Default Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/)"},{"name":"GCP_REVIEW_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `review` environment","advanced":true},{"name":"GCP_REVIEW_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `review` environment","advanced":true},{"name":"GCP_INTEG_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `integration` environment","advanced":true},{"name":"GCP_INTEG_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `integration` environment","advanced":true},{"name":"GCP_STAGING_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `staging` environment","advanced":true},{"name":"GCP_STAGING_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `staging` environment","advanced":true},{"name":"GCP_PROD_OIDC_ACCOUNT","description":"Service Account to which impersonate with OpenID Connect authentication on `production` environment","advanced":true},{"name":"GCP_PROD_OIDC_PROVIDER","description":"Workload Identity Provider associated with GitLab to [authenticate with OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/google_cloud/) on `production` environment","advanced":true}]},{"id":"aws","name":"AWS","description":"Sets the appropriate Assume Role with Web Identity configuration for the [AWS Provider for Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#assume-role-with-web-identity-configuration-reference)","template_path":"templates/gitlab-ci-terraform-aws.yml","variables":[{"name":"AWS_OIDC_AUD","description":"The `aud` claim for the JWT","default":"$CI_SERVER_URL"},{"name":"AWS_OIDC_ROLE_ARN","description":"Default IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/)","advanced":true},{"name":"AWS_REVIEW_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `review` env _(only define to override default)_","advanced":true},{"name":"AWS_INTEG_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `integration` env _(only define to override default)_","advanced":true},{"name":"AWS_STAGING_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `staging` env _(only define to override default)_","advanced":true},{"name":"AWS_PROD_OIDC_ROLE_ARN","description":"IAM Role ARN associated with GitLab to [authenticate using OpenID Connect](https://docs.gitlab.com/ee/ci/cloud_services/aws/) on `production` env _(only define to override default)_","advanced":true}]}],"extension_id":null,"project":{"tag":"5.5.6","tags":["5.5.6","5.5.5","5.5.4","5.5.3","5.5.2","5.5.1","5.5.0","5.5","5.4.14","5.4.13","5.4.12","5.4.11","5.4.10","5.4.9","5.4.8","5.4.7","5.4.6","5.4.5","5.4.4","5.4.3","5.4.2","5.4.1","5.4.0","5.4","5.3.0","5.3","5.2.0","5.2","5.1.0","5.1","5.0.2","5.0.1","5.0.0","5.0","5","4.0.3","4.0.2","4.0.1","4.0.0","4.0","4","3.12.3","3.12.2","3.12.1","3.12.0","3.12","3.11.0","3.11","3.10.0","3.10","3.9.1","3.9.0","3.9","3.8.0","3.8","3.7.0","3.7","3.6.3","3.6.2","3.6.1","3.6.0","3.6","3.5.1","3.5.0","3.5","3.4.0","3.4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.0","3.1","3.0.0","3.0","3","2.8.0","2.8","2.7.1","2.7.0","2.7","2.6.0","2.6","2.5.0","2.5","2.4.3","2.4.2","2.4.1","2.4.0","2.3.2","2.3.1","2.3.0","2.2.4","2.2.3","2.2.2","2.2.1","2.2.0","2.1.1","2"],"name":"terraform","path":"to-be-continuous/terraform","web_url":"https://gitlab.com/to-be-continuous/terraform","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454262/logo.png"}},{"name":"Test SSL","description":"Test your TLS/SSL servers compliance with [Test SSL](https://testssl.sh/)","template_path":"templates/gitlab-ci-testssl.yml","kind":"acceptance","prefix":"testssl","is_component":true,"variables":[{"name":"TESTSSL_IMAGE","description":"The Docker image used to run [Test SSL](https://testssl.sh/)","default":"registry.hub.docker.com/drwetter/testssl.sh:latest"},{"name":"TESTSSL_ARGS","description":"Test SSL [command-line options](https://testssl.sh/#usage)","default":"--severity MEDIUM","advanced":true},{"name":"TESTSSL_URL","description":"Server url to test TLS/SSL against\n\n_Leave unset if you're using deployment templates_"},{"name":"REVIEW_ENABLED","description":"Set to enable Test SSL tests on review environments (dynamic environments instantiated on development branches)","type":"boolean"}],"extension_id":null,"project":{"tag":"3.6.0","tags":["3.6.0","3.6","3.5.0","3.5","3.4.1","3.4.0","3.4","3.3.0","3.3","3.2.1","3.2.0","3.2","3.1.2","3.1.1","3.1.0","3.1","3.0.0","3.0","3","2.1.0","2.1","2.0.1","2.0.0","2","1.2.0","1.1.0","1.0.0"],"name":"testssl","path":"to-be-continuous/testssl","web_url":"https://gitlab.com/to-be-continuous/testssl","avatar":"https://gitlab.com/uploads/-/system/project/avatar/26454277/logo.png"}}]}
diff --git a/src/index.html b/src/index.html
index c7c863216b74a55b5242230975dbc20f89d05ef6..9ac483fa7fba60c1c50502ea8d86906b2ef73424 100644
--- a/src/index.html
+++ b/src/index.html
@@ -12,7 +12,7 @@
   <link rel="icon" type="image/x-icon" href="favicon.ico">
 
   <!-- Font Awesome -->
-  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css">
 
 </head>
 <body>
diff --git a/src/styles.css b/src/styles.css
index 7ea189cabad2e43896cc7a85bd8b2cfcdba5a61a..61d173b4a97ae3ec320fe0b46fcd47df9be26a1f 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -9,6 +9,8 @@ html, body {
 :root {
   /* force no copyrighted font */
   --font-family-sans-serif: Helvetica,Arial,sans-serif;
+  --primary-color: #ea7070;
+  --text-color: #ea7070;
 }
 
 /* use all available width up to 1320px */
@@ -44,7 +46,7 @@ markdown p {
   border-color: #000 !important;
 }
 .btn-group-toggle>.btn-secondary:hover {
-  color: #f16e00;
+  color: #ea7070;
   background-color: #fff;
   border-color: #ccc;
 }
@@ -174,4 +176,40 @@ markdown p {
 }
 .hide {
   display: none !important;
-}
\ No newline at end of file
+}
+.nav-link:hover {
+  color: #ea7070 !important; 
+}
+.navbar-nav .nav-link.active {
+  color: #ea7070 !important; 
+}
+.btn-toggle:hover {
+  color: #ea7070 !important; 
+}
+.btn-toggle:active {
+  color: #fff !important; 
+  background-color: #ea7070 !important; 
+  border-color: #ea7070 !important; 
+}
+.form-check-input:checked {
+  background-color: #ea7070 !important; 
+  border-color: #ea7070 !important;   
+}
+.form-check-input:active {
+  background-color: #ea7070 !important; 
+  border-color: #ea7070 !important;   
+}
+.title:hover {
+  color: #ea7070 !important;   
+}
+.title {
+  color: #fff !important;   
+}
+a:hover {
+  color: #ea7070 !important;   
+}
+.btn-secondary:active {
+  color: #fff !important; 
+  background-color: #ea7070 !important; 
+  border-color: #ea7070 !important; 
+}
diff --git a/templates/validation.yml b/templates/validation.yml
index 1b3936bbae2fa52a0c2a2207e3480f65f7c9f14c..54cdbca1e95fcecf257d26d93d33eb8cb9fc4bc1 100644
--- a/templates/validation.yml
+++ b/templates/validation.yml
@@ -11,7 +11,7 @@ spec:
     yajsv-image:
       description: image to use for validation jobs
       type: string
-      default: cicd-docker-dev.artifact.tecnalia.com/yajsv:latest
+      default: cicd-docker-dev.artifact.tecnalia.dev/yajsv:latest
 
 ---
 
@@ -46,6 +46,16 @@ variables:
     fi
   }
 
+  function install_yajsv() {
+    export PATH=$PATH:$(pwd)
+    if ! command -v yajsv > /dev/null
+    then
+      log_info "Installing yajsv"
+      curl -sSL -o ./yajsv "${YAJSV_RELEASE}"
+      chmod +x ./yajsv
+    fi
+  }
+
 # Abstract JSON schema validation job
 # $JSON_FILE  : the JSON file to test
 # $SCHEMA_URL : the schema url
@@ -55,9 +65,14 @@ variables:
   before_script:
     - !reference [.kicker-scripts]
     - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}"
+    - install_yajsv
   script:
-    - 'wget --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "$SCHEMA_URL" -O schema.json'
+    - 'curl -sSL -o schema.json -H "PRIVATE-TOKEN: $GITLAB_TOKEN" "$SCHEMA_URL"'
     - yajsv -s schema.json "$JSON_FILE"
+  cache:
+    key: "$CI_COMMIT_REF_NAME-yajsv"
+    paths:
+      - ./yajsv
   rules:
     # enabled if kicker.json file found
     - exists: