Skip to content

Commit

Permalink
refactor: improve archive pipe (#3100)
Browse files Browse the repository at this point in the history
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
  • Loading branch information
caarlos0 committed May 12, 2022
1 parent 17e4d62 commit 5d9110a
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 26 deletions.
7 changes: 5 additions & 2 deletions internal/pipe/archive/archive.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,11 @@ func doCreate(ctx *context.Context, arch config.Archive, binaries []*artifact.Ar
if err != nil {
return err
}

a := NewEnhancedArchive(archive.New(archiveFile), wrap)
a, err := archive.New(archiveFile, format)
if err != nil {
return err
}
a = NewEnhancedArchive(a, wrap)
defer a.Close()

files, err := findFiles(template, arch.Files)
Expand Down
20 changes: 18 additions & 2 deletions internal/pipe/archive/archive_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -901,8 +901,9 @@ func TestDuplicateFilesInsideArchive(t *testing.T) {
ff, err := os.CreateTemp(folder, "")
require.NoError(t, err)
require.NoError(t, ff.Close())

a := NewEnhancedArchive(archive.New(f), "")
a, err := archive.New(f, "tar.gz")
require.NoError(t, err)
a = NewEnhancedArchive(a, "")
t.Cleanup(func() {
require.NoError(t, a.Close())
})
Expand Down Expand Up @@ -1156,3 +1157,18 @@ func TestArchive_globbing(t *testing.T) {
})
})
}

func TestInvalidFormat(t *testing.T) {
ctx := context.New(config.Project{
Dist: t.TempDir(),
Archives: []config.Archive{
{
ID: "foo",
NameTemplate: "foo",
Meta: true,
Format: "7z",
},
},
})
require.EqualError(t, Pipe{}.Run(ctx), "invalid archive format: 7z")
}
33 changes: 15 additions & 18 deletions pkg/archive/archive.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
package archive

import (
"os"
"strings"
"fmt"
"io"

"github.com/goreleaser/goreleaser/pkg/archive/gzip"
"github.com/goreleaser/goreleaser/pkg/archive/tar"
Expand All @@ -20,21 +20,18 @@ type Archive interface {
}

// New archive.
func New(file *os.File) Archive {
if strings.HasSuffix(file.Name(), ".tar.gz") {
return targz.New(file)
func New(w io.Writer, format string) (Archive, error) {
switch format {
case "tar.gz":
return targz.New(w), nil
case "tar":
return tar.New(w), nil
case "gz":
return gzip.New(w), nil
case "tar.xz":
return tarxz.New(w), nil
case "zip":
return zip.New(w), nil
}
if strings.HasSuffix(file.Name(), ".gz") {
return gzip.New(file)
}
if strings.HasSuffix(file.Name(), ".tar.xz") {
return tarxz.New(file)
}
if strings.HasSuffix(file.Name(), ".zip") {
return zip.New(file)
}
if strings.HasSuffix(file.Name(), ".tar") {
return tar.New(file)
}
return targz.New(file)
return nil, fmt.Errorf("invalid archive format: %s", format)
}
12 changes: 8 additions & 4 deletions pkg/archive/archive_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package archive

import (
"io"
"os"
"testing"

Expand All @@ -15,15 +16,13 @@ func TestArchive(t *testing.T) {
require.NoError(t, empty.Close())
require.NoError(t, os.Mkdir(folder+"/folder-inside", 0o755))

for _, format := range []string{"tar.gz", "zip", "gz", "tar.xz", "tar", "willbeatargzanyway"} {
for _, format := range []string{"tar.gz", "zip", "gz", "tar.xz", "tar"} {
format := format
t.Run(format, func(t *testing.T) {
file, err := os.Create(folder + "/folder." + format)
archive, err := New(io.Discard, format)
require.NoError(t, err)
archive := New(file)
t.Cleanup(func() {
require.NoError(t, archive.Close())
require.NoError(t, file.Close())
})
require.NoError(t, archive.Add(config.File{
Source: empty.Name(),
Expand All @@ -35,4 +34,9 @@ func TestArchive(t *testing.T) {
}))
})
}

t.Run("7z", func(t *testing.T) {
_, err := New(io.Discard, "7z")
require.EqualError(t, err, "invalid archive format: 7z")
})
}

0 comments on commit 5d9110a

Please sign in to comment.