diff --git a/internal/pipe/build/build_test.go b/internal/pipe/build/build_test.go index 8c24f5ef3..24e776a27 100644 --- a/internal/pipe/build/build_test.go +++ b/internal/pipe/build/build_test.go @@ -9,6 +9,7 @@ import ( "github.com/goreleaser/goreleaser/internal/artifact" "github.com/goreleaser/goreleaser/internal/semerrgroup" + "github.com/goreleaser/goreleaser/internal/skips" "github.com/goreleaser/goreleaser/internal/testctx" "github.com/goreleaser/goreleaser/internal/testlib" "github.com/goreleaser/goreleaser/internal/tmpl" @@ -223,6 +224,17 @@ func TestRunPipeFailingHooks(t *testing.T) { require.ErrorIs(t, err, exec.ErrNotFound) require.Contains(t, err.Error(), "post hook failed") }) + + t.Run("post-hook-skip", func(t *testing.T) { + ctx := testctx.NewWithCfg( + cfg, + testctx.WithCurrentTag("2.4.5"), + testctx.Skip(skips.PostBuildHooks), + ) + ctx.Config.Builds[0].Hooks.Pre = []config.Hook{{Cmd: "echo pre"}} + ctx.Config.Builds[0].Hooks.Post = []config.Hook{{Cmd: "exit 1"}} + require.NoError(t, Pipe{}.Run(ctx)) + }) } func TestDefaultNoBuilds(t *testing.T) { diff --git a/internal/pipe/universalbinary/universalbinary.go b/internal/pipe/universalbinary/universalbinary.go index 974818b33..54de66ae0 100644 --- a/internal/pipe/universalbinary/universalbinary.go +++ b/internal/pipe/universalbinary/universalbinary.go @@ -16,6 +16,7 @@ import ( "github.com/goreleaser/goreleaser/internal/pipe" "github.com/goreleaser/goreleaser/internal/semerrgroup" "github.com/goreleaser/goreleaser/internal/shell" + "github.com/goreleaser/goreleaser/internal/skips" "github.com/goreleaser/goreleaser/internal/tmpl" "github.com/goreleaser/goreleaser/pkg/build" "github.com/goreleaser/goreleaser/pkg/config" @@ -64,8 +65,10 @@ func (Pipe) Run(ctx *context.Context) error { if err := makeUniversalBinary(ctx, &opts, unibin); err != nil { return err } - if err := runHook(ctx, &opts, unibin.Hooks.Post); err != nil { - return fmt.Errorf("post hook failed: %w", err) + if !skips.Any(ctx, skips.PostBuildHooks) { + if err := runHook(ctx, &opts, unibin.Hooks.Post); err != nil { + return fmt.Errorf("post hook failed: %w", err) + } } if !unibin.Replace { return nil diff --git a/internal/pipe/universalbinary/universalbinary_test.go b/internal/pipe/universalbinary/universalbinary_test.go index 91b93dc12..651712a1b 100644 --- a/internal/pipe/universalbinary/universalbinary_test.go +++ b/internal/pipe/universalbinary/universalbinary_test.go @@ -12,6 +12,7 @@ import ( "time" "github.com/goreleaser/goreleaser/internal/artifact" + "github.com/goreleaser/goreleaser/internal/skips" "github.com/goreleaser/goreleaser/internal/testctx" "github.com/goreleaser/goreleaser/internal/testlib" "github.com/goreleaser/goreleaser/pkg/config" @@ -329,6 +330,13 @@ func TestRun(t *testing.T) { require.Contains(t, err.Error(), "post hook failed") }) + t.Run("skipping post-hook", func(t *testing.T) { + ctx := ctx5 + skips.Set(ctx, skips.PostBuildHooks) + ctx.Config.UniversalBinaries[0].Hooks.Post = []config.Hook{{Cmd: "exit 1"}} + require.NoError(t, Pipe{}.Run(ctx)) + }) + t.Run("hook with env tmpl", func(t *testing.T) { ctx := ctx5 ctx.Config.UniversalBinaries[0].Hooks.Pre = []config.Hook{{