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..."
#### 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.
If you need to push the homebrew tap to another repository, you must therefore create a custom
[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.
2021-01-21 00:54:12 -03:00
## How does it look like?
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