Skip to content

Commit faf8d49

Browse files
refactor(purl): use TypeApk from purl (#5232)
* use TypeApk from purl * refactor: some tweaks Signed-off-by: knqyf263 <[email protected]> --------- Signed-off-by: knqyf263 <[email protected]> Co-authored-by: knqyf263 <[email protected]>
1 parent 559c0f3 commit faf8d49

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

pkg/purl/purl.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
)
1717

1818
const (
19-
TypeAPK = "apk" // not defined in github.com/package-url/packageurl-go
2019
TypeOCI = "oci"
2120
TypeDart = "dart"
2221
)
@@ -135,7 +134,7 @@ func (p *PackageURL) LangType() ftypes.LangType {
135134
}
136135

137136
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
139138
}
140139

141140
func (p *PackageURL) BOMRef() string {
@@ -180,11 +179,10 @@ func NewPackageURL(t ftypes.TargetType, metadata types.Metadata, pkg ftypes.Pack
180179
if metadata.OS != nil {
181180
namespace = string(metadata.OS.Family)
182181
}
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...)
188186
case packageurl.TypeMaven, string(ftypes.Gradle): // TODO: replace with packageurl.TypeGradle once they add it.
189187
namespace, name = parseMaven(name)
190188
case packageurl.TypePyPi:
@@ -246,17 +244,25 @@ func parseOCI(metadata types.Metadata) (packageurl.PackageURL, error) {
246244
return *packageurl.NewPackageURL(packageurl.TypeOCI, "", name, digest.DigestStr(), qualifiers, ""), nil
247245
}
248246

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+
250252
if fos == nil {
251-
return packageurl.Qualifiers{}
253+
return pkgName, "", nil
252254
}
253255

254-
return packageurl.Qualifiers{
256+
// the namespace must be lowercase
257+
ns := strings.ToLower(string(fos.Family))
258+
qs := packageurl.Qualifiers{
255259
{
256260
Key: "distro",
257261
Value: fos.Name,
258262
},
259263
}
264+
265+
return pkgName, ns, qs
260266
}
261267

262268
// ref. https://github.com/package-url/purl-spec/blob/a748c36ad415c8aeffe2b8a4a5d8a50d16d6d85f/PURL-TYPES.rst#deb
@@ -384,7 +390,7 @@ func purlType(t ftypes.TargetType) string {
384390
case ftypes.RustBinary, ftypes.Cargo:
385391
return packageurl.TypeCargo
386392
case ftypes.Alpine:
387-
return TypeAPK
393+
return packageurl.TypeApk
388394
case ftypes.Debian, ftypes.Ubuntu:
389395
return packageurl.TypeDebian
390396
case ftypes.RedHat, ftypes.CentOS, ftypes.Rocky, ftypes.Alma,

pkg/sbom/spdx/unmarshal.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func (s *SPDX) parsePackages(pkgs map[common.ElementID]*spdx.Package) error {
178178
return xerrors.Errorf("failed to parse package: %w", err)
179179
}
180180
switch pkgURL.Type {
181-
case purl.TypeAPK, packageurl.TypeDebian, packageurl.TypeRPM:
181+
case packageurl.TypeApk, packageurl.TypeDebian, packageurl.TypeRPM:
182182
osPkgs = append(osPkgs, *pkg)
183183
default:
184184
// Language-specific packages

0 commit comments

Comments
 (0)