github.com/triarius/goreleaser@v1.12.5/internal/pipe/dist/dist.go (about)

     1  // Package dist provides checks to make sure the dist folder is always
     2  // empty.
     3  package dist
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  
     9  	"github.com/caarlos0/log"
    10  	"github.com/triarius/goreleaser/pkg/context"
    11  )
    12  
    13  // Pipe for dist.
    14  type Pipe struct{}
    15  
    16  func (Pipe) String() string {
    17  	return "checking distribution directory"
    18  }
    19  
    20  // Run the pipe.
    21  func (Pipe) Run(ctx *context.Context) (err error) {
    22  	_, err = os.Stat(ctx.Config.Dist)
    23  	if os.IsNotExist(err) {
    24  		log.Debugf("%s doesn't exist, creating empty folder", ctx.Config.Dist)
    25  		return mkdir(ctx)
    26  	}
    27  	if ctx.RmDist {
    28  		log.Info("--rm-dist is set, cleaning it up")
    29  		err = os.RemoveAll(ctx.Config.Dist)
    30  		if err == nil {
    31  			err = mkdir(ctx)
    32  		}
    33  		return err
    34  	}
    35  	files, err := os.ReadDir(ctx.Config.Dist)
    36  	if err != nil {
    37  		return
    38  	}
    39  	if len(files) != 0 {
    40  		log.Debugf("there are %d files on %s", len(files), ctx.Config.Dist)
    41  		return fmt.Errorf(
    42  			"%s is not empty, remove it before running goreleaser or use the --rm-dist flag",
    43  			ctx.Config.Dist,
    44  		)
    45  	}
    46  	log.Debugf("%s is empty", ctx.Config.Dist)
    47  	return mkdir(ctx)
    48  }
    49  
    50  func mkdir(ctx *context.Context) error {
    51  	// #nosec
    52  	return os.MkdirAll(ctx.Config.Dist, 0o755)
    53  }