Fix sha issue fully

This commit is contained in:
IamTheFij 2021-09-16 14:13:45 -07:00
parent 1f8782a8f9
commit 2ad1a94f4f
2 changed files with 32 additions and 7 deletions

View File

@ -24,7 +24,8 @@ var (
maxPages = 10 maxPages = 10
// Regexp used to extract tag information // Regexp used to extract tag information
tagRegexp = regexp.MustCompile(`(.*):[vV]{0,1}([0-9.]+)(-([a-zA-Z0-9_-]*)){0,1}(@([:0-9a-z]+)){0,1}`) // The general format is "(registry/namespace/image):v(version)-(description)@(sha)"
tagRegexp = regexp.MustCompile(`([a-zA-Z0-9-_/.]+):[vV]{0,1}([0-9.]+)(-([a-zA-Z0-9_-]*)){0,1}(@([:0-9a-z]+)){0,1}`)
// version of tag checker // version of tag checker
version = "dev" version = "dev"
) )
@ -156,6 +157,7 @@ func listTags(current ImageTag) ([]ImageTag, error) {
for url != "" && pageCount <= maxPages { for url != "" && pageCount <= maxPages {
err = getJSON(url, &response) err = getJSON(url, &response)
if err != nil { if err != nil {
slog.Error("[%s] Could not get JSON response from url %s: %v", current.ImageTag, url, err)
return results, err return results, err
} }
@ -176,6 +178,7 @@ func getNewerTags(current ImageTag) ([]ImageTag, error) {
newerTags := []ImageTag{} newerTags := []ImageTag{}
tags, err := listTags(current) tags, err := listTags(current)
if err != nil { if err != nil {
slog.Error("[%s] Could not list tags: %v", current.ImageTag, err)
return newerTags, err return newerTags, err
} }
for _, tag := range tags { for _, tag := range tags {

View File

@ -21,6 +21,16 @@ func TestTagParsing(t *testing.T) {
ImageTag{}, ImageTag{},
true, true,
}, },
{
"user/image:v1",
ImageTag{
ImageTag: "user/image:v1",
Image: "user/image",
Version: "1",
VersionParts: []int{1},
},
false,
},
{ {
"image:v1", "image:v1",
ImageTag{ ImageTag{
@ -63,28 +73,40 @@ func TestTagParsing(t *testing.T) {
false, false,
}, },
{ {
"image:v1.0.0-desc@sha256:abc", "image:v1.0.0-desc@sha256:123abc",
ImageTag{ ImageTag{
ImageTag: "image:v1.0.0-desc@sha256:abc", ImageTag: "image:v1.0.0-desc@sha256:123abc",
Image: "library/image", Image: "library/image",
TagDesc: "desc", TagDesc: "desc",
TagSha: "sha256:abc", TagSha: "sha256:123abc",
Version: "1.0.0", Version: "1.0.0",
VersionParts: []int{1, 0, 0}, VersionParts: []int{1, 0, 0},
}, },
false, false,
}, },
{ {
"image:v1.0.0@sha256:abc", "image:v1.0.0@sha256:123abc",
ImageTag{ ImageTag{
ImageTag: "image:v1.0.0@sha256:abc", ImageTag: "image:v1.0.0@sha256:123abc",
Image: "library/image", Image: "library/image",
TagSha: "sha256:abc", TagSha: "sha256:123abc",
Version: "1.0.0", Version: "1.0.0",
VersionParts: []int{1, 0, 0}, VersionParts: []int{1, 0, 0},
}, },
false, false,
}, },
// Real world example that had caused issues
{
"matrixdotorg/synapse:v1.41.0@sha256:75f2b3c35c047693f4f4334d4ceb97951de1ba12bd3c6182c8a2ee624d7c5ab7",
ImageTag{
ImageTag: "matrixdotorg/synapse:v1.41.0@sha256:75f2b3c35c047693f4f4334d4ceb97951de1ba12bd3c6182c8a2ee624d7c5ab7",
Image: "matrixdotorg/synapse",
TagSha: "sha256:75f2b3c35c047693f4f4334d4ceb97951de1ba12bd3c6182c8a2ee624d7c5ab7",
Version: "1.41.0",
VersionParts: []int{1, 41, 0},
},
false,
},
} }
for _, c := range cases { for _, c := range cases {