1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/resources/metadata/golangBuild.yaml
Jk1484 ffc931aad1
feat(golangBuild): use 'unit' build tag to include tests during test execution (#4345)
* Added unit tag as argument. Added description to runTests command. Changed code generator to have unit build tag in generated unit test files.

* Added unit build tag to all unit test files.

* added to new unit test unit build tag

* Update verify-go.yml

* small fix

---------

Co-authored-by: Muhammadali Nazarov <Muhammadali.Nazarov@acronis.com>
Co-authored-by: Christopher Fenner <26137398+CCFenner@users.noreply.github.com>
2023-05-03 21:02:11 +05:00

274 lines
9.5 KiB
YAML

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:
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
params:
- name: buildFlags
type: "[]string"
description: Defines list of build flags to be used.
scope:
- PARAMETERS
- STAGES
- STEPS
- 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
- 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
description: Creates the bill of materials (BOM) using CycloneDX plugin. It requires Go 1.17 or newer.
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
- 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
- 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:
- name: commonPipelineEnvironment
param: custom/rawRepositoryPassword
- 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:
- name: commonPipelineEnvironment
param: custom/rawRepositoryUsername
- 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:
- name: commonPipelineEnvironment
param: custom/rawRepositoryURL
- name: commonPipelineEnvironment
param: custom/repositoryUrl
- name: reportCoverage
type: bool
description: Defines if a coverage report should be created.
default: true
scope:
- STEPS
- STAGES
- PARAMETERS
- name: runLint
type: bool
description: Configures the build to run linters with [golangci-lint](https://golangci-lint.run/).
scope:
- STEPS
- STAGES
- PARAMETERS
- name: runTests
type: bool
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`
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:
- GENERAL
- 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
- 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:
- 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
param: password
- type: vaultSecret
name: golangPrivateModulesGitTokenVaultSecret
default: golang
- name: artifactVersion
type: string
description: Version of the artifact to be built.
scope:
- GENERAL
- PARAMETERS
- STAGES
- STEPS
resourceRef:
- name: commonPipelineEnvironment
param: artifactVersion
- 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
default: "https://github.com/golangci/golangci-lint/releases/download/v1.51.2/golangci-lint-1.51.2-linux-amd64.tar.gz"
outputs:
resources:
- name: commonPipelineEnvironment
type: piperEnvironment
params:
- name: custom/buildSettingsInfo
- name: custom/artifacts
type: "piperenv.Artifacts"
- name: reports
type: reports
params:
- filePattern: "**/bom-golang.xml"
type: sbom
- filePattern: "**/TEST-*.xml"
type: junit
- filePattern: "**/cobertura-coverage.xml"
type: cobertura-coverage
containers:
- name: golang
image: golang:1
options:
- name: -u
value: "0"