2021-12-06 17:17:59 +02:00
metadata :
name : golangBuild
description : This step will execute a golang build.
longDescription : |
This step will build a golang project.
It will also execute golang-based tests using [gotestsum](https://github.com/gotestyourself/gotestsum) and with that allows for reporting test results and test coverage.
Besides execution of the default tests the step allows for running an additional integration test run using `-tags=integration` using pattern `./...`
If the build is successful the resulting artifact can be uploaded to e.g. a binary repository automatically.
spec :
inputs :
2022-01-31 11:45:40 +02:00
secrets :
- name : golangPrivateModulesGitTokenCredentialsId
description : Jenkins 'Username with password' credentials ID containing username/password for http access to your git repos where your go private modules are stored.
type : jenkins
2021-12-06 17:17:59 +02:00
params :
- name : buildFlags
type : "[]string"
description : Defines list of build flags to be used.
scope :
- PARAMETERS
- STAGES
- STEPS
2022-02-21 10:16:48 +02:00
- name : buildSettingsInfo
type : string
description : build settings info is typically filled by the step automatically to create information about the build settings that were used during the maven build . This information is typically used for compliance related processes.
scope :
- STEPS
- STAGES
- PARAMETERS
resourceRef :
- name : commonPipelineEnvironment
param : custom/buildSettingsInfo
2021-12-06 17:17:59 +02:00
- name : cgoEnabled
type : bool
description : "If active: enables the creation of Go packages that call C code."
scope :
- STEPS
- STAGES
- PARAMETERS
- name : coverageFormat
type : string
description : Defines the format of the coverage repository.
possibleValues :
- cobertura
- html
scope :
- STEPS
- STAGES
- PARAMETERS
default : html
- name : createBOM
type : bool
2022-02-08 10:23:33 +02:00
description : Creates the bill of materials (BOM) using CycloneDX plugin. It requires Go 1.17 or newer.
2021-12-06 17:17:59 +02:00
scope :
- GENERAL
- STEPS
- STAGES
- PARAMETERS
- name : customTlsCertificateLinks
type : "[]string"
description : "List of download links to custom TLS certificates. This is required to ensure trusted connections to instances with repositories (like nexus) when publish flag is set to true."
scope :
- GENERAL
- PARAMETERS
- STAGES
- STEPS
- name : excludeGeneratedFromCoverage
type : bool
description : "Defines if generated files should be excluded, according to [https://golang.org/s/generatedcode](https://golang.org/s/generatedcode)."
scope :
- PARAMETERS
- STAGES
- STEPS
default : true
2024-01-25 12:44:24 +02:00
- name : failOnLintingError
type : bool
description : "Defines if step will return an error in case linting runs into a problem"
scope :
- PARAMETERS
- STAGES
- STEPS
default : true
2021-12-06 17:17:59 +02:00
- name : ldflagsTemplate
type : string
description : Defines the content of -ldflags option in a golang template format.
longDescription : |
The template allows using commonPipelineEnvironment parameters in the form `.CPE["<paramName>"]`
Examples
* `-X github.com/SAP/jenkins-library/pkg/log.Version={{index .CPE "artifactVersion"}}`.
* `-X github.com/SAP/jenkins-library/pkg/log.LibraryRepository={{index .CPE "custom/repositoryId"}}`
scope :
- PARAMETERS
- STAGES
- STEPS
- name : output
type : string
description : Defines the build result or output directory as per `go build` documentation.
scope :
- PARAMETERS
- STAGES
- STEPS
- name : packages
type : "[]string"
description : List of packages to be build as per `go build` documentation.
scope :
- PARAMETERS
- STAGES
- STEPS
- name : publish
type : bool
description : Configures the build to publish artifacts to a repository.
scope :
- STEPS
- STAGES
- PARAMETERS
2022-02-02 16:44:51 +02:00
- name : targetRepositoryPassword
description : "Password for the target repository where the compiled binaries shall be uploaded - typically provided by the CI/CD environment."
type : string
scope :
- PARAMETERS
- STAGES
- STEPS
secret : true
resourceRef :
2022-03-17 09:01:00 +02:00
- name : commonPipelineEnvironment
param : custom/rawRepositoryPassword
2022-02-02 16:44:51 +02:00
- name : commonPipelineEnvironment
param : custom/repositoryPassword
- name : targetRepositoryUser
description : "Username for the target repository where the compiled binaries shall be uploaded - typically provided by the CI/CD environment."
type : string
scope :
- PARAMETERS
- STAGES
- STEPS
secret : true
resourceRef :
2022-03-17 09:01:00 +02:00
- name : commonPipelineEnvironment
param : custom/rawRepositoryUsername
2022-02-02 16:44:51 +02:00
- name : commonPipelineEnvironment
param : custom/repositoryUsername
- name : targetRepositoryURL
description : "URL of the target repository where the compiled binaries shall be uploaded - typically provided by the CI/CD environment."
type : string
scope :
- PARAMETERS
- STAGES
- STEPS
resourceRef :
2022-03-17 09:01:00 +02:00
- name : commonPipelineEnvironment
param : custom/rawRepositoryURL
2022-02-02 16:44:51 +02:00
- name : commonPipelineEnvironment
2022-02-04 13:18:35 +02:00
param : custom/repositoryUrl
2021-12-06 17:17:59 +02:00
- name : reportCoverage
type : bool
description : Defines if a coverage report should be created.
default : true
scope :
- STEPS
- STAGES
- PARAMETERS
2022-07-27 07:22:35 +02:00
- name : runLint
type : bool
description : Configures the build to run linters with [golangci-lint](https://golangci-lint.run/).
scope :
- STEPS
- STAGES
- PARAMETERS
2021-12-06 17:17:59 +02:00
- name : runTests
type : bool
2023-05-03 18:02:11 +02:00
description : Activates execution of tests using [gotestsum](https://github.com/gotestyourself/gotestsum). Tag Go unit tests with 'unit' build tag to exclude them using `--runTests=false`
2021-12-06 17:17:59 +02:00
default : true
scope :
- STEPS
- STAGES
- PARAMETERS
- name : runIntegrationTests
type : bool
description : Activates execution of a second test run using tag `integration`.
scope :
- STEPS
- STAGES
- PARAMETERS
- name : targetArchitectures
type : "[]string"
description : Defines the target architectures for which the build should run using OS and architecture separated by a comma.
default : linux,amd64
scope :
2022-02-09 11:17:34 +02:00
- GENERAL
2021-12-06 17:17:59 +02:00
- STEPS
- STAGES
- PARAMETERS
mandatory : true
- name : testOptions
type : "[]string"
description : Options to pass to test as per `go test` documentation (comprises e.g. flags, packages).
scope :
- STEPS
- STAGES
- PARAMETERS
- name : testResultFormat
type : "string"
description : Defines the output format of the test results.
possibleValues :
- junit
- standard
default : junit
scope :
- STEPS
- STAGES
- PARAMETERS
2022-01-31 11:45:40 +02:00
- name : privateModules
type : "string"
description : Tells go which modules shall be considered to be private (by setting [GOPRIVATE](https://pkg.go.dev/cmd/go#hdr-Configuration_for_downloading_non_public_code)).
scope :
2023-10-06 16:22:26 +02:00
- GENERAL
2022-01-31 11:45:40 +02:00
- STEPS
- STAGES
- PARAMETERS
alias :
- goprivate
- name : privateModulesGitToken
description : GitHub personal access token as per https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line.
scope :
- GENERAL
- PARAMETERS
- STAGES
- STEPS
type : string
secret : true
resourceRef :
- name : golangPrivateModulesGitTokenCredentialsId
type : secret
2022-04-19 12:59:59 +02:00
param : password
2022-01-31 11:45:40 +02:00
- type : vaultSecret
name : golangPrivateModulesGitTokenVaultSecret
default : golang
2022-02-04 16:22:57 +02:00
- name : artifactVersion
type : string
description : Version of the artifact to be built.
scope :
- GENERAL
- PARAMETERS
- STAGES
- STEPS
resourceRef :
- name : commonPipelineEnvironment
param : artifactVersion
2022-12-07 18:13:44 +02:00
- name : golangciLintUrl
type : string
description : Specifies the download url of the Golangci-Lint Linux amd64 tar binary file. This can be found at https://github.com/golangci/golangci-lint/releases.
scope :
- PARAMETERS
- STEPS
2023-03-16 14:53:24 +02:00
default : "https://github.com/golangci/golangci-lint/releases/download/v1.51.2/golangci-lint-1.51.2-linux-amd64.tar.gz"
2022-02-17 18:56:45 +02:00
outputs :
resources :
2022-02-21 10:16:48 +02:00
- name : commonPipelineEnvironment
type : piperEnvironment
params :
- name : custom/buildSettingsInfo
2022-05-05 15:06:42 +02:00
- name : custom/artifacts
2022-05-05 12:39:59 +02:00
type : "piperenv.Artifacts"
2022-02-17 18:56:45 +02:00
- name : reports
type : reports
params :
2022-08-01 13:38:49 +02:00
- filePattern : "**/bom-golang.xml"
2022-02-17 18:56:45 +02:00
type : sbom
- filePattern : "**/TEST-*.xml"
type : junit
- filePattern : "**/cobertura-coverage.xml"
type : cobertura-coverage
2021-12-06 17:17:59 +02:00
containers :
- name : golang
image : golang:1
options :
- name : -u
value : "0"