From 4ff7996643f34a6dd3e590b3c1f8cb6581dab042 Mon Sep 17 00:00:00 2001 From: "girija.saintange" <girija.saintange@gmail.com> Date: Wed, 24 Jan 2024 16:58:22 +0100 Subject: [PATCH] feat: migrate to CI/CD component MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⚠ requires GitLab 16.6 or later --- .gitlab-ci.yml | 2 +- README.md | 92 ++++++++++++++++----------- bumpversion.sh | 4 +- kicker.json | 2 + logo.png | Bin 32526 -> 23966 bytes templates/gitlab-ci-semrel-vault.yml | 14 +++- templates/gitlab-ci-semrel.yml | 86 +++++++++++++++++++++---- 7 files changed, 147 insertions(+), 53 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f26aaf3..15952f2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,7 +10,7 @@ include: file: '/templates/validation.yml' - project: 'to-be-continuous/bash' ref: '3.3' - file: 'templates/gitlab-ci-bash.yml' + file: '/templates/gitlab-ci-bash.yml' - local: "templates/gitlab-ci-semrel.yml" stages: diff --git a/README.md b/README.md index 5f06575..6cf89bc 100644 --- a/README.md +++ b/README.md @@ -11,29 +11,51 @@ This project implements a GitLab CI/CD template to automate your versioning and ## Usage -In order to include this template in your project, add the following to your `gitlab-ci.yml`: +This template can be used both as a [CI/CD component](https://docs.gitlab.com/ee/ci/components/#use-a-component-in-a-cicd-configuration) or using the legacy [`include:project`](https://docs.gitlab.com/ee/ci/yaml/index.html#includeproject) syntax. + +### Use as a CI/CD component + +Add the following to your `gitlab-ci.yml`: + +```yaml +include: + # 1: include the component + - component: gitlab.com/to-be-continuous/semantic-release/gitlab-ci-semrel@3.7.1 + # 2: set/override component inputs + inputs: + changelog-enabled: true # ⚠ this is only an example +``` + +### Use as a CI/CD template (legacy) + +Add the following to your `gitlab-ci.yml`: ```yaml include: + # 1: include the template - project: 'to-be-continuous/semantic-release' ref: '3.7.1' file: '/templates/gitlab-ci-semrel.yml' + +variables: + # 2: set/override template variables + SEMREL_CHANGELOG_ENABLED: "true" # ⚠ this is only an example ``` ## Global configuration The semantic-release template uses some global configuration used throughout all jobs. -| Name | Description | Default value | +| Input / Variable | Description | Default value | | --------------------- | --------------------------------------------- | ----------------- | -| `SEMREL_IMAGE` | The Docker image used to run semantic-release | `registry.hub.docker.com/library/node:latest` | -| `SEMREL_VERSION` | The [semantic-release](https://www.npmjs.com/package/semantic-release) version to use | `latest` | -| `SEMREL_EXEC_VERSION` | The [@semantic-release/exec](https://www.npmjs.com/package/@semantic-release/exec) version to use | `latest` | +| `image` / `SEMREL_IMAGE` | The Docker image used to run semantic-release | `registry.hub.docker.com/library/node:latest` | +| `version` / `SEMREL_VERSION` | The [semantic-release](https://www.npmjs.com/package/semantic-release) version to use | `latest` | +| `exec-version` / `SEMREL_EXEC_VERSION` | The [@semantic-release/exec](https://www.npmjs.com/package/@semantic-release/exec) version to use | `latest` | | :lock: `GITLAB_TOKEN` | A GitLab [project access token](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html) or [personal access token](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html) with `api`, `read_repository` and `write repository` scopes. :warning: This variable is **mandatory** and [defined by `semantic-release`](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/ci-configuration.md#push-access-to-the-remote-repository) itself. | _none_ | -| `GIT_AUTHOR_EMAIL` | A Git author email address associated with the `GITLAB_TOKEN` [bot user](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html#bot-users-for-projects). This is [defined by `semantic-release`](https://semantic-release.gitbook.io/semantic-release/usage/configuration#git-environment-variables) itself, and **required if** the [verify-user push rules](https://docs.gitlab.com/ee/user/project/repository/push_rules.html#verify-users) enabled for the project | _none_ | -| `GIT_COMMITTER_EMAIL` | A Git committer email address associated with the `GITLAB_TOKEN` [bot user](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html#bot-users-for-projects). This is [defined by `semantic-release`](https://semantic-release.gitbook.io/semantic-release/usage/configuration#git-environment-variables) itself, and **required if** the [verify-user push rules](https://docs.gitlab.com/ee/user/project/repository/push_rules.html#verify-users) enabled for the project | _none_ | -| `SEMREL_CONFIG_DIR` | directory containing your [semantic-release configuration](https://semantic-release.gitbook.io/semantic-release/usage/configuration#configuration-file) | `.` | -| `SEMREL_REQUIRED_PLUGINS_FILE` | An optional file for additional npm packages to install | `semrel-required-plugins.txt` | +| :lock: `GIT_AUTHOR_EMAIL` | A Git author email address associated with the `GITLAB_TOKEN` [bot user](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html#bot-users-for-projects). This is [defined by `semantic-release`](https://semantic-release.gitbook.io/semantic-release/usage/configuration#git-environment-variables) itself, and **required if** the [verify-user push rules](https://docs.gitlab.com/ee/user/project/repository/push_rules.html#verify-users) enabled for the project | _none_ | +| :lock: `GIT_COMMITTER_EMAIL` | A Git committer email address associated with the `GITLAB_TOKEN` [bot user](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html#bot-users-for-projects). This is [defined by `semantic-release`](https://semantic-release.gitbook.io/semantic-release/usage/configuration#git-environment-variables) itself, and **required if** the [verify-user push rules](https://docs.gitlab.com/ee/user/project/repository/push_rules.html#verify-users) enabled for the project | _none_ | +| `config-dir` / `SEMREL_CONFIG_DIR` | directory containing your [semantic-release configuration](https://semantic-release.gitbook.io/semantic-release/usage/configuration#configuration-file) | `.` | +| `required-plugins-file` / `SEMREL_REQUIRED_PLUGINS_FILE` | An optional file for additional npm packages to install | `semrel-required-plugins.txt` | Jobs will extract required plugin packages from discovered configuration. If your configuration needs additional packages, add them, one per line, to `SEMREL_REQUIRED_PLUGINS_FILE` file. Each line must be a valid `npm install` package argument. @@ -63,17 +85,17 @@ If no configuration is found, the template will generate one with the following As specified in the previous chapter, these variables are only used to generated a `.releaserc` when no configuration is found in the repository. -| Name | Description | Default value | +| Input / Variable | Description | Default value | | ------------------------------| ------------------------------------------------------ | ------------- | -| `SEMREL_CHANGELOG_ENABLED` | Add the [@semantic-release/changelog](https://github.com/semantic-release/changelog) plugin which will commit a changelog file in the repository if set to `true`. | _none_ | -| `SEMREL_CHANGELOG_FILE` | [changelogFile @semantic-release/changelog option](https://github.com/semantic-release/changelog#options). | _none_ (use the plugin default value which is `CHANGELOG.md`). | -| `SEMREL_CHANGELOG_TITLE` | [changelogTitle @semantic-release/changelog option](https://github.com/semantic-release/changelog#options). You might want to use markdown format (for example `# MyApp Changelog`). | _none_ | -| `SEMREL_DRY_RUN` | Activate the [dryRun semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#dryrun) if present. | _none_ | -| `SEMREL_AUTO_RELEASE_ENABLED` | When set to `true` the job start automatically. When not set (default), the job is manual. | _none_ | -| `SEMREL_TAG_FORMAT` | [tagFormat semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#tagformat). :warning: don't forget to double the `$` character so it is not interpreted by GitLab. | `$${version}` | -| `SEMREL_HOOKS_DIR` | [Hook scripts](#hook_scripts) folder. | `.` | -| `SEMREL_COMMIT_MESSAGE` | Add a custom commit message based on [semantic-release/git option](https://github.com/semantic-release/git#message). | _none_ (uses semantic-release default commit message) | -| `SEMREL_RELEASE_DISABLED` | Disable this job. | _none_ | +| `changelog-enabled` / `SEMREL_CHANGELOG_ENABLED` | Add the [@semantic-release/changelog](https://github.com/semantic-release/changelog) plugin which will commit a changelog file in the repository if set to `true`. | _none_ | +| `changelog-file` / `SEMREL_CHANGELOG_FILE` | [changelogFile @semantic-release/changelog option](https://github.com/semantic-release/changelog#options). | _none_ (use the plugin default value which is `CHANGELOG.md`). | +| `changelog-title` / `SEMREL_CHANGELOG_TITLE` | [changelogTitle @semantic-release/changelog option](https://github.com/semantic-release/changelog#options). You might want to use markdown format (for example `# MyApp Changelog`). | _none_ | +| `dry-run` / `SEMREL_DRY_RUN` | Activate the [dryRun semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#dryrun) if present. | _none_ | +| `auto-release-enabled` / `SEMREL_AUTO_RELEASE_ENABLED` | When set to `true` the job start automatically. When not set (default), the job is manual. | _none_ | +| `tag-format` / `SEMREL_TAG_FORMAT` | [tagFormat semantic-release option](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#tagformat). :warning: don't forget to double the `$` character so it is not interpreted by GitLab. | `$${version}` | +| `hooks-dir` / `SEMREL_HOOKS_DIR` | [Hook scripts](#hook_scripts) folder. | `.` | +| `commit-message` / `SEMREL_COMMIT_MESSAGE` | Add a custom commit message based on [semantic-release/git option](https://github.com/semantic-release/git#message). | _none_ (uses semantic-release default commit message) | +| `release-disabled` / `SEMREL_RELEASE_DISABLED` | Disable this job. | _none_ | #### Hook scripts @@ -141,7 +163,7 @@ For an introduction on commit signing, see [GitLab documentation](https://docs.g To make semantic-release sign its commits, use the following variable. -| Name | Description | Default value | +| Input / Variable | Description | Default value | | ---------------------| ------------------------------------------------------------------------ | ------------- | | :lock: `SEMREL_GPG_SIGNKEY` | Path to the GPG signkey exported with `gpg --armor --export-secret-key`<br/>:warning: Declare as a masked [project variable of File type](https://docs.gitlab.com/ee/ci/variables/#cicd-variable-types). | _none_ | @@ -176,7 +198,6 @@ Here are some advices about your **secrets** (variables marked with a :lock:): 3. Don't forget to escape special characters (ex: `$` -> `$$`). 4. You can also manage secrets using Vault variant - ## Variants The Docker template can be used in conjunction with template variants to cover specific cases. @@ -189,11 +210,11 @@ This variant allows delegating your secrets management to a [Vault](https://www. In order to be able to communicate with the Vault server, the variant requires the additional configuration parameters: -| Name | Description | Default value | +| Input / Variable | Description | Default value | | ----------------- | -------------------------------------- | ----------------- | | `TBC_VAULT_IMAGE` | The [Vault Secrets Provider](https://gitlab.com/to-be-continuous/tools/vault-secrets-provider) image to use (can be overridden) | `registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master` | -| `VAULT_BASE_URL` | The Vault server base API url | _none_ | -| `VAULT_OIDC_AUD` | The `aud` claim for the JWT | `$CI_SERVER_URL` | +| `vault-base-url` / `VAULT_BASE_URL` | The Vault server base API url | _none_ | +| `vault-oidc-aud` / `VAULT_OIDC_AUD` | The `aud` claim for the JWT | `$CI_SERVER_URL` | | :lock: `VAULT_ROLE_ID` | The [AppRole](https://www.vaultproject.io/docs/auth/approle) RoleID | **must be defined** | | :lock: `VAULT_SECRET_ID` | The [AppRole](https://www.vaultproject.io/docs/auth/approle) SecretID | **must be defined** | @@ -207,7 +228,7 @@ Then you may retrieve any of your secret(s) from Vault using the following synta With: -| Name | Description | +| Parameter | Description | | -------------------------------- | -------------------------------------- | | `secret_path` (_path parameter_) | this is your secret location in the Vault server | | `field` (_query parameter_) | parameter to access a single basic field from the secret JSON payload | @@ -217,19 +238,16 @@ With: ```yaml include: # main template - - project: 'to-be-continuous/semantic-release' - ref: '3.7.1' - file: '/templates/gitlab-ci-semrel.yml' + - component: gitlab.com/to-be-continuous/semantic-release/gitlab-ci-semrel@3.7.1 # Vault variant - - project: 'to-be-continuous/semantic-release' - ref: '3.7.1' - file: '/templates/gitlab-ci-semrel-vault.yml' + - component: gitlab.com/to-be-continuous/semantic-release/gitlab-ci-semrel-vault@3.7.1 + inputs: + vault-base-url: "https://vault.acme.host/v1" + # audience claim for JWT + vault-oidc-aud: "https://vault.acme.host" variables: - # audience claim for JWT - VAULT_OIDC_AUD: "https://vault.acme.host" - # Secrets managed by Vault - GITLAB_TOKEN: "@url@http://vault-secrets-provider/api/secrets/b7ecb6ebabc231/semantic-release/token?field=group-access-token" - VAULT_BASE_URL: "https://vault.acme.host/v1" - # $VAULT_ROLE_ID and $VAULT_SECRET_ID defined as a secret CI/CD variable + # Secrets managed by Vault + GITLAB_TOKEN: "@url@http://vault-secrets-provider/api/secrets/b7ecb6ebabc231/semantic-release/token?field=group-access-token" + # $VAULT_ROLE_ID and $VAULT_SECRET_ID defined as a secret CI/CD variable ``` diff --git a/bumpversion.sh b/bumpversion.sh index f06829a..ed44d7b 100755 --- a/bumpversion.sh +++ b/bumpversion.sh @@ -27,13 +27,13 @@ if [[ "$curVer" ]]; then log_info "Bump version from \\e[33;1m${curVer}\\e[0m to \\e[33;1m${nextVer}\\e[0m (release type: $relType)..." # replace in README - sed -e "s/ref: '$curVer'/ref: '$nextVer'/" README.md > README.md.next + sed -e "s/ref: *'$curVer'/ref: '$nextVer'/" -e "s/ref: *\"$curVer\”/ref: \”$nextVer\”/" -e "s/component: *\(.*\)@$curVer/component: \1@$nextVer/" README.md > README.md.next mv -f README.md.next README.md # replace in template and variants for tmpl in templates/*.yml do - sed -e "s/\"$curVer\"/\"$nextVer\"/" "$tmpl" > "$tmpl.next" + sed -e "s/command: *\[\"--service\", \"\(.*\)\", \"$curVer\"\]/command: [\"--service\", \"\1\", \"$nextVer\"]/" "$tmpl" > "$tmpl.next" mv -f "$tmpl.next" "$tmpl" done else diff --git a/kicker.json b/kicker.json index be97055..0faad48 100644 --- a/kicker.json +++ b/kicker.json @@ -3,6 +3,8 @@ "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", diff --git a/logo.png b/logo.png index 801f94e84c96af295617759cc81db11c3da66486..7bdd4f94353de730372dc681f2c7b238fd64fca0 100644 GIT binary patch literal 23966 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 literal 32526 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 O7(8A5T-G@yGywqA!EHVO diff --git a/templates/gitlab-ci-semrel-vault.yml b/templates/gitlab-ci-semrel-vault.yml index 65a8606..052c1cf 100644 --- a/templates/gitlab-ci-semrel-vault.yml +++ b/templates/gitlab-ci-semrel-vault.yml @@ -1,13 +1,23 @@ # ===================================================================================================================== # === Vault template variant # ===================================================================================================================== +spec: + inputs: + vault-base-url: + description: The Vault server base API url + default: '' + vault-oidc-aud: + description: The `aud` claim for the JWT + default: $CI_SERVER_URL +--- variables: # variabilized vault-secrets-provider image - TBC_VAULT_IMAGE: "registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master" + TBC_VAULT_IMAGE: registry.gitlab.com/to-be-continuous/tools/vault-secrets-provider:master # variables have to be explicitly declared in the YAML to be exported to the service VAULT_ROLE_ID: "$VAULT_ROLE_ID" VAULT_SECRET_ID: "$VAULT_SECRET_ID" - VAULT_OIDC_AUD: "$CI_SERVER_URL" + VAULT_OIDC_AUD: $[[ inputs.vault-oidc-aud ]] + VAULT_BASE_URL: $[[ inputs.vault-base-url ]] .semrel-base: services: diff --git a/templates/gitlab-ci-semrel.yml b/templates/gitlab-ci-semrel.yml index 9b065ca..6d5b663 100644 --- a/templates/gitlab-ci-semrel.yml +++ b/templates/gitlab-ci-semrel.yml @@ -14,6 +14,62 @@ # Floor, Boston, MA 02110-1301, USA. # ========================================================================================= # default workflow rules: Merge Request pipelines +spec: + inputs: + image: + description: The Docker image used to run semantic-release + default: registry.hub.docker.com/library/node:latest + version: + description: The [semantic-release](https://www.npmjs.com/package/semantic-release) version to use + default: latest + exec-version: + description: The [@semantic-release/exec](https://www.npmjs.com/package/@semantic-release/exec) version to use + default: latest + config-dir: + description: directory containing your [semantic-release configuration](https://semantic-release.gitbook.io/semantic-release/usage/configuration#configuration-file) + default: . + 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} + required-plugins-file: + description: Full path to `semrel-required-plugins.txt` file _(relative to `$CI_PROJECT_DIR`)_ + default: semrel-required-plugins.txt + release-disabled: + description: Disable this job. + default: '' + 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 + default: false + changelog-file: + description: '[changelogFile @semantic-release/changelog option](https://github.com/semantic-release/changelog#options).' + default: CHANGELOG.md + 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`).' + default: '' + 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 + default: false + auto-release-enabled: + description: When set the job start automatically. When not set (default), the job is manual. + type: boolean + default: false + hooks-dir: + description: Hook scripts folder. + default: . + commit-message: + description: '[message @semantic-release/git option](https://github.com/semantic-release/git#message)' + default: '' + info-on: + description: Define on which branch(es) the job shall be run + options: + - '' + - prod + - protected + - all + default: '' +--- workflow: rules: # prevent branch pipeline when an MR is open (prefer MR pipeline) @@ -37,17 +93,14 @@ workflow: variables: # variabilized tracking image - TBC_TRACKING_IMAGE: "registry.gitlab.com/to-be-continuous/tools/tracking:master" + TBC_TRACKING_IMAGE: registry.gitlab.com/to-be-continuous/tools/tracking:master # Default Docker image (use a public image - can be overridden) - SEMREL_IMAGE: "registry.hub.docker.com/library/node:latest" - SEMREL_HOOKS_DIR: "." - SEMREL_TAG_FORMAT: "$${version}" + SEMREL_IMAGE: $[[ inputs.image ]] + SEMREL_HOOKS_DIR: $[[ inputs.hooks-dir ]] + SEMREL_TAG_FORMAT: $[[ inputs.tag-format ]] - # default production ref name (pattern) - PROD_REF: '/^(master|main)$/' - - SEMREL_REQUIRED_PLUGINS_FILE: "semrel-required-plugins.txt" + SEMREL_REQUIRED_PLUGINS_FILE: $[[ inputs.required-plugins-file ]] # undocumented (for internal use only) SEMREL_VERIFY_CONDITIONS_CMD: "verify-conditions.sh" @@ -56,10 +109,21 @@ variables: SEMREL_PUBLISH_CMD: "publish.sh" SEMREL_SUCCESS_CMD: "success.sh" SEMREL_FAIL_CMD: "fail.sh" - SEMREL_VERSION: latest - SEMREL_EXEC_VERSION: latest + SEMREL_VERSION: $[[ inputs.version ]] + SEMREL_EXEC_VERSION: $[[ inputs.exec-version ]] + + SEMREL_CONFIG_DIR: $[[ inputs.config-dir ]] + SEMREL_CHANGELOG_ENABLED: $[[ inputs.changelog-enabled ]] + SEMREL_CHANGELOG_FILE: $[[ inputs.changelog-file ]] + SEMREL_CHANGELOG_TITLE: $[[ inputs.changelog-title ]] + SEMREL_DRY_RUN: $[[ inputs.dry-run ]] + SEMREL_AUTO_RELEASE_ENABLED: $[[ inputs.auto-release-enabled ]] + SEMREL_COMMIT_MESSAGE: $[[ inputs.commit-message ]] + SEMREL_RELEASE_DISABLED: $[[ inputs.release-disabled ]] + SEMREL_INFO_ON: $[[ inputs.info-on ]] - SEMREL_CONFIG_DIR: "." + # default production ref name (pattern) + PROD_REF: /^(master|main)$/ stages: - build -- GitLab