GoPublishModule

JFrog Pipelines Documentation

ft:sourceType
Paligo

The GoPublishModule native step publishes GO (GoLang) modules to an Artifactory repository.

Important

The GoPublishModule native step uses Go runtime image by default. If runtime image of any other type is configured at pipeline-level for this native step, it will be ignored.

YAML Schema

The YAML schema for GoPublishModule native step is as follows:

GoPublishModule

pipelines: 
  - name:   <string>
    steps:
      - name: <string>
        type: GoPublishModule
        configuration:
          #inherits all the tags from bash

          forceXrayScan:        <boolean>         # optional
          failOnScan:           <boolean>         # default true
          autoPublishBuildInfo: <boolean>         # optional
          
          # for payloadType module:
          sourceLocation: <string>                # optional
          version: <string>                       # required
          targetRepository: <string>              # required
          self: <boolean>                         # optional
          deps: <string>                          # optional 
          resolverRepo: <string>                  # optional

          integrations:
            - name:         <artifactory integration>  # required if autoPublishBuildInfo is false
          inputResources:
            - name:         <gitrepo resource>         # required
            - name:         <filespec resource>        # optional
          outputResources:
            - name:         <buildinfo resource>       # required if autoPublishBuildInfo is true

        execution:
          onStart:
            - echo "Preparing for work..."
          onSuccess:
            - echo "Job well done!"
          onFailure:
            - echo "uh oh, something went wrong"
          onComplete:                                  #always
            - echo "Cleaning up some stuff"
Tags
name

An alphanumeric string (underscores are permitted) that identifies the step.

type

Must be GoPublishModule for this step type.

configuration

Specifies all configuration selections for the step's execution environment. This step inherits the Bash/ PowerShell step configuration tags, including these pertinenttags:

Tag

Description of usage

Required/Optional

integrations

Specifies an Artifactory Integration. Required when autoPublishBuildInfo is set to false. Otherwise, the Artifactory integration specified in the BuildInfo resource will be used.

May be required

inputResources

Must specify a GitReporesource. The publish commands will run on the Git repository at sourceLocation.

Also may specify an optional FileSpec resource that specifies what files to copy to sourceLocation.

Required

Optional

outputResources

Must specify a BuildInfo resource whenautoPublishBuildInfois set to true.

If JFROG_CLI_BUILD_NAMEor JFROG_CLI_BUILD_NUMBERis set as an environment variable for the pipeline or the step, that name and/or number is used for the output BuildInfo. Otherwise, the default buildNameand buildNumberare $pipeline_name and $run_number respectively.

May be required

In addition, these tags can be defined to support the step's native operation:

Tags derived from Bash

All native steps derive from the Bash step. This means that all steps share the same base set of tags from Bash, while native steps have their own additional tags as well that support the step's particular function. So it's important to be familiar with the Bash step definition, since it's the core of the definition of all other steps.

Tag

Description of usage

Required/Optional

sourceLocation

Location of the Go source files relative to the root of the input GitRepo repository. If not specified, the default is the root of the GitRepo repository.

Optional

version

Version of the module to build.

Required

targetRepository

Repository in the Artifactory where the module will be published.

Required

resolverRepo

Name of the Artifactory repository to be used to resolve dependencies.

Optional

self

When true, uses the --self option to publish the Project to Artifactory. For more information, see the CLI for JFrog Artifactory documentation. Not supported with JFrog CLI v2.

Optional

deps

When specified, uses the --deps option to specify a list of project dependencies to Artifactory. For more information, see the CLI for JFrog Artifactory documentation. Not supported with JFrog CLI v2.

Optional

forceXrayScan

When set to true, force an Xray scan after publishing to Artifactory.

Default is false.

Optional

failOnScan

When set to true, and when the Xray Policy Rule Fail Build checkbox is checked, a failed Xray scan will result in a failure of the step.

Default is true.

Optional

autoPublishBuildInfo

When set to true, automatically publish the implicitly created BuildInfo.

Default is false.

Optional

execution

Declares collections of shell command sequences to perform for pre- and post-execution phases:

Tag

Description of usage

Required/Optional

onStart

