github.com/goreleaser/goreleaser@v1.25.1/pkg/archive/archive.go (about) 1 // Package archive provides tar.gz and zip archiving 2 package archive 3 4 import ( 5 "fmt" 6 "io" 7 "os" 8 9 "github.com/goreleaser/goreleaser/pkg/archive/gzip" 10 "github.com/goreleaser/goreleaser/pkg/archive/tar" 11 "github.com/goreleaser/goreleaser/pkg/archive/targz" 12 "github.com/goreleaser/goreleaser/pkg/archive/tarxz" 13 "github.com/goreleaser/goreleaser/pkg/archive/zip" 14 "github.com/goreleaser/goreleaser/pkg/config" 15 ) 16 17 // Archive represents a compression archive files from disk can be written to. 18 type Archive interface { 19 Close() error 20 Add(f config.File) error 21 } 22 23 // New archive. 24 func New(w io.Writer, format string) (Archive, error) { 25 switch format { 26 case "tar.gz", "tgz": 27 return targz.New(w), nil 28 case "tar": 29 return tar.New(w), nil 30 case "gz": 31 return gzip.New(w), nil 32 case "tar.xz", "txz": 33 return tarxz.New(w), nil 34 case "zip": 35 return zip.New(w), nil 36 } 37 return nil, fmt.Errorf("invalid archive format: %s", format) 38 } 39 40 // Copying copies the source archive into a new one, which can be appended at. 41 // Source needs to be in the specified format. 42 func Copying(r *os.File, w io.Writer, format string) (Archive, error) { 43 switch format { 44 case "tar.gz", "tgz": 45 return targz.Copying(r, w) 46 case "tar": 47 return tar.Copying(r, w) 48 case "zip": 49 return zip.Copying(r, w) 50 } 51 return nil, fmt.Errorf("invalid archive format: %s", format) 52 }