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 }