Skip to content

Commit

Permalink
Support annotations with attest artifact (#170)
Browse files Browse the repository at this point in the history
  • Loading branch information
tooky authored Apr 18, 2024
1 parent 092e3d8 commit 51612a6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
8 changes: 8 additions & 0 deletions cmd/kosli/attestArtifact.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type attestArtifactOptions struct {
payload AttestArtifactPayload
externalFingerprints map[string]string
externalURLs map[string]string
annotations map[string]string
}

type AttestArtifactPayload struct {
Expand All @@ -33,6 +34,7 @@ type AttestArtifactPayload struct {
Name string `json:"template_reference_name"`
TrailName string `json:"trail_name"`
ExternalURLs map[string]*URLInfo `json:"external_urls,omitempty"`
Annotations map[string]string `json:"annotations,omitempty"`
}

const attestArtifactShortDesc = `Attest an artifact creation to a Kosli flow. `
Expand Down Expand Up @@ -119,6 +121,7 @@ func newAttestArtifactCmd(out io.Writer) *cobra.Command {
cmd.Flags().StringVarP(&o.payload.TrailName, "trail", "T", "", trailNameFlag)
cmd.Flags().StringToStringVar(&o.externalFingerprints, "external-fingerprint", map[string]string{}, externalFingerprintFlag)
cmd.Flags().StringToStringVar(&o.externalURLs, "external-url", map[string]string{}, externalURLFlag)
cmd.Flags().StringToStringVar(&o.annotations, "annotate", map[string]string{}, annotationFlag)
addFingerprintFlags(cmd, o.fingerprintOptions)

addDryRunFlag(cmd)
Expand Down Expand Up @@ -149,6 +152,11 @@ func (o *attestArtifactOptions) run(args []string) error {
return err
}

o.payload.Annotations, err = proccessAnnotations(o.annotations)
if err != nil {
return err
}

if o.payload.Fingerprint == "" {
o.payload.Fingerprint, err = GetSha256Digest(args[0], o.fingerprintOptions, logger)
if err != nil {
Expand Down
11 changes: 11 additions & 0 deletions cmd/kosli/attestArtifact_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,17 @@ func (suite *AttestArtifactCommandTestSuite) TestAttestArtifactCmd() {
cmd: fmt.Sprintf("attest artifact testdata/file1 --fingerprint 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9 --name cli --commit HEAD --build-url example.com --commit-url example.com --external-url file=https://example.com --external-fingerprint file=7509e5bda0 %s", suite.defaultKosliArguments),
golden: "Error: Input payload validation failed: map[external_urls.file.fingerprint:'7509e5bda0' does not match '^[a-f0-9]{64}$']\n",
},
{
name: "can attest with annotations against a trail",
cmd: fmt.Sprintf("attest artifact testdata/file1 --fingerprint 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9 --name cli --commit HEAD --build-url example.com --commit-url example.com --annotate foo=bar --annotate baz=\"data with spaces\" %s", suite.defaultKosliArguments),
golden: "artifact testdata/file1 was attested with fingerprint: 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9\n",
},
{
wantError: true,
name: "fails when annotation is not valid",
cmd: fmt.Sprintf("attest artifact testdata/file1 --fingerprint 7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9 --name cli --commit HEAD --build-url example.com --commit-url example.com --annotate foo.baz=bar %s", suite.defaultKosliArguments),
golden: "Error: --annotate flag should be in the format key=value. Invalid key: 'foo.baz'. Key can only contain [A-Za-z0-9_].\n",
},
}

runTestCmd(suite.T(), tests)
Expand Down

0 comments on commit 51612a6

Please sign in to comment.