...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package match
17
18 import (
19 v1 "github.com/google/go-containerregistry/pkg/v1"
20 imagespec "github.com/opencontainers/image-spec/specs-go/v1"
21 )
22
23
24
25 type Matcher func(desc v1.Descriptor) bool
26
27
28
29
30
31
32 func Name(name string) Matcher {
33 return Annotation(imagespec.AnnotationRefName, name)
34 }
35
36
37 func Annotation(key, value string) Matcher {
38 return func(desc v1.Descriptor) bool {
39 if desc.Annotations == nil {
40 return false
41 }
42 if aValue, ok := desc.Annotations[key]; ok && aValue == value {
43 return true
44 }
45 return false
46 }
47 }
48
49
50
51 func Platforms(platforms ...v1.Platform) Matcher {
52 return func(desc v1.Descriptor) bool {
53 if desc.Platform == nil {
54 return false
55 }
56 for _, platform := range platforms {
57 if desc.Platform.Equals(platform) {
58 return true
59 }
60 }
61 return false
62 }
63 }
64
65
66 func MediaTypes(mediaTypes ...string) Matcher {
67 mts := map[string]bool{}
68 for _, media := range mediaTypes {
69 mts[media] = true
70 }
71 return func(desc v1.Descriptor) bool {
72 if desc.MediaType == "" {
73 return false
74 }
75 if _, ok := mts[string(desc.MediaType)]; ok {
76 return true
77 }
78 return false
79 }
80 }
81
82
83 func Digests(digests ...v1.Hash) Matcher {
84 digs := map[v1.Hash]bool{}
85 for _, digest := range digests {
86 digs[digest] = true
87 }
88 return func(desc v1.Descriptor) bool {
89 _, ok := digs[desc.Digest]
90 return ok
91 }
92 }
93
View as plain text