1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-05-31 23:19:45 +02:00

feat: templates in upx.enabled (#4269)

refs https://github.com/orgs/goreleaser/discussions/4268
This commit is contained in:
Carlos Alexandro Becker 2023-09-01 15:10:29 -03:00 committed by GitHub
parent 983cc3755d
commit 62cc45aa50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 29 deletions

View File

@ -11,6 +11,7 @@ import (
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/pipe"
"github.com/goreleaser/goreleaser/internal/semerrgroup"
"github.com/goreleaser/goreleaser/internal/tmpl"
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/goreleaser/goreleaser/pkg/context"
)
@ -32,7 +33,11 @@ func (Pipe) Run(ctx *context.Context) error {
g := semerrgroup.NewSkipAware(semerrgroup.New(ctx.Parallelism))
for _, upx := range ctx.Config.UPXs {
upx := upx
if !upx.Enabled {
enabled, err := tmpl.New(ctx).Bool(upx.Enabled)
if err != nil {
return err
}
if !enabled {
return pipe.Skip("upx is not enabled")
}
if _, err := exec.LookPath(upx.Binary); err != nil {

View File

@ -50,32 +50,32 @@ func TestRun(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
UPXs: []config.UPX{
{
Enabled: true,
Enabled: "true",
IDs: []string{"1"},
},
{
Enabled: true,
Enabled: "true",
IDs: []string{"2"},
Compress: "best",
},
{
Enabled: true,
Enabled: "true",
IDs: []string{"3"},
Compress: "9",
},
{
Enabled: true,
Enabled: "true",
IDs: []string{"4"},
Compress: "8",
LZMA: true,
},
{
Enabled: true,
Enabled: `{{ eq .Env.UPX "1" }}`,
IDs: []string{"5"},
Brute: true,
},
},
})
}, testctx.WithEnv(map[string]string{"UPX": "1"}))
tmp := t.TempDir()
main := filepath.Join(tmp, "main.go")
@ -119,20 +119,42 @@ func TestRun(t *testing.T) {
require.NoError(t, Pipe{}.Run(ctx))
}
func TestDisabled(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
UPXs: []config.UPX{
{},
},
func TestEnabled(t *testing.T) {
t.Run("no config", func(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
UPXs: []config.UPX{
{},
},
})
testlib.AssertSkipped(t, Pipe{}.Run(ctx))
})
t.Run("tmpl", func(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
UPXs: []config.UPX{
{
Enabled: `{{ printf "false" }}`,
},
},
})
testlib.AssertSkipped(t, Pipe{}.Run(ctx))
})
t.Run("invalid template", func(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
UPXs: []config.UPX{
{
Enabled: `{{ .Foo }}`,
},
},
})
testlib.RequireTemplateError(t, Pipe{}.Run(ctx))
})
testlib.AssertSkipped(t, Pipe{}.Run(ctx))
}
func TestUpxNotInstalled(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
UPXs: []config.UPX{
{
Enabled: true,
Enabled: "true",
Binary: "fakeupx",
},
},

View File

@ -682,7 +682,7 @@ type UniversalBinary struct {
// UPX allows to compress binaries with `upx`.
type UPX struct {
Enabled bool `yaml:"enabled,omitempty" json:"enabled,omitempty"`
Enabled string `yaml:"enabled,omitempty" json:"enabled,omitempty" jsonschema:"oneof_type=string;boolean"`
IDs []string `yaml:"ids,omitempty" json:"ids,omitempty"`
Goos []string `yaml:"goos,omitempty" json:"goos,omitempty"`
Goarch []string `yaml:"goarch,omitempty" json:"goarch,omitempty"`

View File

@ -12,44 +12,43 @@ 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
!!! warning "Compatibility"
`upx` does not support all platforms! Make sure to check
[their issues][upx-issues] and to test your packed binaries first.
[their issues][upx-issues] and to test your packed binaries.
Namely, _macOS Ventura_ is not supported at the moment.
Future GoReleaser releases will add more filters so you can cherry-pick
which platforms you want to pack or not.
```yaml
# .goreleaser.yaml
upx:
-
# Whether to enable it or not.
- # Whether to enable it or not.
#
# Templates: allowed (since v1.21).
enabled: true
# Filter by build ID.
ids: [ build1, build2 ]
ids: [build1, build2]
# Filter by GOOS.
#
# Since: v1.19
goos: [ linux , darwin ]
goos: [linux, darwin]
# Filter by GOARCH.
#
# Since: v1.19
goarch: [ arm, amd64 ]
goarch: [arm, amd64]
# Filter by GOARM.
#
# Since: v1.19
goarm: [ 8 ]
goarm: [8]
# Filter by GOAMD64.
#
# Since: v1.19
goamd64: [ v1 ]
goamd64: [v1]
# Compress argument.
# Valid options are from '1' (faster) to '9' (better), and 'best'.
@ -62,12 +61,17 @@ upx:
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.
!!! info
If `upx` is not in `$PATH`, GoReleaser will automatically avoid running it.
!!! tip
Learn more about the [name template engine](templates.md).
[upx]: https://upx.github.io/
[upx-issues]: https://github.com/upx/upx/issues