diff --git a/go.mod b/go.mod index 3faf311baf03..934da6e0c991 100644 --- a/go.mod +++ b/go.mod @@ -57,7 +57,7 @@ require ( github.com/opencontainers/image-spec v1.1.0 github.com/opencontainers/runtime-spec v1.2.0 github.com/opencontainers/selinux v1.11.1 - github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170 + github.com/package-url/packageurl-go v0.1.1 github.com/pelletier/go-toml v1.9.5 github.com/pkg/errors v0.9.1 github.com/pkg/profile v1.7.0 diff --git a/go.sum b/go.sum index 8cce877fdd68..7ebd8ac94263 100644 --- a/go.sum +++ b/go.sum @@ -314,8 +314,8 @@ github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626/go. github.com/opencontainers/selinux v1.9.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opencontainers/selinux v1.11.1 h1:nHFvthhM0qY8/m+vfhJylliSshm8G1jJ2jDMcgULaH8= github.com/opencontainers/selinux v1.11.1/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= -github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170 h1:DiLBVp4DAcZlBVBEtJpNWZpZVq0AEeCY7Hqk8URVs4o= -github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170/go.mod h1:uQd4a7Rh3ZsVg5j0lNyAfyxIeGde9yrlhjF78GzeW0c= +github.com/package-url/packageurl-go v0.1.1 h1:KTRE0bK3sKbFKAk3yy63DpeskU7Cvs/x/Da5l+RtzyU= +github.com/package-url/packageurl-go v0.1.1/go.mod h1:uQd4a7Rh3ZsVg5j0lNyAfyxIeGde9yrlhjF78GzeW0c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= diff --git a/vendor/github.com/package-url/packageurl-go/Makefile b/vendor/github.com/package-url/packageurl-go/Makefile index f6e71425f759..f799baaeb050 100644 --- a/vendor/github.com/package-url/packageurl-go/Makefile +++ b/vendor/github.com/package-url/packageurl-go/Makefile @@ -1,12 +1,8 @@ .PHONY: test clean lint test: - curl -L https://raw.githubusercontent.com/package-url/purl-spec/master/test-suite-data.json -o testdata/test-suite-data.json go test -v -cover ./... -clean: - find . -name "test-suite-data.json" | xargs rm -f - lint: go get -u golang.org/x/lint/golint golint -set_exit_status diff --git a/vendor/github.com/package-url/packageurl-go/README.md b/vendor/github.com/package-url/packageurl-go/README.md index 783985498b0b..b7fd200e79db 100644 --- a/vendor/github.com/package-url/packageurl-go/README.md +++ b/vendor/github.com/package-url/packageurl-go/README.md @@ -59,16 +59,16 @@ Testing using the normal ``go test`` command. Using ``make test`` will pull the ``` $ make test -curl -L https://raw.githubusercontent.com/package-url/purl-test-suite/master/test-suite-data.json -o testdata/test-suite-data.json - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed -100 7181 100 7181 0 0 1202 0 0:00:05 0:00:05 --:--:-- 1611 go test -v -cover ./... === RUN TestFromStringExamples --- PASS: TestFromStringExamples (0.00s) === RUN TestToStringExamples --- PASS: TestToStringExamples (0.00s) +=== RUN TestStringer +--- PASS: TestStringer (0.00s) +=== RUN TestQualifiersMapConversion +--- PASS: TestQualifiersMapConversion (0.00s) PASS -coverage: 94.7% of statements -ok github.com/package-url/packageurl-go 0.002s +coverage: 90.7% of statements +ok github.com/package-url/packageurl-go 0.004s coverage: 90.7% of statements ``` diff --git a/vendor/github.com/package-url/packageurl-go/packageurl.go b/vendor/github.com/package-url/packageurl-go/packageurl.go index 3cba7095d5f1..771ddc3727a6 100644 --- a/vendor/github.com/package-url/packageurl-go/packageurl.go +++ b/vendor/github.com/package-url/packageurl-go/packageurl.go @@ -89,6 +89,10 @@ var ( TypeRPM = "rpm" // TypeSwift is pkg:swift purl TypeSwift = "swift" + // TypeHuggingface is pkg:huggingface purl. + TypeHuggingface = "huggingface" + // TypeMLflow is pkg:mlflow purl. + TypeMLFlow = "mlflow" ) // Qualifier represents a single key=value qualifier in the package url @@ -283,7 +287,7 @@ func FromString(purl string) (PackageURL, error) { remainder = nextSplit[1] index = strings.LastIndex(remainder, "/") - name := typeAdjustName(purlType, remainder[index+1:]) + name := typeAdjustName(purlType, remainder[index+1:], qualifiers) version := "" atIndex := strings.Index(name, "@") @@ -292,7 +296,7 @@ func FromString(purl string) (PackageURL, error) { if err != nil { return PackageURL{}, fmt.Errorf("failed to unescape purl version: %s", err) } - version = v + version = typeAdjustVersion(purlType, v) unecapeName, err := url.PathUnescape(name[:atIndex]) if err != nil { @@ -342,7 +346,7 @@ func FromString(purl string) (PackageURL, error) { // See https://github.com/package-url/purl-spec#known-purl-types func typeAdjustNamespace(purlType, ns string) string { switch purlType { - case TypeBitbucket, TypeDebian, TypeGithub, TypeGolang, TypeNPM, TypeRPM: + case TypeBitbucket, TypeDebian, TypeGithub, TypeGolang, TypeNPM, TypeRPM, TypeComposer: return strings.ToLower(ns) } return ns @@ -350,16 +354,48 @@ func typeAdjustNamespace(purlType, ns string) string { // Make any purl type-specific adjustments to the parsed name. // See https://github.com/package-url/purl-spec#known-purl-types -func typeAdjustName(purlType, name string) string { +func typeAdjustName(purlType, name string, qualifiers Qualifiers) string { + quals := qualifiers.Map() switch purlType { - case TypeBitbucket, TypeDebian, TypeGithub, TypeGolang, TypeNPM: + case TypeBitbucket, TypeDebian, TypeGithub, TypeGolang, TypeNPM, TypeComposer: return strings.ToLower(name) case TypePyPi: return strings.ToLower(strings.ReplaceAll(name, "_", "-")) + case TypeMLFlow: + return adjustMlflowName(name, quals) } return name } +// Make any purl type-specific adjustments to the parsed version. +// See https://github.com/package-url/purl-spec#known-purl-types +func typeAdjustVersion(purlType, version string) string { + switch purlType { + case TypeHuggingface: + return strings.ToLower(version) + } + return version +} + +// https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst#mlflow +func adjustMlflowName(name string, qualifiers map[string]string) string { + if repo, ok := qualifiers["repository_url"]; ok { + if strings.Contains(repo, "azureml") { + // Azure ML is case-sensitive and must be kept as-is + return name + } else if strings.Contains(repo, "databricks") { + // Databricks is case-insensitive and must be lowercased + return strings.ToLower(name) + } else { + // Unknown repository type, keep as-is + return name + } + } else { + // No repository qualifier given, keep as-is + return name + } +} + // validQualifierKey validates a qualifierKey against our QualifierKeyPattern. func validQualifierKey(key string) bool { return QualifierKeyPattern.MatchString(key) diff --git a/vendor/modules.txt b/vendor/modules.txt index 5cb37d67b853..0d4f7f4472be 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -670,7 +670,7 @@ github.com/opencontainers/runtime-tools/validate/capabilities github.com/opencontainers/selinux/go-selinux github.com/opencontainers/selinux/go-selinux/label github.com/opencontainers/selinux/pkg/pwalkdir -# github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170 +# github.com/package-url/packageurl-go v0.1.1 ## explicit; go 1.17 github.com/package-url/packageurl-go # github.com/pelletier/go-toml v1.9.5