Skip to content

Azure Pipelines

GoReleaser can also be used within our official GoReleaser Extensions for Azure DevOps through Visual Studio marketplace.

Task definition

- task: goreleaser@0
  inputs:
    version: 'latest'
    distribution: 'goreleaser'
    args: ''
    workdir: '$(Build.SourcesDirectory)'

Task inputs

Following inputs can be used:

Name Type Default Description
distribution String goreleaser GoReleaser distribution, either goreleaser or goreleaser-pro
version1 String latest GoReleaser version
args String Arguments to pass to GoReleaser
workdir String $(Build.SourcesDirectory) Working directory (below repository root)
installOnly Bool false Just install GoReleaser

Task environment variables

...
variables:
- name: GORELEASER_KEY
  value: xxx
...

or short:

...
variables:
  GORELEASER_KEY: xxx
...

Following environment variables can be used, as environment variable.

Name Description
GITHUB_TOKEN GITHUB_TOKEN for e.g. brew
GORELEASER_KEY Your GoReleaser Pro License Key, in case you are using the goreleaser-pro distribution

Example pipeline

Generally there are two ways to define an Azure Pipeline: Classic pipelines defined in the UI or YAML pipelines.

Here is how to do it with YAML:

# customize trigger to your needs
trigger:
  branches:
    include:
      - main
      - refs/tags/*

variables:
  GO_VERSION: "1.20"

pool:
  vmImage: ubuntu-latest

jobs:
  - job: Test
    steps:
      - task: GoTool@0
        inputs:
          version: "$(GO_VERSION)"
        displayName: Install Go

      - bash: go test ./...
        displayName: Run Go Tests

  - job: Release
    # only runs if Test was successful
    dependsOn: Test
    # only runs if pipeline was triggered from a branch.
    condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags'))
    steps:
      - task: GoTool@0
        inputs:
          version: "$(GO_VERSION)"
        displayName: Install Go

      - task: goreleaser@0
        inputs:
          version: 'latest'
          distribution: 'goreleaser'
          args: ''
          workdir: '$(Build.SourcesDirectory)'

In this example a Test job is used to run go test ./... to first make sure that there're no failing tests. Only if that job succeeds and the pipeline was triggered from a tag (because of the defined condition) Goreleaser will be run.


  1. Can be a fixed version like v1.10.0 or a max satisfying semver one like ~> v1.10. In this case this will return the latest patch release of v1.10. For the pro version, add -pro to the string