diff --git a/src/assets/kicker-aggregated.json b/src/assets/kicker-aggregated.json index 76c87d41887d639ae6b3e4ee46ccb87d2409e4ef..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.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_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.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://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.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-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"}}]}