github.com/goreleaser/goreleaser@v1.25.1/internal/middleware/skip/skip.go (about)

     1  // Package skip can skip an entire Action.
     2  package skip
     3  
     4  import (
     5  	"fmt"
     6  
     7  	"github.com/caarlos0/log"
     8  	"github.com/goreleaser/goreleaser/internal/middleware"
     9  	"github.com/goreleaser/goreleaser/pkg/context"
    10  )
    11  
    12  // Skipper defines a method to skip an entire Piper.
    13  type Skipper interface {
    14  	// Skip returns true if the Piper should be skipped.
    15  	Skip(ctx *context.Context) bool
    16  	fmt.Stringer
    17  }
    18  
    19  // Skipper defines a method to skip an entire Piper.
    20  type ErrSkipper interface {
    21  	// Skip returns true if the Piper should be skipped.
    22  	Skip(ctx *context.Context) (bool, error)
    23  	fmt.Stringer
    24  }
    25  
    26  // Maybe returns an action that skips immediately if the given p is a Skipper
    27  // and its Skip method returns true.
    28  func Maybe(skipper interface{}, next middleware.Action) middleware.Action {
    29  	if skipper, ok := skipper.(Skipper); ok {
    30  		return Maybe(wrapper{skipper}, next)
    31  	}
    32  	if skipper, ok := skipper.(ErrSkipper); ok {
    33  		return func(ctx *context.Context) error {
    34  			skip, err := skipper.Skip(ctx)
    35  			if err != nil {
    36  				return fmt.Errorf("skip %s: %w", skipper.String(), err)
    37  			}
    38  			if skip {
    39  				log.Debugf("skipped %s", skipper.String())
    40  				return nil
    41  			}
    42  			return next(ctx)
    43  		}
    44  	}
    45  	return next
    46  }
    47  
    48  var _ ErrSkipper = wrapper{}
    49  
    50  type wrapper struct {
    51  	skipper Skipper
    52  }
    53  
    54  // String implements SkipperErr
    55  func (w wrapper) String() string {
    56  	return w.skipper.String()
    57  }
    58  
    59  // Skip implements SkipperErr
    60  func (w wrapper) Skip(ctx *context.Context) (bool, error) {
    61  	return w.skipper.Skip(ctx), nil
    62  }