@@ -16,7 +16,6 @@ import (
16
16
)
17
17
18
18
const (
19
- TypeAPK = "apk" // not defined in github.com/package-url/packageurl-go
20
19
TypeOCI = "oci"
21
20
TypeDart = "dart"
22
21
)
@@ -135,7 +134,7 @@ func (p *PackageURL) LangType() ftypes.LangType {
135
134
}
136
135
137
136
func (p * PackageURL ) IsOSPkg () bool {
138
- return p .Type == TypeAPK || p .Type == packageurl .TypeDebian || p .Type == packageurl .TypeRPM
137
+ return p .Type == packageurl . TypeApk || p .Type == packageurl .TypeDebian || p .Type == packageurl .TypeRPM
139
138
}
140
139
141
140
func (p * PackageURL ) BOMRef () string {
@@ -180,11 +179,10 @@ func NewPackageURL(t ftypes.TargetType, metadata types.Metadata, pkg ftypes.Pack
180
179
if metadata .OS != nil {
181
180
namespace = string (metadata .OS .Family )
182
181
}
183
- case TypeAPK : // TODO: replace with packageurl.TypeApk once they add it.
184
- qualifiers = append (qualifiers , parseApk (metadata .OS )... )
185
- if metadata .OS != nil {
186
- namespace = string (metadata .OS .Family )
187
- }
182
+ case packageurl .TypeApk :
183
+ var qs packageurl.Qualifiers
184
+ name , namespace , qs = parseApk (name , metadata .OS )
185
+ qualifiers = append (qualifiers , qs ... )
188
186
case packageurl .TypeMaven , string (ftypes .Gradle ): // TODO: replace with packageurl.TypeGradle once they add it.
189
187
namespace , name = parseMaven (name )
190
188
case packageurl .TypePyPi :
@@ -246,17 +244,25 @@ func parseOCI(metadata types.Metadata) (packageurl.PackageURL, error) {
246
244
return * packageurl .NewPackageURL (packageurl .TypeOCI , "" , name , digest .DigestStr (), qualifiers , "" ), nil
247
245
}
248
246
249
- func parseApk (fos * ftypes.OS ) packageurl.Qualifiers {
247
+ // ref. https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst#apk
248
+ func parseApk (pkgName string , fos * ftypes.OS ) (string , string , packageurl.Qualifiers ) {
249
+ // the name must be lowercase
250
+ pkgName = strings .ToLower (pkgName )
251
+
250
252
if fos == nil {
251
- return packageurl. Qualifiers {}
253
+ return pkgName , "" , nil
252
254
}
253
255
254
- return packageurl.Qualifiers {
256
+ // the namespace must be lowercase
257
+ ns := strings .ToLower (string (fos .Family ))
258
+ qs := packageurl.Qualifiers {
255
259
{
256
260
Key : "distro" ,
257
261
Value : fos .Name ,
258
262
},
259
263
}
264
+
265
+ return pkgName , ns , qs
260
266
}
261
267
262
268
// ref. https://github.com/package-url/purl-spec/blob/a748c36ad415c8aeffe2b8a4a5d8a50d16d6d85f/PURL-TYPES.rst#deb
@@ -384,7 +390,7 @@ func purlType(t ftypes.TargetType) string {
384
390
case ftypes .RustBinary , ftypes .Cargo :
385
391
return packageurl .TypeCargo
386
392
case ftypes .Alpine :
387
- return TypeAPK
393
+ return packageurl . TypeApk
388
394
case ftypes .Debian , ftypes .Ubuntu :
389
395
return packageurl .TypeDebian
390
396
case ftypes .RedHat , ftypes .CentOS , ftypes .Rocky , ftypes .Alma ,
0 commit comments