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

     1  // Package dist provides checks to make sure the dist directory is always
     2  // empty.
     3  package dist
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  
     9  	"github.com/caarlos0/log"
    10  	"github.com/goreleaser/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 directory", ctx.Config.Dist)
    25  		return mkdir(ctx)
    26  	}
    27  	if ctx.Clean {
    28  		log.Infof("cleaning %s", ctx.Config.Dist)
    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 --clean 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  }