Skip to content

Commit edf2974

Browse files
committed
Started on kosli fingerprint oci command
1 parent af4d109 commit edf2974

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

cmd/kosli/cli_utils.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ func getDockerRegistryAPIToken(providerInfo *registryProviderEndpoints, username
382382
}
383383

384384
if err != nil {
385-
return "", fmt.Errorf("failed to create an authentication token for the docker registry: %v", err)
385+
return "", fmt.Errorf("failed to create an authentication token for the docker registry: %v %v", err, res)
386386
}
387387

388388
var responseData map[string]interface{}
@@ -407,6 +407,8 @@ func GetSha256Digest(artifactName string, o *fingerprintOptions, logger *log.Log
407407
fingerprint, err = digest.FileSha256(artifactName)
408408
case "dir":
409409
fingerprint, err = digest.DirSha256(artifactName, o.excludePaths, logger)
410+
case "oci":
411+
fingerprint, err = digest.OciSha256(artifactName, o.registryUsername, o.registryPassword)
410412
case "docker":
411413
if o.registryProvider != "" {
412414
var providerInfo *registryProviderEndpoints

cmd/kosli/fingerprint.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package main
22

3-
import (
4-
"io"
5-
6-
"github.com/spf13/cobra"
7-
)
3+
import "github.com/spf13/cobra"
84

95
const fingerprintShortDesc = `Calculate the SHA256 fingerprint of an artifact.`
106

@@ -40,6 +36,10 @@ kosli fingerprint --artifact-type dir --exclude logs --exclude *.exe mydir
4036
kosli fingerprint --artifact-type docker nginx:latest
4137
`
4238

39+
//# fingerprint a container image from a remote registry
40+
//kosli fingerprint --artifact-type oci nginx:latest \
41+
// --SOME-AUTHENTICATION
42+
4343
type fingerprintOptions struct {
4444
artifactType string
4545
registryProvider string

internal/digest/digest.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import (
2020
"github.com/kosli-dev/cli/internal/requests"
2121
"github.com/kosli-dev/cli/internal/utils"
2222
"github.com/yargevad/filepathx"
23+
24+
"github.com/containers/image/v5/docker"
25+
containerImageTypes "github.com/containers/image/v5/types"
2326
)
2427

2528
var (
@@ -67,6 +70,30 @@ func DirSha256(dirPath string, excludePaths []string, logger *logger.Logger) (st
6770
return FileSha256(digestsFile.Name())
6871
}
6972

73+
func OciSha256(artifactName string, registryUsername string, registryPassword string) (string, error) {
74+
imageName := fmt.Sprintf("//%s", artifactName)
75+
ctx := context.Background()
76+
sysCtx := &containerImageTypes.SystemContext{
77+
DockerAuthConfig: &containerImageTypes.DockerAuthConfig{
78+
Username: registryUsername,
79+
Password: registryPassword,
80+
},
81+
}
82+
83+
// Parse image reference
84+
ref, err := docker.ParseReference(imageName)
85+
if err != nil {
86+
return "", err
87+
}
88+
89+
// Compute digest
90+
digest, err := docker.GetDigest(ctx, sysCtx, ref)
91+
if err != nil {
92+
return "", fmt.Errorf("failed to get digest for %s: %w", imageName, err)
93+
}
94+
return strings.Split(digest.String(), "sha256:")[1], nil
95+
}
96+
7097
// calculateDirContentSha256 calculates a sha256 digest for a directory content
7198
func calculateDirContentSha256(digestsFile *os.File, dirPath, tmpDir string, excludePaths []string, logger *logger.Logger) error {
7299
pathsToExclude := []string{}

internal/requests/requests.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ func (c *Client) Do(p *RequestParams) (*HTTPResponse, error) {
249249
cleanedErrorMessage = fmt.Sprintf("%s", respBodyMap)
250250
}
251251
}
252+
fmt.Printf("RESPONSE %v", resp)
252253
return nil, fmt.Errorf("%s", cleanedErrorMessage)
253254
}
254255
return &HTTPResponse{string(body), resp}, nil

0 commit comments

Comments
 (0)