diff --git a/internal/pipe/artifactory/artifactory.go b/internal/pipe/artifactory/artifactory.go index 5f1e97303..6059d5ab6 100644 --- a/internal/pipe/artifactory/artifactory.go +++ b/internal/pipe/artifactory/artifactory.go @@ -12,28 +12,6 @@ import ( "github.com/goreleaser/goreleaser/pkg/context" ) -// artifactoryResponse reflects the response after an upload request -// to Artifactory. -type artifactoryResponse struct { - Repo string `json:"repo,omitempty"` - Path string `json:"path,omitempty"` - Created string `json:"created,omitempty"` - CreatedBy string `json:"createdBy,omitempty"` - DownloadURI string `json:"downloadUri,omitempty"` - MimeType string `json:"mimeType,omitempty"` - Size string `json:"size,omitempty"` - Checksums artifactoryChecksums `json:"checksums,omitempty"` - OriginalChecksums artifactoryChecksums `json:"originalChecksums,omitempty"` - URI string `json:"uri,omitempty"` -} - -// artifactoryChecksums reflects the checksums generated by Artifactory. -type artifactoryChecksums struct { - SHA1 string `json:"sha1,omitempty"` - MD5 string `json:"md5,omitempty"` - SHA256 string `json:"sha256,omitempty"` -} - // Pipe for Artifactory. type Pipe struct{} @@ -68,14 +46,7 @@ func (Pipe) Publish(ctx *context.Context) error { } } - return http.Upload(ctx, ctx.Config.Artifactories, "artifactory", func(res *h.Response) error { - if err := checkResponse(res); err != nil { - return err - } - var r artifactoryResponse - err := json.NewDecoder(res.Body).Decode(&r) - return err - }) + return http.Upload(ctx, ctx.Config.Artifactories, "artifactory", checkResponse) } // An ErrorResponse reports one or more errors caused by an API request. @@ -103,6 +74,7 @@ type Error struct { // body, or a JSON response body that maps to ErrorResponse. Any other // response body will be silently ignored. func checkResponse(r *h.Response) error { + defer r.Body.Close() if c := r.StatusCode; 200 <= c && c <= 299 { return nil } diff --git a/internal/pipe/artifactory/artifactory_test.go b/internal/pipe/artifactory/artifactory_test.go index 551ab41b3..b8bfef36e 100644 --- a/internal/pipe/artifactory/artifactory_test.go +++ b/internal/pipe/artifactory/artifactory_test.go @@ -507,64 +507,6 @@ func TestRunPipe_UnparsableErrorResponse(t *testing.T) { assert.EqualError(t, Pipe{}.Publish(ctx), `artifactory: upload failed: invalid character '.' looking for beginning of value`) } -func TestRunPipe_UnparsableResponse(t *testing.T) { - setup() - defer teardown() - - folder, err := ioutil.TempDir("", "archivetest") - assert.NoError(t, err) - var dist = filepath.Join(folder, "dist") - assert.NoError(t, os.Mkdir(dist, 0755)) - assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) - var binPath = filepath.Join(dist, "mybin", "mybin") - d1 := []byte("hello\ngo\n") - err = ioutil.WriteFile(binPath, d1, 0666) - assert.NoError(t, err) - - // Dummy artifactory with invalid JSON - mux.HandleFunc("/example-repo-local/mybin/darwin/amd64/mybin", func(w http.ResponseWriter, r *http.Request) { - testMethod(t, r, http.MethodPut) - testHeader(t, r, "Content-Length", "9") - // Basic auth of user "deployuser" with secret "deployuser-secret" - testHeader(t, r, "Authorization", "Basic ZGVwbG95dXNlcjpkZXBsb3l1c2VyLXNlY3JldA==") - - w.WriteHeader(http.StatusCreated) - fmt.Fprint(w, `invalid-json{ - "repo" : "example-repo-local", - ... - }`) - }) - - var ctx = context.New(config.Project{ - ProjectName: "mybin", - Dist: dist, - Artifactories: []config.Upload{ - { - Name: "production", - Mode: "binary", - Target: fmt.Sprintf("%s/example-repo-local/{{ .ProjectName }}/{{ .Os }}/{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}", server.URL), - Username: "deployuser", - }, - }, - Archives: []config.Archive{ - {}, - }, - }) - ctx.Env = map[string]string{ - "ARTIFACTORY_PRODUCTION_SECRET": "deployuser-secret", - } - ctx.Artifacts.Add(&artifact.Artifact{ - Name: "mybin", - Path: binPath, - Goarch: "amd64", - Goos: "darwin", - Type: artifact.UploadableBinary, - }) - - assert.NoError(t, Pipe{}.Default(ctx)) - assert.EqualError(t, Pipe{}.Publish(ctx), `artifactory: upload failed: invalid character 'i' looking for beginning of value`) -} - func TestRunPipe_FileNotFound(t *testing.T) { var ctx = context.New(config.Project{ ProjectName: "mybin",