From c85e02f06462a35f09abf725ef22b6b4b031ea2a Mon Sep 17 00:00:00 2001 From: Pierre Smeyers <pierre.smeyers@gmail.com> Date: Sun, 14 Jan 2024 14:01:18 +0100 Subject: [PATCH] feat: migrate to GitLab CI/CD component MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⚠ requires GitLab 16.6 or later --- README.md | 47 +++++++++++++++++++++++-------- bumpversion.sh | 4 +-- kicker.json | 2 ++ logo.png | Bin 19758 -> 15247 bytes templates/gitlab-ci-bash.yml | 53 +++++++++++++++++++++++++++++++---- 5 files changed, 87 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 972363c..1ae3c61 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,36 @@ This project implements a GitLab CI/CD template to test and analyse your shell c ## 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/bash/gitlab-ci-bash@3.3.0 + # 2: set/override component inputs + inputs: + bats-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/bash' ref: '3.3.0' file: '/templates/gitlab-ci-bash.yml' + +variables: + # 2: set/override template variables + BASH_BATS_ENABLED: "true" # ⚠ this is only an example ``` ## Jobs @@ -19,12 +42,12 @@ include: This job performs a static analysis of your shell scripts using [ShellCheck](https://github.com/koalaman/shellcheck). -| Name | Description | Default value | +| Input / Variable | Description | Default value | | ----------------------- | -------------------------------------- | ----------------- | -| `BASH_SHELLCHECK_DISABLED` | Set to `true` to disable ShellCheck | _none_ (enabled) | -| `BASH_SHELLCHECK_IMAGE` | The Docker image used to run [ShellCheck](https://github.com/koalaman/shellcheck) | `registry.hub.docker.com/koalaman/shellcheck-alpine:stable` | -| `BASH_SHELLCHECK_FILES` | Shell file(s) pattern to analyse | `**/*.sh` | -| `BASH_SHELLCHECK_OPTS` | ShellCheck [options](https://github.com/koalaman/shellcheck/blob/master/shellcheck.1.md) | _none_ | +| `shellcheck-disabled` / `BASH_SHELLCHECK_DISABLED` | Set to `true` to disable ShellCheck | _none_ (enabled) | +| `shellcheck-image` / `BASH_SHELLCHECK_IMAGE` | The Docker image used to run [ShellCheck](https://github.com/koalaman/shellcheck) | `registry.hub.docker.com/koalaman/shellcheck-alpine:stable` | +| `shellcheck-files` / `BASH_SHELLCHECK_FILES` | Shell file(s) pattern to analyse | `**/*.sh` | +| `shellcheck-opts` / `BASH_SHELLCHECK_OPTS` | ShellCheck [options](https://github.com/koalaman/shellcheck/blob/master/shellcheck.1.md) | _none_ | ### `bash-bats` job @@ -32,13 +55,13 @@ This job performs unit tests based on [Bats](https://bats-core.readthedocs.io/) The job uses the following variables: -| Name | Description | Default value | +| Input / Variable | Description | Default value | | ----------------------- | -------------------------------------- | ----------------- | -| `BASH_BATS_ENABLED` | Set to `true` to enable bats tests | _none_ (disabled) | -| `BASH_BATS_IMAGE` | The Docker image used to run [Bats](https://hub.docker.com/r/bats/bats) | `registry.hub.docker.com/bats/bats:latest` | -| `BASH_BATS_TESTS` | The path to a Bats test file, or the path to a directory containing Bats test files | `tests` | -| `BASH_BATS_OPTS` | Bats [options](https://bats-core.readthedocs.io/en/stable/usage.html) | _none_ | -| `BASH_BATS_LIBRARIES` | Coma separated list of Bats [libraries and add-ons](https://bats-core.readthedocs.io/en/stable/writing-tests.html#libraries-and-add-ons) (formatted as `lib_name_1@archive_url_1 lib_name_2@archive_url_2 ...`) | _none_ | +| `bats-enabled` / `BASH_BATS_ENABLED` | Set to `true` to enable bats tests | _none_ (disabled) | +| `bats-image` / `BASH_BATS_IMAGE` | The Docker image used to run [Bats](https://hub.docker.com/r/bats/bats) | `registry.hub.docker.com/bats/bats:latest` | +| `bats-tests` / `BASH_BATS_TESTS` | The path to a Bats test file, or the path to a directory containing Bats test files | `tests` | +| `bats-opts` / `BASH_BATS_OPTS` | Bats [options](https://bats-core.readthedocs.io/en/stable/usage.html) | _none_ | +| `bats-libraries` / `BASH_BATS_LIBRARIES` | Coma separated list of Bats [libraries and add-ons](https://bats-core.readthedocs.io/en/stable/writing-tests.html#libraries-and-add-ons) (formatted as `lib_name_1@archive_url_1 lib_name_2@archive_url_2 ...`) | _none_ | In addition to a textual report in the console, this job produces the following reports, kept for one day: 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 7457b75..fcb0459 100644 --- a/kicker.json +++ b/kicker.json @@ -3,6 +3,8 @@ "description": "Test and analyse your shell code", "template_path": "templates/gitlab-ci-bash.yml", "kind": "build", + "prefix": "bash", + "is_component": true, "features": [ { "id": "shellcheck", diff --git a/logo.png b/logo.png index abbd377dd0e3755ab918cc71cb5402551a8a156a..626db6146c3eed4930dff68bb537f68e5f4c7c64 100644 GIT binary patch literal 15247 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 ZZzsJ$a80JbJq88_22WQ%mvv4FO#obTuMPkJ literal 19758 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 SsC)qJ!|-(Vb6Mw<&;$VIbIKtA diff --git a/templates/gitlab-ci-bash.yml b/templates/gitlab-ci-bash.yml index b130e4e..d7c751f 100644 --- a/templates/gitlab-ci-bash.yml +++ b/templates/gitlab-ci-bash.yml @@ -13,6 +13,43 @@ # program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth # Floor, Boston, MA 02110-1301, USA. # ========================================================================================= +spec: + inputs: + shellcheck-disabled: + description: Disable ShellCheck + type: boolean + default: false + shellcheck-image: + description: The Docker image used to run [ShellCheck](https://github.com/koalaman/shellcheck) + default: registry.hub.docker.com/koalaman/shellcheck-alpine:stable + shellcheck-files: + description: Shell file(s) pattern to analyse + default: '**/*.sh' + shellcheck-opts: + description: ShellCheck [options](https://github.com/koalaman/shellcheck/blob/master/shellcheck.1.md) + default: '' + bats-enabled: + description: Enable Bats + type: boolean + default: false + 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 + bats-tests: + description: The path to a Bats test file, or the path to a directory containing Bats test files + default: tests + bats-opts: + description: Bats [options](https://bats-core.readthedocs.io/en/stable/usage.html) + default: '' + 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) + + Formatted as: `lib_name_1@archive_url_1 lib_name_2@archive_url_2 ...` + + Example: `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` + default: '' +--- # default workflow rules: Merge Request pipelines workflow: rules: @@ -56,19 +93,25 @@ 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 - BASH_BATS_IMAGE: "registry.hub.docker.com/bats/bats:latest" - BASH_BATS_TESTS: "tests" + BASH_BATS_IMAGE: $[[ inputs.bats-image ]] + BASH_BATS_TESTS: $[[ inputs.bats-tests ]] - BASH_SHELLCHECK_IMAGE: "registry.hub.docker.com/koalaman/shellcheck-alpine:stable" - BASH_SHELLCHECK_FILES: "**/*.sh" + BASH_SHELLCHECK_IMAGE: $[[ inputs.shellcheck-image ]] + BASH_SHELLCHECK_FILES: $[[ inputs.shellcheck-files ]] # default production ref name (pattern) PROD_REF: '/^(master|main)$/' # default integration ref name (pattern) INTEG_REF: '/^develop$/' + BASH_SHELLCHECK_DISABLED: $[[ inputs.shellcheck-disabled ]] + BASH_SHELLCHECK_OPTS: $[[ inputs.shellcheck-opts ]] + BASH_BATS_ENABLED: $[[ inputs.bats-enabled ]] + BASH_BATS_OPTS: $[[ inputs.bats-opts ]] + BASH_BATS_LIBRARIES: $[[ inputs.bats-libraries ]] + stages: - build - test -- GitLab