mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-01-08 03:31:59 +02:00
d524d93086
- [x] if the default is the zero-value for the field, do not specify - [ ] TODO: add a "how to read this docs" section somewhere explaining that - [x] if the change was introduced in a v1.x.0, say only v1.x - [x] drop trail ending `.` from Since, Default, etc - [x] wording: always use `Default: ` instead of `Defaults to` and others - [x] add a note to templateable fields - [x] default value of a field, if its a string, always between single quotes `'` --------- Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
2.3 KiB
2.3 KiB
Global Hooks
Some release cycles may need to run something before or after everything else.
GoReleaser allows this with the global hooks feature.
=== "OSS"
The before
section allows for global hooks that will be executed
before the release is started.
The configuration is straightforward, here is an example will all possible
options:
```yaml
# .goreleaser.yaml
before:
# Templates for the commands to be ran.
hooks:
- make clean
- go generate ./...
- go mod tidy
- touch {{ .Env.FILE_TO_TOUCH }}
```
=== "Pro"
!!! success "GoReleaser Pro"
Global after hooks, and the additional options in before hooks (dir
and env
) are GoReleaser Pro features.
The `before` section allows for global hooks that will be executed
**before** the release is started. Likewise, the `after` section allows for
global hooks that will be executed **after** the release is started.
The configuration is straightforward, here is an example will all possible
options:
```yaml
# .goreleaser.yaml
# global before hooks
before:
# Commands to be ran.
#
# Templates: allowed
hooks:
- make clean # simple string
- cmd: go generate ./... # specify cmd
- cmd: go mod tidy
# Always prints command output.
#
# Since: v1.5
output: true
dir: ./submodule # specify command working directory
- cmd: touch {{ .Env.FILE_TO_TOUCH }}
env:
- 'FILE_TO_TOUCH=something-{{ .ProjectName }}' # specify hook level environment variables
# global after hooks
after:
# Commands to be ran.
#
# Templates: allowed
hooks:
- make clean
- cmd: cat *.yaml
dir: ./submodule
- cmd: touch {{ .Env.RELEASE_DONE }}
env:
- 'RELEASE_DONE=something-{{ .ProjectName }}' # specify hook level environment variables
```
Note that if any of the hooks fails the release process is aborted.
Complex commands
If you need to do anything more complex, it is recommended to create a shell
script and call it instead. You can also go crazy with sh -c "my commands"
,
but it gets ugly really fast.
!!! tip Learn more about the name template engine.