Skip to content

Commit e8fd65d

Browse files
committed
error handling
1 parent e995008 commit e8fd65d

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

main.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ import (
1717
)
1818

1919
var (
20-
baseImage, image string
20+
baseImage, image string
2121
baseImageRegistryUsername, baseImageRegistryPassword string
22-
imageRegistryUsername, imageRegistryPassword string
22+
imageRegistryUsername, imageRegistryPassword string
2323
)
24+
2425
func init() {
2526
flag.StringVar(&baseImage, "base-image", "", "Base Image")
2627
flag.StringVar(&image, "image", "", "Image")
@@ -33,19 +34,28 @@ func init() {
3334

3435
func main() {
3536
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
3749
}
38-
baseLayers := parseImage(baseImage, baseImageRegistryUsername, baseImageRegistryPassword)
39-
imageLayers := parseImage(image, imageRegistryUsername, imageRegistryPassword)
4050
for _, imageLayer := range imageLayers {
4151
found := false
4252
for _, baseLayer := range baseLayers {
4353
found = subset(baseLayer, imageLayer)
44-
if found{
54+
if found {
4555
break
4656
}
4757
}
48-
if ! found {
58+
if !found {
4959
fmt.Println("::set-output name=needs-update::true")
5060
return
5161
}
@@ -65,7 +75,7 @@ func subset(a, b []digest.Digest) bool {
6575
return true
6676
}
6777

68-
func parseImage(name, username, password string) (digests [][]digest.Digest){
78+
func parseImage(name, username, password string) (digests [][]digest.Digest, err error) {
6979
resolver := util.NewResolver(username, password, false,
7080
false)
7181
memoryStore := store.NewMemoryStore()
@@ -75,7 +85,7 @@ func parseImage(name, username, password string) (digests [][]digest.Digest){
7585
}
7686
descriptor, err := registry.FetchDescriptor(resolver, memoryStore, imageRef)
7787
if err != nil {
78-
logrus.Error(err)
88+
return nil, err
7989
}
8090

8191
_, db, _ := memoryStore.Get(descriptor)
@@ -84,26 +94,26 @@ func parseImage(name, username, password string) (digests [][]digest.Digest){
8494
// this is a multi-platform image descriptor; marshal to Index type
8595
var idx ocispec.Index
8696
if err := json.Unmarshal(db, &idx); err != nil {
87-
logrus.Fatal(err)
97+
return nil, err
8898
}
8999
digests, err = parseList(memoryStore, idx)
90100
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)
92102
}
93103
case ocispec.MediaTypeImageManifest, types.MediaTypeDockerSchema2Manifest:
94104
var man ocispec.Manifest
95105
if err := json.Unmarshal(db, &man); err != nil {
96-
logrus.Fatal(err)
106+
return nil, err
97107
}
98108
_, cb, _ := memoryStore.Get(man.Config)
99109
var conf ocispec.Image
100110
if err := json.Unmarshal(cb, &conf); err != nil {
101-
logrus.Fatal(err)
111+
return nil, err
102112
}
103113
dig := getDigests(man.Layers)
104114
digests = append(digests, dig)
105115
default:
106-
logrus.Errorf("Unknown descriptor type: %s", descriptor.MediaType)
116+
return nil, fmt.Errorf("unknown descriptor type: %s", descriptor.MediaType)
107117
}
108118
return
109119
}
@@ -132,4 +142,4 @@ func getDigests(layers []ocispec.Descriptor) (digests []digest.Digest) {
132142
digests = append(digests, layer.Digest)
133143
}
134144
return
135-
}
145+
}

0 commit comments

Comments
 (0)