From 46addc1f938abefd346a7a74d815f6c4faaa6818 Mon Sep 17 00:00:00 2001 From: Zettat123 Date: Sat, 18 Mar 2023 02:39:19 +0800 Subject: [PATCH] Return `repository` in npm package metadata endpoint (#23539) Close #23444 Add `Repository` to npm package `Metadata` struct so the `repository` in `package.json` can be stored and be returned in the endpoint. Co-authored-by: KN4CK3R --- modules/packages/npm/creator.go | 1 + modules/packages/npm/creator_test.go | 7 +++++++ modules/packages/npm/metadata.go | 1 + routers/api/packages/npm/api.go | 1 + tests/integration/api_packages_npm_test.go | 8 ++++++++ 5 files changed, 18 insertions(+) diff --git a/modules/packages/npm/creator.go b/modules/packages/npm/creator.go index 548d7ed9e56..5e7e0e29833 100644 --- a/modules/packages/npm/creator.go +++ b/modules/packages/npm/creator.go @@ -223,6 +223,7 @@ func ParsePackage(r io.Reader) (*Package, error) { OptionalDependencies: meta.OptionalDependencies, Bin: meta.Bin, Readme: meta.Readme, + Repository: meta.Repository, }, } diff --git a/modules/packages/npm/creator_test.go b/modules/packages/npm/creator_test.go index 9a2b1e10b2f..168f950038d 100644 --- a/modules/packages/npm/creator_test.go +++ b/modules/packages/npm/creator_test.go @@ -26,6 +26,10 @@ func TestParsePackage(t *testing.T) { packageDescription := "Test Description" data := "H4sIAAAAAAAA/ytITM5OTE/VL4DQelnF+XkMVAYGBgZmJiYK2MRBwNDcSIHB2NTMwNDQzMwAqA7IMDUxA9LUdgg2UFpcklgEdAql5kD8ogCnhwio5lJQUMpLzE1VslJQcihOzi9I1S9JLS7RhSYIJR2QgrLUouLM/DyQGkM9Az1D3YIiqExKanFyUWZBCVQ2BKhVwQVJDKwosbQkI78IJO/tZ+LsbRykxFXLNdA+HwWjYBSMgpENACgAbtAACAAA" integrity := "sha512-yA4FJsVhetynGfOC1jFf79BuS+jrHbm0fhh+aHzCQkOaOBXKf9oBnC4a6DnLLnEsHQDRLYd00cwj8sCXpC+wIg==" + repository := Repository{ + Type: "gitea", + URL: "http://localhost:3000/gitea/test.git", + } t.Run("InvalidUpload", func(t *testing.T) { p, err := ParsePackage(bytes.NewReader([]byte{0})) @@ -242,6 +246,7 @@ func TestParsePackage(t *testing.T) { Dist: PackageDistribution{ Integrity: integrity, }, + Repository: repository, }, }, }, @@ -272,5 +277,7 @@ func TestParsePackage(t *testing.T) { assert.Equal(t, "https://gitea.io/", p.Metadata.ProjectURL) assert.Contains(t, p.Metadata.Dependencies, "package") assert.Equal(t, "1.2.0", p.Metadata.Dependencies["package"]) + assert.Equal(t, repository.Type, p.Metadata.Repository.Type) + assert.Equal(t, repository.URL, p.Metadata.Repository.URL) }) } diff --git a/modules/packages/npm/metadata.go b/modules/packages/npm/metadata.go index aafbdf779c2..77b77472a7a 100644 --- a/modules/packages/npm/metadata.go +++ b/modules/packages/npm/metadata.go @@ -21,4 +21,5 @@ type Metadata struct { OptionalDependencies map[string]string `json:"optional_dependencies,omitempty"` Bin map[string]string `json:"bin,omitempty"` Readme string `json:"readme,omitempty"` + Repository Repository `json:"repository,omitempty"` } diff --git a/routers/api/packages/npm/api.go b/routers/api/packages/npm/api.go index f8d50f03cf5..84708748842 100644 --- a/routers/api/packages/npm/api.go +++ b/routers/api/packages/npm/api.go @@ -45,6 +45,7 @@ func createPackageMetadataResponse(registryURL string, pds []*packages_model.Pac Author: npm_module.User{Name: metadata.Author}, License: metadata.License, Versions: versions, + Repository: metadata.Repository, } } diff --git a/tests/integration/api_packages_npm_test.go b/tests/integration/api_packages_npm_test.go index 6c4503f7e3b..28c14fb3b87 100644 --- a/tests/integration/api_packages_npm_test.go +++ b/tests/integration/api_packages_npm_test.go @@ -37,6 +37,8 @@ func TestPackageNpm(t *testing.T) { packageDescription := "Test Description" packageBinName := "cli" packageBinPath := "./cli.sh" + repoType := "gitea" + repoURL := "http://localhost:3000/gitea/test.git" data := "H4sIAAAAAAAA/ytITM5OTE/VL4DQelnF+XkMVAYGBgZmJiYK2MRBwNDcSIHB2NTMwNDQzMwAqA7IMDUxA9LUdgg2UFpcklgEdAql5kD8ogCnhwio5lJQUMpLzE1VslJQcihOzi9I1S9JLS7RhSYIJR2QgrLUouLM/DyQGkM9Az1D3YIiqExKanFyUWZBCVQ2BKhVwQVJDKwosbQkI78IJO/tZ+LsbRykxFXLNdA+HwWjYBSMgpENACgAbtAACAAA" @@ -62,6 +64,10 @@ func TestPackageNpm(t *testing.T) { "dist": { "integrity": "sha512-yA4FJsVhetynGfOC1jFf79BuS+jrHbm0fhh+aHzCQkOaOBXKf9oBnC4a6DnLLnEsHQDRLYd00cwj8sCXpC+wIg==", "shasum": "aaa7eaf852a948b0aa05afeda35b1badca155d90" + }, + "repository": { + "type": "` + repoType + `", + "url": "` + repoURL + `" } } }, @@ -169,6 +175,8 @@ func TestPackageNpm(t *testing.T) { assert.Equal(t, "sha512-yA4FJsVhetynGfOC1jFf79BuS+jrHbm0fhh+aHzCQkOaOBXKf9oBnC4a6DnLLnEsHQDRLYd00cwj8sCXpC+wIg==", pmv.Dist.Integrity) assert.Equal(t, "aaa7eaf852a948b0aa05afeda35b1badca155d90", pmv.Dist.Shasum) assert.Equal(t, fmt.Sprintf("%s%s/-/%s/%s", setting.AppURL, root[1:], packageVersion, filename), pmv.Dist.Tarball) + assert.Equal(t, repoType, result.Repository.Type) + assert.Equal(t, repoURL, result.Repository.URL) }) t.Run("AddTag", func(t *testing.T) {