github.com/joselitofilho/goreleaser@v0.155.1-0.20210123221854-e4891856c593/internal/exec/exec_test.go (about) 1 package exec 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "path/filepath" 7 "testing" 8 9 "github.com/goreleaser/goreleaser/internal/artifact" 10 "github.com/goreleaser/goreleaser/pkg/config" 11 "github.com/goreleaser/goreleaser/pkg/context" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestExecute(t *testing.T) { 16 ctx := context.New(config.Project{ 17 ProjectName: "blah", 18 Archives: []config.Archive{ 19 { 20 Replacements: map[string]string{ 21 "linux": "Linux", 22 }, 23 }, 24 }, 25 }) 26 ctx.Env["TEST_A_SECRET"] = "x" 27 ctx.Env["TEST_A_USERNAME"] = "u2" 28 ctx.Version = "2.1.0" 29 30 // Preload artifacts 31 ctx.Artifacts = artifact.New() 32 var folder = t.TempDir() 33 for _, a := range []struct { 34 id string 35 ext string 36 typ artifact.Type 37 }{ 38 {"docker", "---", artifact.DockerImage}, 39 {"debpkg", "deb", artifact.LinuxPackage}, 40 {"binary", "bin", artifact.Binary}, 41 {"archive", "tar", artifact.UploadableArchive}, 42 {"ubinary", "ubi", artifact.UploadableBinary}, 43 {"checksum", "sum", artifact.Checksum}, 44 {"signature", "sig", artifact.Signature}, 45 } { 46 var file = filepath.Join(folder, "a."+a.ext) 47 require.NoError(t, ioutil.WriteFile(file, []byte("lorem ipsum"), 0644)) 48 ctx.Artifacts.Add(&artifact.Artifact{ 49 Name: "a." + a.ext, 50 Goos: "linux", 51 Goarch: "amd64", 52 Path: file, 53 Type: a.typ, 54 Extra: map[string]interface{}{ 55 "ID": a.id, 56 }, 57 }) 58 } 59 60 testCases := []struct { 61 name string 62 publishers []config.Publisher 63 expectErr error 64 }{ 65 { 66 "filter by IDs", 67 []config.Publisher{ 68 { 69 Name: "test", 70 IDs: []string{"archive"}, 71 Cmd: MockCmd + " {{ .ArtifactName }}", 72 Env: []string{ 73 MarshalMockEnv(&MockData{ 74 AnyOf: []MockCall{ 75 {ExpectedArgs: []string{"a.tar"}, ExitCode: 0}, 76 }, 77 }), 78 }, 79 }, 80 }, 81 nil, 82 }, 83 { 84 "no filter", 85 []config.Publisher{ 86 { 87 Name: "test", 88 Cmd: MockCmd + " {{ .ArtifactName }}", 89 Env: []string{ 90 MarshalMockEnv(&MockData{ 91 AnyOf: []MockCall{ 92 {ExpectedArgs: []string{"a.deb"}, ExitCode: 0}, 93 {ExpectedArgs: []string{"a.ubi"}, ExitCode: 0}, 94 {ExpectedArgs: []string{"a.tar"}, ExitCode: 0}, 95 }, 96 }), 97 }, 98 }, 99 }, 100 nil, 101 }, 102 { 103 "include checksum", 104 []config.Publisher{ 105 { 106 Name: "test", 107 Checksum: true, 108 Cmd: MockCmd + " {{ .ArtifactName }}", 109 Env: []string{ 110 MarshalMockEnv(&MockData{ 111 AnyOf: []MockCall{ 112 {ExpectedArgs: []string{"a.deb"}, ExitCode: 0}, 113 {ExpectedArgs: []string{"a.ubi"}, ExitCode: 0}, 114 {ExpectedArgs: []string{"a.tar"}, ExitCode: 0}, 115 {ExpectedArgs: []string{"a.sum"}, ExitCode: 0}, 116 }, 117 }), 118 }, 119 }, 120 }, 121 nil, 122 }, 123 { 124 "include signatures", 125 []config.Publisher{ 126 { 127 Name: "test", 128 Signature: true, 129 Cmd: MockCmd + " {{ .ArtifactName }}", 130 Env: []string{ 131 MarshalMockEnv(&MockData{ 132 AnyOf: []MockCall{ 133 {ExpectedArgs: []string{"a.deb"}, ExitCode: 0}, 134 {ExpectedArgs: []string{"a.ubi"}, ExitCode: 0}, 135 {ExpectedArgs: []string{"a.tar"}, ExitCode: 0}, 136 {ExpectedArgs: []string{"a.sig"}, ExitCode: 0}, 137 }, 138 }), 139 }, 140 }, 141 }, 142 nil, 143 }, 144 { 145 "try dir templating", 146 []config.Publisher{ 147 { 148 Name: "test", 149 Signature: true, 150 IDs: []string{"debpkg"}, 151 Dir: "{{ dir .ArtifactPath }}", 152 Cmd: MockCmd + " {{ .ArtifactName }}", 153 Env: []string{ 154 MarshalMockEnv(&MockData{ 155 AnyOf: []MockCall{ 156 {ExpectedArgs: []string{"a.deb"}, ExitCode: 0}, 157 }, 158 }), 159 }, 160 }, 161 }, 162 nil, 163 }, 164 { 165 "check env templating", 166 []config.Publisher{ 167 { 168 Name: "test", 169 IDs: []string{"debpkg"}, 170 Cmd: MockCmd, 171 Env: []string{ 172 "PROJECT={{.ProjectName}}", 173 "ARTIFACT={{.ArtifactName}}", 174 "SECRET={{.Env.TEST_A_SECRET}}", 175 MarshalMockEnv(&MockData{ 176 AnyOf: []MockCall{ 177 { 178 ExpectedEnv: []string{ 179 "PROJECT=blah", 180 "ARTIFACT=a.deb", 181 "SECRET=x", 182 }, 183 ExitCode: 0, 184 }, 185 }, 186 }), 187 }, 188 }, 189 }, 190 nil, 191 }, 192 { 193 "command error", 194 []config.Publisher{ 195 { 196 Name: "test", 197 IDs: []string{"debpkg"}, 198 Cmd: MockCmd + " {{.ArtifactName}}", 199 Env: []string{ 200 MarshalMockEnv(&MockData{ 201 AnyOf: []MockCall{ 202 { 203 ExpectedArgs: []string{"a.deb"}, 204 Stderr: "test error", 205 ExitCode: 1, 206 }, 207 }, 208 }), 209 }, 210 }, 211 }, 212 // stderr is sent to output via logger 213 fmt.Errorf(`publishing: %s failed: exit status 1`, MockCmd), 214 }, 215 } 216 217 for i, tc := range testCases { 218 t.Run(fmt.Sprintf("%d-%s", i, tc.name), func(t *testing.T) { 219 err := Execute(ctx, tc.publishers) 220 if tc.expectErr == nil { 221 require.NoError(t, err) 222 return 223 } 224 require.Error(t, err) 225 require.Equal(t, tc.expectErr.Error(), err.Error()) 226 }) 227 } 228 }