From 53ee9b61ad672286b33167b894ef8b2e9d195be3 Mon Sep 17 00:00:00 2001
From: "Benguria Elguezabal, Gorka" <gorka.benguria@tecnalia.com>
Date: Wed, 3 Jul 2024 00:53:11 +0200
Subject: [PATCH] adds job tags

---
 README.md                      | 10 +++++-
 kicker.json                    | 56 ++++++++++++++++++++++++++++++++++
 templates/gitlab-ci-golang.yml | 41 +++++++++++++++++++++++++
 3 files changed, 106 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 56e8f70..6caffa8 100644
--- a/README.md
+++ b/README.md
@@ -57,6 +57,7 @@ It is disable by default and can be enabled by setting the `GO_GENERATE_MODULES`
 | Input / Variable | Description                                                                                                | Default value   |
 |------------------|------------------------------------------------------------------------------------------------------------|-----------------|
 | `generate-modules` / `GO_GENERATE_MODULES` | Space separated list of Go code generator modules (ex: `stringer mockery`) | _none_ (disabled) |
+| `go-generate-job-tags` / `GO_GENERATE_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
 
 #### Capture generated files as job artifacts
 
@@ -144,6 +145,9 @@ These jobs use the following variable:
 | `target-os` / `GO_TARGET_OS` | The `GOOS` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)           | _none_ (fallback to go docker image `GOOS`)   |
 | `target-arch` / `GO_TARGET_ARCH` | The `GOARCH` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)         | _none_ (fallback to go docker image `GOARCH`) |
 | `cobertura-flags` / `GO_COBERTURA_FLAGS` | The `GOFLAGS` to use with `gocover-cobertura` if needed                                                                 | _none_                                        |
+| `go-build-job-tags` / `GO_BUILD_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
+| `go-test-job-tags` / `GO_TEST_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
+| `go-build-test-job-tags` / `GO_BUILD_TEST_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
 
 In addition to a textual report in the console, the test jobs produce the following reports, kept for one day:
 
