Skip to content

Commit e2cf0a2

Browse files
erikvargacopybara-github
authored andcommitted
Move Ecosystem() from Extractor to Package.
PiperOrigin-RevId: 763348904
1 parent eb23a48 commit e2cf0a2

File tree

59 files changed

+1509
-139
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+1509
-139
lines changed

binary/proto/proto_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -413,10 +413,10 @@ func TestScanResultToProto(t *testing.T) {
413413
cdxPackage := &extractor.Package{
414414
Name: "openssl",
415415
Version: "1.1.1",
416-
PURLType: purl.TypeGeneric,
416+
PURLType: purl.TypeNPM,
417417
Metadata: &cdxmeta.Metadata{
418418
PURL: &purl.PackageURL{
419-
Type: purl.TypeGeneric,
419+
Type: purl.TypeNPM,
420420
Name: "openssl",
421421
Version: "1.1.1",
422422
},
@@ -427,18 +427,18 @@ func TestScanResultToProto(t *testing.T) {
427427
cdxPackageProto := &spb.Package{
428428
Name: "openssl",
429429
Version: "1.1.1",
430-
Ecosystem: "generic",
430+
Ecosystem: "npm",
431431
Purl: &spb.Purl{
432-
Purl: "pkg:generic/openssl@1.1.1",
433-
Type: purl.TypeGeneric,
432+
Purl: "pkg:npm/openssl@1.1.1",
433+
Type: purl.TypeNPM,
434434
Name: "openssl",
435435
Version: "1.1.1",
436436
},
437437
Metadata: &spb.Package_CdxMetadata{
438438
CdxMetadata: &spb.CDXPackageMetadata{
439439
Purl: &spb.Purl{
440-
Purl: "pkg:generic/openssl@1.1.1",
441-
Type: purl.TypeGeneric,
440+
Purl: "pkg:npm/openssl@1.1.1",
441+
Type: purl.TypeNPM,
442442
Name: "openssl",
443443
Version: "1.1.1",
444444
},

extractor/convert.go

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
mavenpurl "github.com/google/osv-scalibr/extractor/filesystem/language/java/purl"
2121
npmpurl "github.com/google/osv-scalibr/extractor/filesystem/language/javascript/purl"
2222
"github.com/google/osv-scalibr/extractor/filesystem/language/python/pypipurl"
23+
osecosystem "github.com/google/osv-scalibr/extractor/filesystem/os/ecosystem"
2324
ospurl "github.com/google/osv-scalibr/extractor/filesystem/os/purl"
2425
cdxmeta "github.com/google/osv-scalibr/extractor/filesystem/sbom/cdx/metadata"
2526
cdxpurl "github.com/google/osv-scalibr/extractor/filesystem/sbom/cdx/purl"
@@ -29,7 +30,7 @@ import (
2930
"github.com/google/osv-scalibr/purl"
3031
)
3132

32-
// ToPURL converts a SCALIBR package structure into a package URL.
33+
// toPURL converts a SCALIBR package structure into a package URL.
3334
func toPURL(p *Package) *purl.PackageURL {
3435
if p.PURLType == "" {
3536
return nil
@@ -76,3 +77,44 @@ func typeSpecificPURL(p *Package) *purl.PackageURL {
7677
// TODO(b/400910349): Add remaining type-specific conversion logic.
7778
return nil
7879
}
80+
81+
// toEcosystem converts a SCALIBR package structure into an OSV ecosystem value
82+
// defined in https://ossf.github.io/osv-schema/#defined-ecosystems
83+
func toEcosystem(p *Package) string {
84+
switch p.PURLType {
85+
case purl.TypeDebian, purl.TypeOpkg, purl.TypeApk, purl.TypeRPM,
86+
purl.TypeSnap, purl.TypePacman, purl.TypePortage, purl.TypeKernelModule:
87+
return osecosystem.MakeEcosystem(p.Metadata)
88+
case purl.TypePyPi:
89+
return "PyPI"
90+
case purl.TypeMaven:
91+
return "Maven"
92+
case purl.TypeNPM:
93+
return "npm"
94+
case purl.TypeGolang:
95+
return "Go"
96+
case purl.TypeCocoapods:
97+
return "CocoaPods"
98+
case purl.TypeConan:
99+
return "ConanCenter"
100+
case purl.TypeCran:
101+
return "CRAN"
102+
case purl.TypeGem:
103+
return "RubyGems"
104+
case purl.TypeNuget:
105+
return "NuGet"
106+
case purl.TypeHaskell:
107+
return "Hackage"
108+
case purl.TypeHex:
109+
return "Hex"
110+
case purl.TypeComposer:
111+
return "Packagist"
112+
case purl.TypeCargo:
113+
return "crates.io"
114+
case purl.TypePub:
115+
return "Pub"
116+
}
117+
118+
// No Ecosystem defined for this package.
119+
return ""
120+
}

extractor/convert_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,51 @@ func TestToPURL(t *testing.T) {
195195
})
196196
}
197197
}
198+
199+
func TestToEcosystem(t *testing.T) {
200+
tests := []struct {
201+
name string
202+
pkg *extractor.Package
203+
want string
204+
}{
205+
{
206+
name: "no_purl_type",
207+
pkg: &extractor.Package{
208+
Name: "name",
209+
Version: "version",
210+
},
211+
want: "",
212+
},
213+
{
214+
name: "simple_ecosystem",
215+
pkg: &extractor.Package{
216+
Name: "name",
217+
Version: "version",
218+
PURLType: purl.TypeGolang,
219+
},
220+
want: "Go",
221+
},
222+
{
223+
name: "os_ecosystem",
224+
pkg: &extractor.Package{
225+
Name: "Name",
226+
Version: "1.2.3",
227+
PURLType: purl.TypeDebian,
228+
Metadata: &dpkgmeta.Metadata{
229+
PackageName: "pkg-name",
230+
OSVersionCodename: "jammy",
231+
},
232+
},
233+
want: "Linux",
234+
},
235+
}
236+
237+
for _, tt := range tests {
238+
t.Run(tt.name, func(t *testing.T) {
239+
got := tt.pkg.Ecosystem()
240+
if got != tt.want {
241+
t.Errorf("%v.Ecosystem(): got %q, want %q", tt.pkg, got, tt.want)
242+
}
243+
})
244+
}
245+
}

extractor/extractor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (p *Package) PURL() *purl.PackageURL {
103103
// Ecosystem returns the Ecosystem of the package. For software packages this corresponds
104104
// to an OSV ecosystem value, e.g. PyPI.
105105
func (p *Package) Ecosystem() string {
106-
return p.Extractor.Ecosystem(p)
106+
return toEcosystem(p)
107107
}
108108

109109
// LINT.ThenChange(/binary/proto/scan_result.proto)

extractor/filesystem/language/cpp/conanlock/conanlock.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
244244
}
245245

246246
// Ecosystem returns the OSV ecosystem ('ConanCenter') of the software extracted by this extractor.
247+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
247248
func (e Extractor) Ecosystem(p *extractor.Package) string {
248-
return "ConanCenter"
249+
return p.Ecosystem()
249250
}
250251

251252
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/dart/pubspec/pubspec.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
129129
}
130130

131131
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
132-
func (e Extractor) Ecosystem(p *extractor.Package) string { return "Pub" }
132+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
133+
func (e Extractor) Ecosystem(p *extractor.Package) string {
134+
return p.Ecosystem()
135+
}
133136

134137
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/dotnet/depsjson/depsjson.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
203203
}
204204

205205
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
206+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
206207
func (Extractor) Ecosystem(p *extractor.Package) string {
207-
return "NuGet"
208+
return p.Ecosystem()
208209
}

extractor/filesystem/language/dotnet/dotnetpe/dotnetpe.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
260260
}
261261

262262
// Ecosystem implements filesystem.Extractor.
263+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
263264
func (e Extractor) Ecosystem(p *extractor.Package) string {
264-
return "NuGet"
265+
return p.Ecosystem()
265266
}
266267

267268
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/dotnet/packagesconfig/packagesconfig.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
189189
}
190190

191191
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
192-
func (Extractor) Ecosystem(p *extractor.Package) string {
193-
return "NuGet"
192+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
193+
func (e Extractor) Ecosystem(p *extractor.Package) string {
194+
return p.Ecosystem()
194195
}

extractor/filesystem/language/dotnet/packageslockjson/packageslockjson.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
189189
}
190190

191191
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
192-
func (Extractor) Ecosystem(p *extractor.Package) string { return "NuGet" }
192+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
193+
func (Extractor) Ecosystem(p *extractor.Package) string {
194+
return p.Ecosystem()
195+
}

extractor/filesystem/language/elixir/mixlock/mixlock.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
143143
}
144144

145145
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
146-
func (Extractor) Ecosystem(p *extractor.Package) string {
147-
return "Hex"
146+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
147+
func (e Extractor) Ecosystem(p *extractor.Package) string {
148+
return p.Ecosystem()
148149
}

extractor/filesystem/language/erlang/mixlock/mixlock.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
6767
}
6868

6969
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
70+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
7071
func (e Extractor) Ecosystem(p *extractor.Package) string {
71-
return "Hex"
72+
return p.Ecosystem()
7273
}
7374

7475
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/golang/gobinary/gobinary.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,4 +291,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
291291
}
292292

