diff --git a/go.mod b/go.mod index 0b4ff382c54..4a4e29b1891 100644 --- a/go.mod +++ b/go.mod @@ -12,12 +12,12 @@ require ( github.com/fatih/color v1.10.0 github.com/golangci/golangci-lint v1.32.2 github.com/google/go-github/v28 v28.1.1 + github.com/goreleaser/fileglob v0.3.0 github.com/goreleaser/nfpm v1.9.0 github.com/hashicorp/go-version v1.2.1 // indirect github.com/imdario/mergo v0.3.11 github.com/jarcoal/httpmock v1.0.6 github.com/mattn/go-shellwords v1.0.10 - github.com/mattn/go-zglob v0.0.4-0.20201013150311-602f75124917 github.com/mitchellh/go-homedir v1.1.0 github.com/spf13/cobra v1.1.1 github.com/stretchr/testify v1.6.1 diff --git a/go.sum b/go.sum index eb9bf47612d..0f772ae62a4 100644 --- a/go.sum +++ b/go.sum @@ -353,6 +353,8 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGa github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/goreleaser/chglog v0.1.1 h1:UaY3enMEVeavOaZyCraLn+2iM7/2T0yji8Mh7ZFsDp4= github.com/goreleaser/chglog v0.1.1/go.mod h1:xSDa/73C0TxBcLvoT2JHh47QyXpCx5rrNVzJKyeFGPw= +github.com/goreleaser/fileglob v0.3.0 h1:ef5bTud50fxihAjR2IWP0lGpyaPOgCD5qWfo14azJyI= +github.com/goreleaser/fileglob v0.3.0/go.mod h1:kNcPrPzjCp+Ox3jmXLU5QEsjhqrtLBm6OnXAif8KRl8= github.com/goreleaser/nfpm v1.9.0 h1:gkSdiy55cACuZsaLOSt9F1hKFiKmNGHNMjw9W/ujv9Y= github.com/goreleaser/nfpm v1.9.0/go.mod h1:N2SmYHJ8yQum2q5oXh2D4qvip9+X4PDMoyHmuxs/JXo= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -623,6 +625,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.3.2 h1:GDarE4TJQI52kYSbSAmLiId1Elfj+xgSDqrUZxFhxlU= github.com/spf13/afero v1.3.2/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.4.1 h1:asw9sl74539yqavKaglDM5hFpdJVK0Y5Dr/JOgQ89nQ= +github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= diff --git a/internal/extrafiles/extra_files.go b/internal/extrafiles/extra_files.go index 5c5415e9b2b..bb8b1ea7db6 100644 --- a/internal/extrafiles/extra_files.go +++ b/internal/extrafiles/extra_files.go @@ -6,8 +6,8 @@ import ( "path/filepath" "github.com/apex/log" + "github.com/goreleaser/fileglob" "github.com/goreleaser/goreleaser/pkg/config" - "github.com/mattn/go-zglob" ) // Find resolves extra files globs et al into a map of names/paths or an error. @@ -17,7 +17,7 @@ func Find(files []config.ExtraFile) (map[string]string, error) { if extra.Glob == "" { continue } - files, err := zglob.Glob(extra.Glob) + files, err := fileglob.Glob(extra.Glob) if err != nil { return result, fmt.Errorf("globbing failed for pattern %s: %w", extra.Glob, err) } diff --git a/internal/extrafiles/extra_files_test.go b/internal/extrafiles/extra_files_test.go index 2e81babf0d9..adfc9cb3908 100644 --- a/internal/extrafiles/extra_files_test.go +++ b/internal/extrafiles/extra_files_test.go @@ -7,18 +7,40 @@ import ( "github.com/stretchr/testify/require" ) -func TestShouldGetAllFiles(t *testing.T) { +func TestShouldGetSpecificFile(t *testing.T) { globs := []config.ExtraFile{ {Glob: "./testdata/file1.golden"}, } files, err := Find(globs) require.NoError(t, err) - require.Equal(t, 1, len(files)) + require.Len(t, files, 1) - path, ok := files["file1.golden"] - require.True(t, ok) - require.Equal(t, path, "./testdata/file1.golden") + require.Equal(t, "testdata/file1.golden", files["file1.golden"]) +} + +func TestFailToGetSpecificFile(t *testing.T) { + globs := []config.ExtraFile{ + {Glob: "./testdata/file453.golden"}, + } + + files, err := Find(globs) + require.EqualError(t, err, "globbing failed for pattern ./testdata/file453.golden: matching \"testdata/file453.golden\": file does not exist") + require.Empty(t, files) +} + +func TestShouldGetFilesWithSuperStar(t *testing.T) { + globs := []config.ExtraFile{ + {Glob: "./**/file?.golden"}, + } + + files, err := Find(globs) + require.NoError(t, err) + require.Len(t, files, 3) + + require.Equal(t, "testdata/file2.golden", files["file2.golden"]) + require.Equal(t, "testdata/file1.golden", files["file1.golden"]) + require.Equal(t, "testdata/sub/file5.golden", files["file5.golden"]) } func TestShouldGetAllFilesWithGoldenExtension(t *testing.T) { @@ -28,15 +50,10 @@ func TestShouldGetAllFilesWithGoldenExtension(t *testing.T) { files, err := Find(globs) require.NoError(t, err) - require.Equal(t, 2, len(files)) - - path, ok := files["file1.golden"] - require.True(t, ok) - require.Equal(t, path, "testdata/file1.golden") + require.Len(t, files, 2) - path, ok = files["file2.golden"] - require.True(t, ok) - require.Equal(t, path, "testdata/file2.golden") + require.Equal(t, "testdata/file1.golden", files["file1.golden"]) + require.Equal(t, "testdata/file2.golden", files["file2.golden"]) } func TestShouldGetAllFilesInsideTestdata(t *testing.T) { @@ -46,17 +63,10 @@ func TestShouldGetAllFilesInsideTestdata(t *testing.T) { files, err := Find(globs) require.NoError(t, err) - require.Equal(t, 3, len(files)) - - path, ok := files["file1.golden"] - require.True(t, ok) - require.Equal(t, path, "testdata/file1.golden") - - path, ok = files["file2.golden"] - require.True(t, ok) - require.Equal(t, path, "testdata/file2.golden") + require.Len(t, files, 4) - path, ok = files["file3.gold"] - require.True(t, ok) - require.Equal(t, path, "testdata/file3.gold") + require.Equal(t, "testdata/file1.golden", files["file1.golden"]) + require.Equal(t, "testdata/file2.golden", files["file2.golden"]) + require.Equal(t, "testdata/file3.gold", files["file3.gold"]) + require.Equal(t, "testdata/sub/file5.golden", files["file5.golden"]) } diff --git a/internal/extrafiles/testdata/sub/file5.golden b/internal/extrafiles/testdata/sub/file5.golden new file mode 100644 index 00000000000..e69de29bb2d diff --git a/internal/pipe/archive/archive.go b/internal/pipe/archive/archive.go index d74c5ad64ed..ce312c06100 100644 --- a/internal/pipe/archive/archive.go +++ b/internal/pipe/archive/archive.go @@ -13,7 +13,7 @@ import ( "github.com/apex/log" "github.com/campoy/unique" - "github.com/mattn/go-zglob" + "github.com/goreleaser/fileglob" "github.com/goreleaser/goreleaser/internal/artifact" "github.com/goreleaser/goreleaser/internal/ids" @@ -240,7 +240,7 @@ func findFiles(template *tmpl.Template, archive config.Archive) (result []string if err != nil { return result, fmt.Errorf("failed to apply template %s: %w", glob, err) } - files, err := zglob.Glob(replaced) + files, err := fileglob.Glob(replaced) if err != nil { return result, fmt.Errorf("globbing failed for pattern %s: %w", glob, err) } diff --git a/internal/pipe/archive/archive_test.go b/internal/pipe/archive/archive_test.go index 82a9e39381c..8ca69f5057d 100644 --- a/internal/pipe/archive/archive_test.go +++ b/internal/pipe/archive/archive_test.go @@ -157,8 +157,6 @@ func TestRunPipe(t *testing.T) { t, []string{ fmt.Sprintf("README.%s.md", os), - "foo/bar", - "foo/bar/foobar", "foo/bar/foobar/blah.txt", "bin/mybin", }, @@ -426,7 +424,7 @@ func TestRunPipeInvalidGlob(t *testing.T) { "ID": "default", }, }) - require.EqualError(t, Pipe{}.Run(ctx), `failed to find files to archive: globbing failed for pattern [x-]: file does not exist`) + require.EqualError(t, Pipe{}.Run(ctx), `failed to find files to archive: globbing failed for pattern [x-]: compile glob pattern: unexpected end of input`) } func TestRunPipeInvalidNameTemplate(t *testing.T) { diff --git a/internal/pipe/release/release_test.go b/internal/pipe/release/release_test.go index dcc11290059..76fbe864483 100644 --- a/internal/pipe/release/release_test.go +++ b/internal/pipe/release/release_test.go @@ -163,8 +163,6 @@ func TestRunPipeWithIDsThenFilters(t *testing.T) { require.True(t, client.UploadedFile) require.Contains(t, client.UploadedFileNames, "bin.deb") require.Contains(t, client.UploadedFileNames, "bin.tar.gz") - require.Contains(t, client.UploadedFileNames, "release1.golden") - require.Contains(t, client.UploadedFileNames, "release2.golden") require.Contains(t, client.UploadedFileNames, "f1") require.NotContains(t, client.UploadedFileNames, "filtered.deb") require.NotContains(t, client.UploadedFileNames, "filtered.tar.gz") @@ -255,7 +253,7 @@ func TestRunPipeExtraFileNotFound(t *testing.T) { var ctx = context.New(config) ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} client := &DummyClient{} - require.EqualError(t, doPublish(ctx, client), "globbing failed for pattern ./nope: file does not exist") + require.EqualError(t, doPublish(ctx, client), "globbing failed for pattern ./nope: matching \"nope\": file does not exist") require.True(t, client.CreatedRelease) require.False(t, client.UploadedFile) }