From ab57d1e236ec3c4a6ae00c7ac76dc68142f47ba6 Mon Sep 17 00:00:00 2001 From: Stef Graces Date: Mon, 14 Apr 2025 09:03:25 +0200 Subject: [PATCH] Add ignoreValidation option for ParseReference --- pkg/name/options.go | 16 ++++++++++++---- pkg/name/registry.go | 6 ++++-- pkg/name/repository.go | 6 ++++-- pkg/name/tag.go | 8 +++++--- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/pkg/name/options.go b/pkg/name/options.go index d14fedcda..8047506e5 100644 --- a/pkg/name/options.go +++ b/pkg/name/options.go @@ -26,10 +26,11 @@ const ( ) type options struct { - strict bool // weak by default - insecure bool // secure by default - defaultRegistry string - defaultTag string + strict bool // weak by default + insecure bool // secure by default + ignoreValidation bool // validation by default + defaultRegistry string + defaultTag string } func makeOptions(opts ...Option) options { @@ -59,6 +60,13 @@ func WeakValidation(opts *options) { opts.strict = false } +// IgnoreValidation is an Option that does not require image references to be +// valid. This is useful for testing purposes, but should not be used in +// production code. +func IgnoreValidation(opts *options) { + opts.ignoreValidation = true +} + // Insecure is an Option that allows image references to be fetched without TLS. func Insecure(opts *options) { opts.insecure = true diff --git a/pkg/name/registry.go b/pkg/name/registry.go index 5b0d01769..4f2036ef6 100644 --- a/pkg/name/registry.go +++ b/pkg/name/registry.go @@ -117,8 +117,10 @@ func NewRegistry(name string, opts ...Option) (Registry, error) { return Registry{}, newErrBadName("strict validation requires the registry to be explicitly defined") } - if err := checkRegistry(name); err != nil { - return Registry{}, err + if !opt.ignoreValidation { + if err := checkRegistry(name); err != nil { + return Registry{}, err + } } if name == "" { diff --git a/pkg/name/repository.go b/pkg/name/repository.go index 9250e3625..7e801d3de 100644 --- a/pkg/name/repository.go +++ b/pkg/name/repository.go @@ -86,8 +86,10 @@ func NewRepository(name string, opts ...Option) (Repository, error) { repo = parts[1] } - if err := checkRepository(repo); err != nil { - return Repository{}, err + if !opt.ignoreValidation { + if err := checkRepository(repo); err != nil { + return Repository{}, err + } } reg, err := NewRegistry(registry, opts...) diff --git a/pkg/name/tag.go b/pkg/name/tag.go index 66bd1bec3..c389f4e1b 100644 --- a/pkg/name/tag.go +++ b/pkg/name/tag.go @@ -86,9 +86,11 @@ func NewTag(name string, opts ...Option) (Tag, error) { // even when not being strict. // If we are being strict, we want to validate the tag regardless in case // it's empty. - if tag != "" || opt.strict { - if err := checkTag(tag); err != nil { - return Tag{}, err + if !opt.ignoreValidation { + if tag != "" || opt.strict { + if err := checkTag(tag); err != nil { + return Tag{}, err + } } }