@@ -166,6 +170,7 @@ It is bound to the `build` stage, and uses the following variables:
 | `ci-lint-image` / `GO_CI_LINT_IMAGE` | The Docker image used to run `golangci-lint`                                                             | `registry.hub.docker.com/golangci/golangci-lint:latest-alpine` |
 | `ci-lint-args` / `GO_CI_LINT_ARGS` | `golangci-lint` [command line arguments](https://github.com/golangci/golangci-lint#command-line-options) | `-E gosec,goimports ./...`             |
 | `ci-lint-disabled` / `GO_CI_LINT_DISABLED` | Set to `true` to disable this job                                                                        | _none_ (enabled)                        |
+| `go-ci-lint-job-tags` / `GO_CI_LINT_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
 
 In addition to a textual report in the console, this job produces the following reports, kept for one day:
 
@@ -183,6 +188,7 @@ It is bound to the `test` stage, and uses the following variables:
 | Input / Variable | Description                                                                                   | Default value     |
 |------------------------|-----------------------------------------------------------------------------------------------|-------------------|
 | `mod-outdated-args` / `GO_MOD_OUTDATED_ARGS` | `god-mod-outdated` [command line arguments](https://github.com/psampaz/go-mod-outdated#usage) | `-update -direct` |
+| `go-mod-outdated-job-tags` / `GO_MOD_OUTDATED_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
 
 Checking outdated modules can be a long operation and therefore the job is configured to be ran **manually** by default (overridable).
 
@@ -230,6 +236,7 @@ It is bound to the `test` stage, and uses the following variables:
 | `sbom-disabled` / `GO_SBOM_DISABLED` | Set to `true` to disable this job | _none_ |
 | `sbom-image` / `GO_SBOM_IMAGE` | Image of cyclonedx-gomod used for SBOM analysis | `registry.hub.docker.com/cyclonedx/cyclonedx-gomod:latest` |
 | `sbom-opts` / `GO_SBOM_OPTS` | [@cyclonedx/cyclonedx-gomod options](https://github.com/CycloneDX/cyclonedx-gomod#usage) used for SBOM analysis | `-main .` |
+| `go-sbom-job-tags` / `GO_SBOM_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
 
 :warning: if you don't have your main class located at the root of your `GO_PROJECT_DIR`, then you will need to override the `-main` option in `GO_SBOM_OPTS` and define your real main class location.
 
@@ -249,4 +256,5 @@ It is bound to the `test` stage, and uses the following variables:
 | Input / Variable | Description                            | Default value     |
 | --------------------- | -------------------------------------- | ----------------- |
 | `vulncheck-disabled` / `GO_VULNCHECK_DISABLED` | Set to `true` to disable this job | _none_ 
-| `vulncheck-args` / `GO_VULNCHECK_ARGS` | `govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags) | `./...` |
\ No newline at end of file
+| `vulncheck-args` / `GO_VULNCHECK_ARGS` | `govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags) | `./...` |
+| `go-govulncheck-job-tags` / `GO_GOVULNCHECK_JOB_TAGS` | Tags to be used for selecting runners for the job | `[]`            |
\ No newline at end of file
diff --git a/kicker.json b/kicker.json
index 3d1e9cc..bdeaf2a 100644
--- a/kicker.json
+++ b/kicker.json
@@ -87,6 +87,27 @@
       "name": "GO_COBERTURA_FLAGS",
       "description": "Build flags to add to use gocover-cobertura, leave blank if not needed",
       "advanced": true
+    },
+    {
+      "name": "GO_GO_BUILD_JOB_TAGS",
+      "description": "Tags to be used for selecting runners for the job",
+      "type": "array",
+      "default": [],
+      "advanced": true
+    },
+    {
+      "name": "GO_GO_TEST_JOB_TAGS",
+      "description": "Tags to be used for selecting runners for the job",
+      "type": "array",
+      "default": [],
+      "advanced": true
+    },
+    {
+      "name": "GO_GO_BUILD_TEST_JOB_TAGS",
+      "description": "Tags to be used for selecting runners for the job",
+      "type": "array",
+      "default": [],
+      "advanced": true
     }
   ],
   "features": [
@@ -99,6 +120,13 @@
           "name": "GO_GENERATE_MODULES",
           "description": "Space separated list of Go code generator modules (ex: `stringer mockery`)",
           "mandatory": true
+        },
+        {
+          "name": "GO_GO_GENERATE_JOB_TAGS",
+          "description": "Tags to be used for selecting runners for the job",
+          "type": "array",
+          "default": [],
+          "advanced": true
         }
       ]
     },
@@ -118,6 +146,13 @@
           "description": "`golangci-lint` [command line arguments](https://github.com/golangci/golangci-lint#command-line-options)",
           "default": "-E gosec,goimports ./...",
           "advanced": true
+        },
+        {
+          "name": "GO_GO_CI_LINT_JOB_TAGS",
+          "description": "Tags to be used for selecting runners for the job",
+          "type": "array",
+          "default": [],
+          "advanced": true
         }
       ]
     },
@@ -131,6 +166,13 @@
           "description": "`god-mod-outdated` [command line arguments](https://github.com/psampaz/go-mod-outdated#usage",
           "default": "-update -direct",
           "advanced": true
+        },
+        {
+          "name": "GO_GO_MOD_OUTDATED_JOB_TAGS",
+          "description": "Tags to be used for selecting runners for the job",
+          "type": "array",
+          "default": [],
+          "advanced": true
         }
       ]
     },
@@ -149,6 +191,13 @@
           "description": "[@cyclonedx/cyclonedx-gomod options](https://github.com/CycloneDX/cyclonedx-gomod#usage) used for SBOM analysis",
           "default": "-main .",
           "advanced": true
+        },
+        {
+          "name": "GO_GO_SBOM_JOB_TAGS",
+          "description": "Tags to be used for selecting runners for the job",
+          "type": "array",
+          "default": [],
+          "advanced": true
         }
       ]
     },
@@ -163,6 +212,13 @@
           "description": "`govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags)",
           "default": "./...",
           "advanced": true
