loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(nuget): add missing nuget V2 properties (#7102)

- Add several missing nuget V2 properties to the API.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7102
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: jwolvers <jwolvers@noreply.codeberg.org>
Co-committed-by: jwolvers <jwolvers@noreply.codeberg.org>

authored by

jwolvers
jwolvers
and committed by
Gusted
3fdc3b6f a9303901

+138 -13
+27
modules/packages/nuget/metadata.go
··· 57 57 58 58 // Metadata represents the metadata of a Nuget package 59 59 type Metadata struct { 60 + Title string `json:"title,omitempty"` 61 + Language string `json:"language,omitempty"` 60 62 Description string `json:"description,omitempty"` 61 63 ReleaseNotes string `json:"release_notes,omitempty"` 62 64 Readme string `json:"readme,omitempty"` 63 65 Authors string `json:"authors,omitempty"` 66 + Owners string `json:"owners,omitempty"` 67 + Copyright string `json:"copyright,omitempty"` 64 68 ProjectURL string `json:"project_url,omitempty"` 65 69 RepositoryURL string `json:"repository_url,omitempty"` 70 + LicenseURL string `json:"license_url,omitempty"` 71 + IconURL string `json:"icon_url,omitempty"` 72 + MinClientVersion string `json:"min_client_version,omitempty"` 73 + Tags string `json:"tags,omitempty"` 74 + DevelopmentDependency bool `json:"development_dependency,omitempty"` 66 75 RequireLicenseAcceptance bool `json:"require_license_acceptance"` 67 76 Dependencies map[string][]Dependency `json:"dependencies,omitempty"` 68 77 } ··· 77 86 type nuspecPackage struct { 78 87 Metadata struct { 79 88 ID string `xml:"id"` 89 + Title string `xml:"title"` 90 + Language string `xml:"language"` 80 91 Version string `xml:"version"` 81 92 Authors string `xml:"authors"` 93 + Owners string `xml:"owners"` 94 + Copyright string `xml:"copyright"` 95 + DevelopmentDependency bool `xml:"developmentDependency"` 82 96 RequireLicenseAcceptance bool `xml:"requireLicenseAcceptance"` 83 97 ProjectURL string `xml:"projectUrl"` 98 + LicenseURL string `xml:"licenseUrl"` 99 + IconURL string `xml:"iconUrl"` 84 100 Description string `xml:"description"` 85 101 ReleaseNotes string `xml:"releaseNotes"` 86 102 Readme string `xml:"readme"` 103 + Tags string `xml:"tags"` 104 + MinClientVersion string `xml:"minClientVersion,attr"` 87 105 PackageTypes struct { 88 106 PackageType []struct { 89 107 Name string `xml:"name,attr"` ··· 167 185 } 168 186 169 187 m := &Metadata{ 188 + Title: p.Metadata.Title, 189 + Language: p.Metadata.Language, 170 190 Description: p.Metadata.Description, 171 191 ReleaseNotes: p.Metadata.ReleaseNotes, 172 192 Authors: p.Metadata.Authors, 193 + Owners: p.Metadata.Owners, 194 + Copyright: p.Metadata.Copyright, 173 195 ProjectURL: p.Metadata.ProjectURL, 174 196 RepositoryURL: p.Metadata.Repository.URL, 197 + LicenseURL: p.Metadata.LicenseURL, 198 + IconURL: p.Metadata.IconURL, 199 + MinClientVersion: p.Metadata.MinClientVersion, 200 + Tags: p.Metadata.Tags, 201 + DevelopmentDependency: p.Metadata.DevelopmentDependency, 175 202 RequireLicenseAcceptance: p.Metadata.RequireLicenseAcceptance, 176 203 Dependencies: make(map[string][]Dependency), 177 204 }
+31 -5
modules/packages/nuget/metadata_test.go
··· 13 13 ) 14 14 15 15 const ( 16 - id = "System.Gitea" 16 + id = "System.Forgejo" 17 + title = "Package Title" 18 + language = "Package Language" 17 19 semver = "1.0.1" 18 - authors = "Gitea Authors" 19 - projectURL = "https://gitea.io" 20 + authors = "Forgejo Authors" 21 + owners = "Package Owners" 22 + copyright = "Package Copyright" 23 + projectURL = "https://forgejo.org" 24 + licenseURL = "https://forgejo.org/docs/latest/license/" 25 + iconURL = "https://codeberg.org/forgejo/governance/raw/branch/main/branding/logo/forgejo.png" 20 26 description = "Package Description" 21 27 releaseNotes = "Package Release Notes" 22 28 readme = "Readme" 23 - repositoryURL = "https://gitea.io/gitea/gitea" 29 + tags = "tag_1 tag_2 tag_3" 30 + minClientVersion = "1.0.0.0" 31 + repositoryURL = "https://codeberg.org/forgejo" 24 32 targetFramework = ".NETStandard2.1" 25 33 dependencyID = "System.Text.Json" 26 34 dependencyVersion = "5.0.0" ··· 28 36 29 37 const nuspecContent = `<?xml version="1.0" encoding="utf-8"?> 30 38 <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> 31 - <metadata> 39 + <metadata minClientVersion="` + minClientVersion + `"> 32 40 <id>` + id + `</id> 41 + <title>` + title + `</title> 42 + <language>` + language + `</language> 33 43 <version>` + semver + `</version> 34 44 <authors>` + authors + `</authors> 45 + <owners>` + owners + `</owners> 46 + <copyright>` + copyright + `</copyright> 47 + <developmentDependency>true</developmentDependency> 35 48 <requireLicenseAcceptance>true</requireLicenseAcceptance> 36 49 <projectUrl>` + projectURL + `</projectUrl> 50 + <licenseUrl>` + licenseURL + `</licenseUrl> 51 + <iconUrl>` + iconURL + `</iconUrl> 37 52 <description>` + description + `</description> 38 53 <releaseNotes>` + releaseNotes + `</releaseNotes> 39 54 <repository url="` + repositoryURL + `" /> 40 55 <readme>README.md</readme> 56 + <tags>` + tags + `</tags> 41 57 <dependencies> 42 58 <group targetFramework="` + targetFramework + `"> 43 59 <dependency id="` + dependencyID + `" version="` + dependencyVersion + `" exclude="Build,Analyzers" /> ··· 142 158 assert.Equal(t, DependencyPackage, np.PackageType) 143 159 144 160 assert.Equal(t, id, np.ID) 161 + assert.Equal(t, title, np.Metadata.Title) 162 + assert.Equal(t, language, np.Metadata.Language) 145 163 assert.Equal(t, semver, np.Version) 146 164 assert.Equal(t, authors, np.Metadata.Authors) 165 + assert.Equal(t, owners, np.Metadata.Owners) 166 + assert.Equal(t, copyright, np.Metadata.Copyright) 167 + assert.True(t, np.Metadata.DevelopmentDependency) 168 + assert.True(t, np.Metadata.RequireLicenseAcceptance) 147 169 assert.Equal(t, projectURL, np.Metadata.ProjectURL) 170 + assert.Equal(t, licenseURL, np.Metadata.LicenseURL) 171 + assert.Equal(t, iconURL, np.Metadata.IconURL) 148 172 assert.Equal(t, description, np.Metadata.Description) 149 173 assert.Equal(t, releaseNotes, np.Metadata.ReleaseNotes) 150 174 assert.Equal(t, readme, np.Metadata.Readme) 175 + assert.Equal(t, tags, np.Metadata.Tags) 176 + assert.Equal(t, minClientVersion, np.Metadata.MinClientVersion) 151 177 assert.Equal(t, repositoryURL, np.Metadata.RepositoryURL) 152 178 assert.Len(t, np.Metadata.Dependencies, 1) 153 179 assert.Contains(t, np.Metadata.Dependencies, targetFramework)
+20 -2
routers/api/packages/nuget/api_v2.go
··· 249 249 Version string `xml:"d:Version"` 250 250 NormalizedVersion string `xml:"d:NormalizedVersion"` 251 251 Authors string `xml:"d:Authors"` 252 + Owners string `xml:"d:Owners,omitempty"` 253 + Copyright string `xml:"d:Copyright,omitempty"` 254 + Language string `xml:"d:Language,omitempty"` 252 255 Dependencies string `xml:"d:Dependencies"` 253 256 Description string `xml:"d:Description"` 254 257 VersionDownloadCount TypedValue[int64] `xml:"d:VersionDownloadCount"` ··· 258 261 LastUpdated TypedValue[time.Time] `xml:"d:LastUpdated"` 259 262 Published TypedValue[time.Time] `xml:"d:Published"` 260 263 ProjectURL string `xml:"d:ProjectUrl,omitempty"` 264 + LicenseURL string `xml:"d:LicenseUrl,omitempty"` 265 + IconURL string `xml:"d:IconUrl,omitempty"` 261 266 ReleaseNotes string `xml:"d:ReleaseNotes,omitempty"` 262 267 RequireLicenseAcceptance TypedValue[bool] `xml:"d:RequireLicenseAcceptance"` 263 - Title string `xml:"d:Title"` 268 + DevelopmentDependency TypedValue[bool] `xml:"d:DevelopmentDependency"` 269 + Title string `xml:"d:Title,omitempty"` 270 + MinClientVersion string `xml:"d:MinClientVersion,omitempty"` 271 + Tags string `xml:"d:Tags,omitempty"` 272 + ID string `xml:"d:Id,omitempty"` 264 273 } 265 274 266 275 type FeedEntry struct { ··· 356 365 Version: pd.Version.Version, 357 366 NormalizedVersion: pd.Version.Version, 358 367 Authors: metadata.Authors, 368 + Owners: metadata.Owners, 369 + Copyright: metadata.Copyright, 370 + Language: metadata.Language, 359 371 Dependencies: buildDependencyString(metadata), 360 372 Description: metadata.Description, 361 373 VersionDownloadCount: TypedValue[int64]{Type: "Edm.Int64", Value: pd.Version.DownloadCount}, ··· 365 377 LastUpdated: createdValue, 366 378 Published: createdValue, 367 379 ProjectURL: metadata.ProjectURL, 380 + LicenseURL: metadata.LicenseURL, 381 + IconURL: metadata.IconURL, 368 382 ReleaseNotes: metadata.ReleaseNotes, 369 383 RequireLicenseAcceptance: TypedValue[bool]{Type: "Edm.Boolean", Value: metadata.RequireLicenseAcceptance}, 370 - Title: pd.Package.Name, 384 + DevelopmentDependency: TypedValue[bool]{Type: "Edm.Boolean", Value: metadata.DevelopmentDependency}, 385 + Title: metadata.Title, 386 + MinClientVersion: metadata.MinClientVersion, 387 + Tags: metadata.Tags, 388 + ID: pd.Package.Name, 371 389 }, 372 390 } 373 391
+60 -6
tests/integration/api_packages_nuget_test.go
··· 49 49 Version string `xml:"Version"` 50 50 NormalizedVersion string `xml:"NormalizedVersion"` 51 51 Authors string `xml:"Authors"` 52 + Owners string `xml:"Owners,omitempty"` 53 + Copyright string `xml:"Copyright,omitempty"` 54 + Language string `xml:"Language,omitempty"` 52 55 Dependencies string `xml:"Dependencies"` 53 56 Description string `xml:"Description"` 54 57 VersionDownloadCount nuget.TypedValue[int64] `xml:"VersionDownloadCount"` ··· 58 61 LastUpdated nuget.TypedValue[time.Time] `xml:"LastUpdated"` 59 62 Published nuget.TypedValue[time.Time] `xml:"Published"` 60 63 ProjectURL string `xml:"ProjectUrl,omitempty"` 64 + LicenseURL string `xml:"LicenseUrl,omitempty"` 65 + IconURL string `xml:"IconUrl,omitempty"` 61 66 ReleaseNotes string `xml:"ReleaseNotes,omitempty"` 62 67 RequireLicenseAcceptance nuget.TypedValue[bool] `xml:"RequireLicenseAcceptance"` 68 + DevelopmentDependency nuget.TypedValue[bool] `xml:"DevelopmentDependency"` 63 69 Title string `xml:"Title"` 70 + MinClientVersion string `xml:"MinClientVersion,omitempty"` 71 + Tags string `xml:"Tags,omitempty"` 72 + ID string `xml:"Id,omitempty"` 64 73 } 65 74 66 75 type FeedEntry struct { ··· 87 96 packageName := "test.package" 88 97 packageVersion := "1.0.3" 89 98 packageAuthors := "KN4CK3R" 90 - packageDescription := "Gitea Test Package" 99 + packageDescription := "Forgejo Test Package" 91 100 symbolFilename := "test.pdb" 92 101 symbolID := "d910bb6948bd4c6cb40155bcf52c3c94" 93 102 103 + packageTitle := "Package Title" 104 + packageLanguage := "Package Language" 105 + packageOwners := "Package Owners" 106 + packageCopyright := "Package Copyright" 107 + packageProjectURL := "https://forgejo.org" 108 + packageLicenseURL := "https://forgejo.org/docs/latest/license/" 109 + packageIconURL := "https://codeberg.org/forgejo/governance/raw/branch/main/branding/logo/forgejo.png" 110 + packageReleaseNotes := "Package Release Notes" 111 + packageTags := "tag_1 tag_2 tag_3" 112 + packageMinClientVersion := "1.0.0.0" 113 + 94 114 createPackage := func(id, version string) io.Reader { 95 115 var buf bytes.Buffer 96 116 archive := zip.NewWriter(&buf) 97 117 w, _ := archive.Create("package.nuspec") 98 118 w.Write([]byte(`<?xml version="1.0" encoding="utf-8"?> 99 119 <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> 100 - <metadata> 120 + <metadata minClientVersion="` + packageMinClientVersion + `"> 101 121 <id>` + id + `</id> 122 + <title>` + packageTitle + `</title> 123 + <language>` + packageLanguage + `</language> 102 124 <version>` + version + `</version> 103 125 <authors>` + packageAuthors + `</authors> 126 + <owners>` + packageOwners + `</owners> 127 + <copyright>` + packageCopyright + `</copyright> 128 + <developmentDependency>true</developmentDependency> 129 + <requireLicenseAcceptance>true</requireLicenseAcceptance> 130 + <projectUrl>` + packageProjectURL + `</projectUrl> 131 + <licenseUrl>` + packageLicenseURL + `</licenseUrl> 132 + <iconUrl>` + packageIconURL + `</iconUrl> 104 133 <description>` + packageDescription + `</description> 134 + <releaseNotes>` + packageReleaseNotes + `</releaseNotes> 135 + <tags>` + packageTags + `</tags> 105 136 <dependencies> 106 137 <group targetFramework=".NETStandard2.0"> 107 138 <dependency id="Microsoft.CSharp" version="4.5.0" /> ··· 115 146 116 147 nuspec := `<?xml version="1.0" encoding="utf-8"?> 117 148 <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> 118 - <metadata> 149 + <metadata minClientVersion="` + packageMinClientVersion + `"> 119 150 <id>` + packageName + `</id> 151 + <title>` + packageTitle + `</title> 152 + <language>` + packageLanguage + `</language> 120 153 <version>` + packageVersion + `</version> 121 154 <authors>` + packageAuthors + `</authors> 155 + <owners>` + packageOwners + `</owners> 156 + <copyright>` + packageCopyright + `</copyright> 157 + <developmentDependency>true</developmentDependency> 158 + <requireLicenseAcceptance>true</requireLicenseAcceptance> 159 + <projectUrl>` + packageProjectURL + `</projectUrl> 160 + <licenseUrl>` + packageLicenseURL + `</licenseUrl> 161 + <iconUrl>` + packageIconURL + `</iconUrl> 122 162 <description>` + packageDescription + `</description> 163 + <releaseNotes>` + packageReleaseNotes + `</releaseNotes> 164 + <tags>` + packageTags + `</tags> 123 165 <dependencies> 124 166 <group targetFramework=".NETStandard2.0"> 125 167 <dependency id="Microsoft.CSharp" version="4.5.0" /> ··· 325 367 326 368 pb, err := packages.GetBlobByID(db.DefaultContext, pf.BlobID) 327 369 require.NoError(t, err) 328 - assert.Equal(t, int64(414), pb.Size) 370 + assert.Equal(t, int64(len(content)), pb.Size) 329 371 case fmt.Sprintf("%s.%s.snupkg", packageName, packageVersion): 330 372 assert.False(t, pf.IsLead) 331 373 ··· 337 379 338 380 pb, err := packages.GetBlobByID(db.DefaultContext, pf.BlobID) 339 381 require.NoError(t, err) 340 - assert.Equal(t, int64(453), pb.Size) 382 + assert.Equal(t, int64(len([]byte(nuspec))), pb.Size) 341 383 case symbolFilename: 342 384 assert.False(t, pf.IsLead) 343 385 ··· 668 710 var result FeedEntry 669 711 decodeXML(t, resp, &result) 670 712 671 - assert.Equal(t, packageName, result.Properties.Title) 713 + assert.Equal(t, packageName, result.Properties.ID) 672 714 assert.Equal(t, packageVersion, result.Properties.Version) 673 715 assert.Equal(t, packageAuthors, result.Properties.Authors) 674 716 assert.Equal(t, packageDescription, result.Properties.Description) 717 + assert.Equal(t, packageTitle, result.Properties.Title) 718 + assert.Equal(t, packageLanguage, result.Properties.Language) 719 + assert.Equal(t, packageOwners, result.Properties.Owners) 720 + assert.Equal(t, packageCopyright, result.Properties.Copyright) 721 + assert.Equal(t, packageProjectURL, result.Properties.ProjectURL) 722 + assert.Equal(t, packageLicenseURL, result.Properties.LicenseURL) 723 + assert.Equal(t, packageIconURL, result.Properties.IconURL) 724 + assert.Equal(t, packageReleaseNotes, result.Properties.ReleaseNotes) 725 + assert.Equal(t, packageTags, result.Properties.Tags) 726 + assert.Equal(t, packageMinClientVersion, result.Properties.MinClientVersion) 727 + assert.True(t, result.Properties.DevelopmentDependency.Value) 728 + assert.True(t, result.Properties.RequireLicenseAcceptance.Value) 675 729 assert.Equal(t, "Microsoft.CSharp:4.5.0:.NETStandard2.0", result.Properties.Dependencies) 676 730 }) 677 731