@@ -26,14 +26,16 @@ import (
2626 "sort"
2727 "strings"
2828
29- "github.com/atomist-skills/go-skill"
30- "github.com/docker/index-cli-plugin/types"
3129 v1 "github.com/google/go-containerregistry/pkg/v1"
3230 "github.com/hasura/go-graphql-client"
3331 "github.com/opencontainers/go-digest"
3432 "github.com/opencontainers/image-spec/identity"
3533 "github.com/pkg/errors"
3634 "olympos.io/encoding/edn"
35+
36+ "github.com/atomist-skills/go-skill"
37+
38+ "github.com/docker/index-cli-plugin/types"
3739)
3840
3941type ImageQueryResult struct {
@@ -99,6 +101,7 @@ func ForBaseImageInIndex(digest digest.Digest, workspace string, apiKey string)
99101
100102 if resp .StatusCode == 200 {
101103 var manifestList []types.IndexManifestList
104+ defer resp .Body .Close () //nolint:errcheck
102105 body , err := io .ReadAll (resp .Body )
103106 if err != nil {
104107 return nil , errors .Wrapf (err , "failed to read response body" )
@@ -116,7 +119,7 @@ func ForBaseImageInIndex(digest digest.Digest, workspace string, apiKey string)
116119 }
117120 repository , err := ForRepositoryInDb (manifestList [0 ].Name , workspace , apiKey )
118121 if err != nil {
119- return nil , errors .Wrapf (err , "failed to query for respository " )
122+ return nil , errors .Wrapf (err , "failed to query for repository " )
120123 }
121124 image := types.Image {
122125 Digest : ii .Digest ,
@@ -136,8 +139,12 @@ func ForBaseImageInIndex(digest digest.Digest, workspace string, apiKey string)
136139func ForBaseImageWithoutCve (cve string , name string , sb * types.Sbom , workspace string , apiKey string ) (* []types.Image , error ) {
137140 cf := (* sb ).Source .Image .Config
138141 resp , err := query (fmt .Sprintf (baseImageCveQuery , cve , name , cf .OS , cf .Architecture , cf .Variant ), "base_image_cve_query" , workspace , apiKey )
142+ if err != nil {
143+ return nil , errors .Wrapf (err , "failed to query for base image without CVE" )
144+ }
139145
140146 var result ImageQueryResult
147+ defer resp .Body .Close () //nolint:errcheck
141148 err = edn .NewDecoder (resp .Body ).Decode (& result )
142149 if err != nil {
143150 return nil , errors .Wrapf (err , "failed to unmarshal response" )
@@ -174,8 +181,12 @@ func ForBaseImageWithoutCve(cve string, name string, sb *types.Sbom, workspace s
174181// ForBaseImageInDb returns images with matching digest in :docker.image/blob-digest or :docker.image/diff-chain-id
175182func ForBaseImageInDb (digest digest.Digest , workspace string , apiKey string ) (* []types.Image , error ) {
176183 resp , err := query (fmt .Sprintf (baseImageQuery , digest ), "base_image_query" , workspace , apiKey )
184+ if err != nil {
185+ return nil , errors .Wrapf (err , "failed to query for base image in DB" )
186+ }
177187
178188 var result ImageQueryResult
189+ defer resp .Body .Close () //nolint:errcheck
179190 err = edn .NewDecoder (resp .Body ).Decode (& result )
180191 if err != nil {
181192 return nil , errors .Wrapf (err , "failed to unmarshal response" )
@@ -204,8 +215,12 @@ func ForBaseImageInDb(digest digest.Digest, workspace string, apiKey string) (*[
204215
205216func ForRepositoryInDb (repo string , workspace string , apiKey string ) (* types.Repository , error ) {
206217 resp , err := query (fmt .Sprintf (repositoryQuery , repo ), "repository_query" , workspace , apiKey )
218+ if err != nil {
219+ return nil , errors .Wrapf (err , "failed to query for repository in DB" )
220+ }
207221
208222 var result RepositoryQueryResult
223+ defer resp .Body .Close () //nolint:errcheck
209224 err = edn .NewDecoder (resp .Body ).Decode (& result )
210225 if err != nil {
211226 return nil , errors .Wrapf (err , "failed to unmarshal response" )
@@ -236,12 +251,11 @@ func ForBaseImageInGraphQL(cfg *v1.ConfigFile) (*types.BaseImagesByDiffIdsQuery,
236251 var q types.BaseImagesByDiffIdsQuery
237252 err := client .Query (context .Background (), & q , variables )
238253 if err != nil {
239- fmt .Sprintf ("error %v" , err )
240254 return nil , errors .Wrapf (err , "failed to run query" )
241255 }
242256 count := 0
243- for ii , _ := range q .ImagesByDiffIds {
244- for bi , _ := range q .ImagesByDiffIds [ii ].Images {
257+ for ii := range q .ImagesByDiffIds {
258+ for bi := range q .ImagesByDiffIds [ii ].Images {
245259 count ++
246260 q .ImagesByDiffIds [ii ].Images [bi ].Repository = normalizeRepository (& q .ImagesByDiffIds [ii ].Images [bi ]).Repository
247261 }
@@ -271,7 +285,6 @@ func ForImageInGraphQL(sb *types.Sbom) (*types.ImageByDigestQuery, error) {
271285 var q types.ImageByDigestQuery
272286 err := client .Query (context .Background (), & q , variables )
273287 if err != nil {
274- fmt .Sprintf ("error %v" , err )
275288 return nil , errors .Wrapf (err , "failed to run query" )
276289 }
277290 if q .ImageDetailsByDigest .Digest != "" {
@@ -282,7 +295,7 @@ func ForImageInGraphQL(sb *types.Sbom) (*types.ImageByDigestQuery, error) {
282295}
283296
284297func normalizeRepository (image * types.BaseImage ) * types.BaseImage {
285- if image .Repository .Host == "hub.docker.com" && strings .Index (image .Repository .Repo , "/" ) < 0 {
298+ if image .Repository .Host == "hub.docker.com" && strings .Contains (image .Repository .Repo , "/" ) {
286299 image .Repository .Badge = "OFFICIAL"
287300 }
288301 if image .Repository .Badge != "" {
0 commit comments