293293
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
294-
func (Extractor) Ecosystem(p *extractor.Package) string { return "Go" }
294+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
295+
func (Extractor) Ecosystem(p *extractor.Package) string {
296+
return p.Ecosystem()
297+
}

extractor/filesystem/language/golang/gomod/gomod.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
203203
}
204204

205205
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
206+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
206207
func (e Extractor) Ecosystem(p *extractor.Package) string {
207-
return "Go"
208+
return p.Ecosystem()
208209
}
209210

210211
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/haskell/cabal/cabal.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,6 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
191191
}
192192

193193
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
194-
func (Extractor) Ecosystem(p *extractor.Package) string { return "Hackage" }
194+
func (Extractor) Ecosystem(p *extractor.Package) string {
195+
return p.Ecosystem()
196+
}

extractor/filesystem/language/haskell/stacklock/stacklock.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
190190
}
191191

192192
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
193-
func (Extractor) Ecosystem(p *extractor.Package) string { return "Hackage" }
193+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
194+
func (Extractor) Ecosystem(p *extractor.Package) string {
195+
return p.Ecosystem()
196+
}

extractor/filesystem/language/java/archive/archive.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,4 +444,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
444444
}
445445

446446
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
447-
func (Extractor) Ecosystem(p *extractor.Package) string { return "Maven" }
447+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
448+
func (Extractor) Ecosystem(p *extractor.Package) string {
449+
return p.Ecosystem()
450+
}

