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

     1  package reportsizes
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/caarlos0/log"
     7  	"github.com/docker/go-units"
     8  	"github.com/goreleaser/goreleaser/internal/artifact"
     9  	"github.com/goreleaser/goreleaser/pkg/context"
    10  )
    11  
    12  type Pipe struct{}
    13  
    14  func (Pipe) Skip(ctx *context.Context) bool { return !ctx.Config.ReportSizes }
    15  func (Pipe) String() string                 { return "size reports" }
    16  
    17  func (Pipe) Run(ctx *context.Context) error {
    18  	return ctx.Artifacts.Filter(artifact.Or(
    19  		artifact.ByType(artifact.Binary),
    20  		artifact.ByType(artifact.UniversalBinary),
    21  		artifact.ByType(artifact.UploadableArchive),
    22  		artifact.ByType(artifact.PublishableSnapcraft),
    23  		artifact.ByType(artifact.LinuxPackage),
    24  		artifact.ByType(artifact.CArchive),
    25  		artifact.ByType(artifact.CShared),
    26  		artifact.ByType(artifact.Header),
    27  	)).Visit(func(a *artifact.Artifact) error {
    28  		stat, err := os.Stat(a.Path)
    29  		if err != nil {
    30  			return err
    31  		}
    32  		a.Extra[artifact.ExtraSize] = stat.Size()
    33  		log.WithField("path", a.Path).
    34  			Info(units.BytesSize(float64(stat.Size())))
    35  		return nil
    36  	})
    37  }