+        },
+        {
+          "name": "GO__GO_GOVULNCHECK_JOB_TAGS",
+          "description": "Tags to be used for selecting runners for the job",
+          "type": "array",
+          "default": [],
+          "advanced": true
         }
       ]
     }
diff --git a/templates/gitlab-ci-golang.yml b/templates/gitlab-ci-golang.yml
index 336d505..843c492 100644
--- a/templates/gitlab-ci-golang.yml
+++ b/templates/gitlab-ci-golang.yml
@@ -100,6 +100,39 @@ spec:
     vulncheck-args:
       description: '`govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags)'
       default: ./...
+    go-generate-job-tags:
+      description: tags to filter applicable runners for go-generate job
+      type: array
+      default: []
+    go-build-job-tags:
+      description: tags to filter applicable runners for go-build job
+      type: array
+      default: []
+    go-test-job-tags:
+      description: tags to filter applicable runners for go-test job
+      type: array
+      default: []
+    go-build-test-job-tags:
+      description: tags to filter applicable runners for go-build-test job
+      type: array
+      default: []
+    go-ci-lint-job-tags:
+      description: tags to filter applicable runners for go-ci-lint job
+      type: array
+      default: []
+    go-mod-outdated-job-tags:
+      description: tags to filter applicable runners for go-mod-outdated job
+      type: array
+      default: []
+    go-sbom-job-tags:
+      description: tags to filter applicable runners for go-sbom job
+      type: array
+      default: []
+    go-govulncheck-job-tags:
+      description: tags to filter applicable runners for go-govulncheck job
+      type: array
+      default: []
+
 ---
 workflow:
   rules:
@@ -501,6 +534,7 @@ go-generate:
       - "${GO_PROJECT_DIR}/**/mock/"
       - "${GO_PROJECT_DIR}/**/mocks/"
       - "${GO_PROJECT_DIR}/**/*mock*.go"
+  tags: $[[ inputs.go-generate-job-tags ]]
 
 go-build:
   extends: .go-base
@@ -515,6 +549,7 @@ go-build:
   rules:
     # if $GO_TEST_IMAGE set
     - if: '$GO_TEST_IMAGE'
+  tags: $[[ inputs.go-build-job-tags ]]
 
 go-test:
   extends: .go-base
@@ -541,6 +576,7 @@ go-test:
     - if: '$GO_TEST_IMAGE == ""'
       when: never
     - !reference [.test-policy, rules]
+  tags: $[[ inputs.go-test-job-tags ]]
 
 go-build-test:
   extends: .go-base
@@ -567,6 +603,7 @@ go-build-test:
   rules:
     # if $GO_TEST_IMAGE not set
     - if: '$GO_TEST_IMAGE == ""'
+  tags: $[[ inputs.go-build-test-job-tags ]]
 
 go-ci-lint:
   extends: .go-base
@@ -590,6 +627,7 @@ go-ci-lint:
     - if: '$GO_CI_LINT_DISABLED == "true"'
       when: never
     - !reference [.test-policy, rules]
+  tags: $[[ inputs.go-ci-lint-job-tags ]]
 
 go-mod-outdated:
   extends: .go-base
@@ -618,6 +656,7 @@ go-mod-outdated:
     # else manual & non-blocking
     - when: manual
       allow_failure: true
+  tags: $[[ inputs.go-mod-outdated-job-tags ]]
 
 go-sbom:
   extends: .go-base
@@ -654,6 +693,7 @@ go-sbom:
     - if: '$GO_SBOM_DISABLED == "true"'
       when: never
     - !reference [.test-policy, rules]
+  tags: $[[ inputs.go-sbom-job-tags ]]
 
 go-govulncheck:
   extends: .go-base
@@ -668,3 +708,4 @@ go-govulncheck:
     - if: '$GO_VULNCHECK_DISABLED == "true"'
       when: never
     - !reference [.test-policy, rules]
+  tags: $[[ inputs.go-govulncheck-job-tags ]]
-- 
GitLab