extractor/filesystem/language/java/gradlelockfile/gradlelockfile.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
128128
}
129129

130130
// Ecosystem returns the OSV ecosystem ('Maven') of the software extracted by this extractor.
131+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
131132
func (e Extractor) Ecosystem(p *extractor.Package) string {
132-
return "Maven"
133+
return p.Ecosystem()
133134
}
134135

135136
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/java/gradleverificationmetadataxml/gradleverificationmetadataxml.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
100100
}
101101

102102
// Ecosystem returns the OSV ecosystem ('Maven') of the software extracted by this extractor.
103+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
103104
func (e Extractor) Ecosystem(p *extractor.Package) string {
104-
return "Maven"
105+
return p.Ecosystem()
105106
}
106107

107108
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/java/pomxml/pomxml.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
152152
}
153153

154154
// Ecosystem returns the OSV ecosystem ('Maven') of the software extracted by this extractor.
155+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
155156
func (e Extractor) Ecosystem(p *extractor.Package) string {
156-
return "Maven"
157+
return p.Ecosystem()
157158
}
158159

159160
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/java/pomxmlnet/pomxmlnet.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
249249
}
250250

251251
// Ecosystem returns the OSV ecosystem ('npm') of the software extracted by this extractor.
252-
func (e Extractor) Ecosystem(_ *extractor.Package) string {
253-
return "Maven"
252+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
253+
func (e Extractor) Ecosystem(p *extractor.Package) string {
254+
return p.Ecosystem()
254255
}
255256

256257
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/javascript/bunlock/bunlock.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,4 +161,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
161161
}
162162

163163
// Ecosystem returns the OSV ecosystem ('npm') of the software extracted by this extractor.
164-
func (e Extractor) Ecosystem(_ *extractor.Package) string { return "npm" }
164+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
165+
func (e Extractor) Ecosystem(p *extractor.Package) string {
166+
return p.Ecosystem()
167+
}

extractor/filesystem/language/javascript/packagejson/packagejson.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
257257
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
258258
// OSV requires the name field to be a npm package. This is a javascript extractor, there is no
259259
// guarantee that the package is an npm package.
260-
func (Extractor) Ecosystem(p *extractor.Package) string { return "npm" }
260+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
261+
func (Extractor) Ecosystem(p *extractor.Package) string {
262+
return p.Ecosystem()
263+
}

extractor/filesystem/language/javascript/packagelockjson/packagelockjson.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,4 +332,7 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
332332
}
333333

334334
// Ecosystem returns the OSV ecosystem ('npm') of the software extracted by this extractor.
335-
func (e Extractor) Ecosystem(_ *extractor.Package) string { return "npm" }
335+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
336+
func (e Extractor) Ecosystem(p *extractor.Package) string {
337+
return p.Ecosystem()
338+
}

extractor/filesystem/language/javascript/pnpmlock/pnpmlock.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
283283
}
284284

285285
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
286+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
286287
func (e Extractor) Ecosystem(p *extractor.Package) string {
287-
return "npm"
288+
return p.Ecosystem()
288289
}
289290

290291
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/javascript/yarnlock/yarnlock.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
232232
}
233233

234234
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
235-
func (e Extractor) Ecosystem(p *extractor.Package) string { return "npm" }
235+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
236+
func (e Extractor) Ecosystem(p *extractor.Package) string {
237+
return p.Ecosystem()
238+
}
236239

237240
var _ filesystem.Extractor = Extractor{}

extractor/filesystem/language/php/composerlock/composerlock.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,9 @@ func (e Extractor) ToPURL(p *extractor.Package) *purl.PackageURL {
126126
}
127127

128128
// Ecosystem returns the OSV Ecosystem of the software extracted by this extractor.
129+
// TODO(b/400910349): Remove and use Package.Ecosystem() directly.
129130
func (e Extractor) Ecosystem(p *extractor.Package) string {
130-
return "Packagist"
131+
return p.Ecosystem()
131132
}
132133

133134
var _ filesystem.Extractor = Extractor{}

0 commit comments

Comments
 (0)