# Azure Pipelines GoReleaser can also be used within our official [GoReleaser Extensions for Azure DevOps][goreleaser-extension] through [Visual Studio marketplace][marketplace]. ### Task definition ```yaml - 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` | | `version`[^version] | 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 | [^version]: 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 ### Task environment variables ```yaml --- 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](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token) for e.g. `brew` | | `GORELEASER_KEY` | Your [GoReleaser Pro](https://goreleaser.com/pro) License Key, in case you are using the `goreleaser-pro` distribution | ### Example pipeline Generally there are two ways to define an [Azure Pipeline](https://azure.microsoft.com/en-us/services/devops/pipelines/): Classic pipelines defined in the UI or YAML pipelines. Here is how to do it with YAML: ```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. [goreleaser-extension]: https://marketplace.visualstudio.com/items?itemName=GoReleaser.goreleaser [marketplace]: https://marketplace.visualstudio.com/azuredevops