2021-10-30 09:50:23 -03:00
# GitHub Actions
2019-01-24 16:10:14 -02:00
2020-05-07 14:13:46 +02:00
GoReleaser can also be used within our official [GoReleaser Action][goreleaser-action]
through [GitHub Actions][actions].
2019-01-24 16:10:14 -02:00
2020-05-07 14:13:46 +02:00
You can create a workflow for pushing your releases by putting YAML configuration to
`.github/workflows/release.yml` .
2019-08-30 14:18:25 +01:00
2020-05-10 17:40:51 +02:00
## Usage
### Workflow
2019-09-29 16:32:25 +02:00
Below is a simple snippet to use this action in your workflow:
2019-12-24 14:52:45 +01:00
2019-08-30 14:18:25 +01:00
```yaml
2019-09-29 16:32:25 +02:00
name: goreleaser
2019-08-30 14:18:25 +01:00
on:
push:
2022-04-11 09:35:03 -03:00
# run only against tags
tags:
- '*'
2019-09-29 16:32:25 +02:00
2021-04-21 20:45:14 +01:00
permissions:
contents: write
2022-04-11 09:35:03 -03:00
# packages: write
# issues: write
2021-04-21 20:45:14 +01:00
2019-08-30 14:18:25 +01:00
jobs:
2019-09-29 16:32:25 +02:00
goreleaser:
2019-08-30 14:18:25 +01:00
runs-on: ubuntu-latest
steps:
2019-09-29 16:32:25 +02:00
-
name: Checkout
2020-01-14 10:11:21 -03:00
uses: actions/checkout@v2
2020-06-16 09:37:11 -03:00
with:
fetch-depth: 0
2022-02-25 22:41:00 -03:00
-
name: Fetch all tags
run: git fetch --force --tags
2019-09-29 16:32:25 +02:00
-
name: Set up Go
2020-05-07 14:13:46 +02:00
uses: actions/setup-go@v2
2019-12-24 14:52:45 +01:00
with:
2022-03-16 21:51:48 -03:00
go-version: 1.18
2019-09-29 16:32:25 +02:00
-
name: Run GoReleaser
2020-05-10 17:40:51 +02:00
uses: goreleaser/goreleaser-action@v2
2019-09-29 16:32:25 +02:00
with:
2021-05-26 19:08:46 -03:00
# either 'goreleaser' (default) or 'goreleaser-pro'
distribution: goreleaser
2019-09-29 16:32:25 +02:00
version: latest
2019-12-24 14:52:45 +01:00
args: release --rm-dist
2019-10-21 19:33:19 +08:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2021-05-26 19:08:46 -03:00
# Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution
# GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
2019-01-24 16:10:14 -02:00
```
2022-02-25 22:41:00 -03:00
!!! warning "Some things to look closely..."
2022-06-14 15:26:20 -03:00
#### The action does not install dependencies
GoReleaser Action will not install any other software needed to release.
It's the user's responsibility to install and configure Go, Docker, Syft,
Cosign and any other tools the release might need.
2022-02-25 22:41:00 -03:00
#### Fetch depthness
Notice the `fetch-depth: 0` option on the `Checkout` workflow step.
It is required for GoReleaser to work properly.
2021-03-24 23:26:14 -03:00
Without that, GoReleaser might fail or behave incorrectly.
2020-01-14 10:11:21 -03:00
2022-02-25 22:41:00 -03:00
#### Tag fetching
Notice the `git fetch --force -tags` . This is needed if you use fields like
`TagBody` , `TagSubject` or `TagContents` in your templates.
For more information, take a look at
[actions/checkout#290 ](https://github.com/actions/checkout/issues/290 ).
2020-05-10 19:47:55 -03:00
!!! tip
For detailed instructions please follow GitHub Actions [workflow syntax][syntax].
2019-09-29 16:32:25 +02:00
2020-05-10 17:40:51 +02:00
### Signing
If [signing is enabled][signing] in your GoReleaser configuration, you can use the [Import GPG][import-gpg]
GitHub Action along with this one:
```yaml
-
name: Import GPG key
2020-05-10 18:16:17 +02:00
id: import_gpg
2021-09-06 22:46:23 +02:00
uses: crazy-max/ghaction-import-gpg@v4
2020-09-07 15:22:45 +02:00
with:
2021-09-06 22:46:23 +02:00
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
2020-09-07 15:22:45 +02:00
passphrase: ${{ secrets.PASSPHRASE }}
2020-05-10 17:40:51 +02:00
-
name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2020-05-10 18:16:17 +02:00
GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }}
2020-05-10 17:40:51 +02:00
```
2020-05-10 18:16:17 +02:00
And reference the fingerprint in your signing configuration using the `GPG_FINGERPRINT` environment variable:
2020-05-10 17:40:51 +02:00
```yaml
signs:
- artifacts: checksum
2020-05-10 18:16:17 +02:00
args: ["--batch", "-u", "{{ .Env.GPG_FINGERPRINT }}", "--output", "${signature}", "--detach-sign", "${artifact}"]
2020-05-10 17:40:51 +02:00
```
2019-09-29 16:32:25 +02:00
## Customizing
2020-06-16 09:37:11 -03:00
### Inputs
2019-01-25 21:47:17 -02:00
2019-09-29 16:32:25 +02:00
Following inputs can be used as `step.with` keys
2019-03-14 11:06:26 -03:00
2021-05-26 19:08:46 -03:00
| Name | Type | Default | Description |
|------------------|---------|--------------|------------------------------------------------------------------|
| `distribution` | String | `goreleaser` | GoReleaser distribution, either `goreleaser` or `goreleaser-pro` |
2022-02-25 22:41:00 -03:00
| `version` [^1] | String | `latest` | GoReleaser version |
2021-05-26 19:08:46 -03:00
| `args` | String | | Arguments to pass to GoReleaser |
| `workdir` | String | `.` | Working directory (below repository root) |
| `install-only` | Bool | `false` | Just install GoReleaser |
2019-01-25 21:47:17 -02:00
2022-02-25 22:41:00 -03:00
[^1]: Can be a fixed version like `v0.117.0` or a max satisfying SemVer one like `~> 0.132` . In this case this will return `v0.132.1` .
2020-06-16 09:52:41 -03:00
2022-04-11 09:35:03 -03:00
### Outputs
Following outputs are available
| Name | Type | Description |
|-------------------|---------|---------------------------------------|
| `artifacts` | JSON | Build result artifacts |
| `metadata` | JSON | Build result metadata |
2020-06-16 09:37:11 -03:00
### Environment Variables
2020-05-07 14:13:46 +02:00
Following environment variables can be used as `step.env` keys
2021-05-26 19:08:46 -03:00
| Name | Description |
|------------------|---------------------------------------|
| `GITHUB_TOKEN` | [GITHUB_TOKEN ](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token ) as provided by `secrets` |
| `GORELEASER_KEY` | Your [GoReleaser Pro ](https://goreleaser.com/pro ) License Key, in case you are using the `goreleaser-pro` distribution |
2020-05-07 14:13:46 +02:00
2021-04-21 20:45:14 +01:00
## Token Permissions
The following [permissions ](https://docs.github.com/en/actions/reference/authentication-in-a-workflow#permissions-for-the-github_token ) are required by GoReleaser:
- `content: write` if you wish to
- [upload archives as GitHub Releases ](/customization/release/ ), or
- publish to [Homebrew ](/customization/homebrew/ ), or [Scoop ](/customization/scoop/ ) (assuming it's part of the same repository)
- or just `content: read` if you don't need any of the above
- `packages: write` if you [push Docker images ](/customization/docker/ ) to GitHub
- `issues: write` if you use [milestone closing capability ](/customization/milestone/ )
2020-05-07 14:13:46 +02:00
`GITHUB_TOKEN` permissions [are limited to the repository][about-github-token] that contains your workflow.
2022-06-10 20:04:16 -06:00
If you need to push the homebrew tap to another repository, you must create a custom
2020-05-07 14:13:46 +02:00
[Personal Access Token][pat] with `repo` permissions and [add it as a secret in the repository][secrets]. If you
create a secret named `GH_PAT` , the step will look like this:
```yaml
-
name: Run GoReleaser
2020-05-10 17:40:51 +02:00
uses: goreleaser/goreleaser-action@v2
2020-05-07 14:13:46 +02:00
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
```
2021-03-22 08:52:26 -03:00
You can also read the [GitHub documentation ](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token ) about it.
2022-06-10 20:04:16 -06:00
## What does it look like?
2021-01-21 00:54:12 -03:00
You can check [this example repository ](https://github.com/goreleaser/example ) for a real world example.
< a href = "https://github.com/goreleaser/example/releases" >
< figure >
< img src = "https://img.carlosbecker.dev/goreleaser-github.png" / >
< figcaption > Example release on GitHub.< / figcaption >
< / figure >
< / a >
2019-09-29 16:32:25 +02:00
[goreleaser-action]: https://github.com/goreleaser/goreleaser-action
2019-01-24 16:10:14 -02:00
[actions]: https://github.com/features/actions
2019-08-30 14:18:25 +01:00
[syntax]: https://help.github.com/en/articles/workflow-syntax-for-github-actions#About -yaml-syntax-for-workflows
2020-05-27 09:58:38 +02:00
[signing]: https://goreleaser.com/customization/sign/
2020-05-10 17:40:51 +02:00
[import-gpg]: https://github.com/crazy-max/ghaction-import-gpg
2020-05-07 14:13:46 +02:00
[github-token]: https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token
[about-github-token]: https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token#about -the-github_token-secret
[pat]: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
[secrets]: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets