1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-02-03 13:11:48 +02:00
Carlos Alexandro Becker d510abcd5e
docs: improve docs
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2023-09-04 14:12:01 +00:00

79 lines
1.8 KiB
Markdown

# UPX
> Since: v1.18
Having small binary sizes are important, and Go is known for generating rather
big binaries.
GoReleaser has had `-s -w` as default `ldflags` since the beginning, which help
shaving off some bytes, but if you want to shave it even more, [`upx`][upx] is
the _de facto_ tool for the job.
GoReleaser has been able to integrate with it via custom [build hooks][bhooks],
and now UPX has its own configuration section:
!!! warning "Compatibility"
`upx` does not support all platforms! Make sure to check
[their issues][upx-issues] and to test your packed binaries.
Namely, _macOS Ventura_ is not supported at the moment.
```yaml
# .goreleaser.yaml
upx:
- # Whether to enable it or not.
#
# Templates: allowed (since v1.21)
enabled: true
# Filter by build ID.
ids: [build1, build2]
# Filter by GOOS.
#
# Since: v1.19
goos: [linux, darwin]
# Filter by GOARCH.
#
# Since: v1.19
goarch: [arm, amd64]
# Filter by GOARM.
#
# Since: v1.19
goarm: [8]
# Filter by GOAMD64.
#
# Since: v1.19
goamd64: [v1]
# Compress argument.
# Valid options are from '1' (faster) to '9' (better), and 'best'.
compress: best
# Whether to try LZMA (slower).
lzma: true
# Whether to try all methods and filters (slow).
brute: true
```
!!! info
If `upx` is not in `$PATH`, GoReleaser will automatically avoid running it.
Notice you can define multiple `upx` definitions, filtering by various fields.
You can use that to have different compression options depending on the target
OS, for instance - or even to run it only on a few selected platforms.
!!! tip
Learn more about the [name template engine](templates.md).
[upx]: https://upx.github.io/
[upx-issues]: https://github.com/upx/upx/issues
[bhooks]: /customization/builds/#build-hooks