@@ -17,10 +17,11 @@ import (
17
17
)
18
18
19
19
var (
20
- baseImage , image string
20
+ baseImage , image string
21
21
baseImageRegistryUsername , baseImageRegistryPassword string
22
- imageRegistryUsername , imageRegistryPassword string
22
+ imageRegistryUsername , imageRegistryPassword string
23
23
)
24
+
24
25
func init () {
25
26
flag .StringVar (& baseImage , "base-image" , "" , "Base Image" )
26
27
flag .StringVar (& image , "image" , "" , "Image" )
@@ -33,19 +34,28 @@ func init() {
33
34
34
35
func main () {
35
36
if baseImage == "" || image == "" {
36
- logrus .Fatal ("baseImage and image should be set" )
37
+ fmt .Println ("::error ::baseImage and image should be set" )
38
+ return
39
+ }
40
+ baseLayers , err := parseImage (baseImage , baseImageRegistryUsername , baseImageRegistryPassword )
41
+ if err != nil {
42
+ fmt .Printf ("::error ::failed to get layers for the base image, err: %v\n " , err )
43
+ return
44
+ }
45
+ imageLayers , err := parseImage (image , imageRegistryUsername , imageRegistryPassword )
46
+ if err != nil {
47
+ fmt .Printf ("::error ::failed to get layers for the image, err: %v\n " , err )
48
+ return
37
49
}
38
- baseLayers := parseImage (baseImage , baseImageRegistryUsername , baseImageRegistryPassword )
39
- imageLayers := parseImage (image , imageRegistryUsername , imageRegistryPassword )
40
50
for _ , imageLayer := range imageLayers {
41
51
found := false
42
52
for _ , baseLayer := range baseLayers {
43
53
found = subset (baseLayer , imageLayer )
44
- if found {
54
+ if found {
45
55
break
46
56
}
47
57
}
48
- if ! found {
58
+ if ! found {
49
59
fmt .Println ("::set-output name=needs-update::true" )
50
60
return
51
61
}
@@ -65,7 +75,7 @@ func subset(a, b []digest.Digest) bool {
65
75
return true
66
76
}
67
77
68
- func parseImage (name , username , password string ) (digests [][]digest.Digest ) {
78
+ func parseImage (name , username , password string ) (digests [][]digest.Digest , err error ) {
69
79
resolver := util .NewResolver (username , password , false ,
70
80
false )
71
81
memoryStore := store .NewMemoryStore ()
@@ -75,7 +85,7 @@ func parseImage(name, username, password string) (digests [][]digest.Digest){
75
85
}
76
86
descriptor , err := registry .FetchDescriptor (resolver , memoryStore , imageRef )
77
87
if err != nil {
78
- logrus . Error ( err )
88
+ return nil , err
79
89
}
80
90
81
91
_ , db , _ := memoryStore .Get (descriptor )
@@ -84,26 +94,26 @@ func parseImage(name, username, password string) (digests [][]digest.Digest){
84
94
// this is a multi-platform image descriptor; marshal to Index type
85
95
var idx ocispec.Index
86
96
if err := json .Unmarshal (db , & idx ); err != nil {
87
- logrus . Fatal ( err )
97
+ return nil , err
88
98
}
89
99
digests , err = parseList (memoryStore , idx )
90
100
if err != nil {
91
- logrus . Fatal ("failed to parse the manifest list" )
101
+ return nil , fmt . Errorf ("failed to parse the manifest list: %w" , err )
92
102
}
93
103
case ocispec .MediaTypeImageManifest , types .MediaTypeDockerSchema2Manifest :
94
104
var man ocispec.Manifest
95
105
if err := json .Unmarshal (db , & man ); err != nil {
96
- logrus . Fatal ( err )
106
+ return nil , err
97
107
}
98
108
_ , cb , _ := memoryStore .Get (man .Config )
99
109
var conf ocispec.Image
100
110
if err := json .Unmarshal (cb , & conf ); err != nil {
101
- logrus . Fatal ( err )
111
+ return nil , err
102
112
}
103
113
dig := getDigests (man .Layers )
104
114
digests = append (digests , dig )
105
115
default :
106
- logrus .Errorf ("Unknown descriptor type: %s" , descriptor .MediaType )
116
+ return nil , fmt .Errorf ("unknown descriptor type: %s" , descriptor .MediaType )
107
117
}
108
118
return
109
119
}
@@ -132,4 +142,4 @@ func getDigests(layers []ocispec.Descriptor) (digests []digest.Digest) {
132
142
digests = append (digests , layer .Digest )
133
143
}
134
144
return
135
- }
145
+ }
0 commit comments