Commands to execute in advance of the native operation

Optional

onSuccess

Commands to execute on successful completion

Optional

onFailure

Commands to execute on failed completion

Optional

onComplete

Commands to execute on any completion

Optional

The actions performed for the onExecute phase are inherent to this step type and may not be overridden.

Examples

The following examples show how to configure a GoPublishModule step.

Full Pipeline Example
# This config file is templatized so that it can be easily customized. Values can be provided with a values.yml file.
template: true   # required for local templates
valuesFilePath: ./values.yml

resources:
  # Sample Go app in a GitRepo
  - name: go_repo
    type: GitRepo
    configuration:
      path: {{ .Values.repoPath }}
      branches:
        include: main
      gitProvider: {{ .Values.gitProvider }}

  # Build info for the published Go app
  - name: go_buildinfo
    type: BuildInfo
    configuration:
      sourceArtifactory: {{ .Values.artifactory }}    

pipelines:
  - name: go_publish_binary_example
    steps:
      # Build the Go sample app from the GitRepo
      - name: build_go
        type: GoBuild
        configuration:
          sourceLocation: .
          resolverRepo: go-virtual
          noRegistry: true
          inputResources:
            - name: go_repo
          integrations:
            - name: {{ .Values.artifactory }}
             
      # Publish the Go sample app binary to Artifactory
      - name: cicd_go_publish_binary
        type: GoPublishBinary
        configuration:
          # forceXrayScan: true
          # failOnScan: false
          autoPublishBuildInfo: true
          inputSteps:
            - name: build_go
          targetRepository: go-local
          integrations:
            - name: myArtifactory
          outputResources:
            - name: go_buildinfo
Using Default Locations

A GoPublishModule step using default locations and publishing version v0.0.0 to an Artifactory repository named go-repo.

GoPublishModule

pipelines: 
  - name: goPublishModulePipeline
    steps:
      - name: goPublishModuleStep
        type: GoPublishModule
        configuration: 
          version: "v0.0.0"
          targetRepository: go-repo
          inputResources:
            - name: gitRepoResource
          integrations:
            - name: artifactory_integration
Different Source Location in the GitRepo

A GoPublishModule step specifying a different source location in the GitRepo and publishing the project and dependencies to the Artifactory repository named go-repo as well.

GoPublishModule

pipelines: 
  - name: goPublishModulePipeline
    steps:
      - name: goPublishModuleStep
        type: GoPublishModule
        configuration: 
          version: "v0.0.${run_number}"
          targetRepository: go-repo
                  resolverRepo: go-virtual
          self: true
          deps: ALL
          inputResources:
            - name: gitRepoResource
          integrations:
            - name: artifactory_integration
Publish Build Info and Trigger Xray Scan

A GoPublishModule step that publishes the build info and triggers an Xray scan.

GoPublishModule

pipelines: 
  - name: goPublishModulePipeline
    steps:
      - name: goPublishModuleStep
        type: GoPublishModule
        configuration: 
          version: "v0.0.${run_number}"
          targetRepository: go-repo
          autoPublishBuildInfo: true
          forceXrayScan: true
          inputResources:
            - name: gitRepoResource
          outputResources:
            - name: outputBuildInfo
          integrations:
            - name: artifactory_integration
How it Works

When you use the GoPublishModule native step in a pipeline, it performs the following functions in the background:

  • jfrog config add (if there is an output BuildInfo resource, configure the JFrog CLI with the Artifactory credentials in that resource)

  • jfrog config use (to set the current default Artifactory configuration)

  • cp (if there is an input FileSpec, copy the files to the root of the cloned GitRepo)

  • jfrog rt go-config (configure the repository to resolve dependencies)

  • jfrog rt go-publish (publish)

  • add_run_variables (save information about this step for future steps)

  • jfrog rt build-collect-env (collect environment variables)

  • jfrog rt build-publish (if autoPublishBuildInfo is true, publish the build info)

  • write_output (if autoPublishBuildInfo is true, update the output resource)

  • jfrog rt build-scan (if forceXrayScan is true, trigger a scan)

  • add_run_files (save the build information in the run state for later publish steps)