Skip to content

Commit

Permalink
Use marshalled data for params in invocation
Browse files Browse the repository at this point in the history
This is needed to take into account the two parameter types allowed by
Tekton Pipelines, string and array of strings.

Signed-off-by: Luiz Carvalho <lucarval@redhat.com>
  • Loading branch information
lcarva authored and HACBS EC Robot committed May 20, 2022
1 parent e27ba3a commit 0a22dda
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 33 deletions.
8 changes: 4 additions & 4 deletions pkg/chains/formats/intotoite6/intotoite6_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ func TestCreatePayload1(t *testing.T) {
},
Invocation: slsa.ProvenanceInvocation{
Parameters: map[string]string{
"IMAGE": "test.io/test/image",
"CHAINS-GIT_COMMIT": "abcd",
"CHAINS-GIT_URL": "https://git.test.com",
"filename": "/bin/ls",
"IMAGE": `"test.io/test/image"`,
"CHAINS-GIT_COMMIT": `"abcd"`,
"CHAINS-GIT_URL": `"https://git.test.com"`,
"filename": `"/bin/ls"`,
},
},
Builder: slsa.ProvenanceBuilder{
Expand Down
12 changes: 6 additions & 6 deletions pkg/chains/formats/intotoite6/pipelinerun/pipelinerun.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,24 +46,24 @@ func GenerateAttestation(builderID string, pr *v1beta1.PipelineRun, logger *zap.
ID: builderID,
},
BuildType: util.TektonPipelineRunID,
Invocation: invocation(pr),
BuildConfig: buildConfig(pr),
Invocation: invocation(pr, logger),
BuildConfig: buildConfig(pr, logger),
Metadata: metadata(pr),
Materials: materials(pr),
},
}
return att, nil
}

func invocation(pr *v1beta1.PipelineRun) slsa.ProvenanceInvocation {
func invocation(pr *v1beta1.PipelineRun, logger *zap.SugaredLogger) slsa.ProvenanceInvocation {
var paramSpecs []v1beta1.ParamSpec
if ps := pr.Status.PipelineSpec; ps != nil {
paramSpecs = ps.Params
}
return util.AttestInvocation(pr.Spec.Params, paramSpecs)
return util.AttestInvocation(pr.Spec.Params, paramSpecs, logger)
}

func buildConfig(pr *v1beta1.PipelineRun) BuildConfig {
func buildConfig(pr *v1beta1.PipelineRun, logger *zap.SugaredLogger) BuildConfig {
tasks := []TaskAttestation{}

// pipelineRun.status.taskRuns doesn't maintain order,
Expand Down Expand Up @@ -104,7 +104,7 @@ func buildConfig(pr *v1beta1.PipelineRun) BuildConfig {
FinishedOn: trStatus.Status.CompletionTime.Time,
Status: getStatus(trStatus.Status.Conditions),
Steps: steps,
Invocation: util.AttestInvocation(params, paramSpecs),
Invocation: util.AttestInvocation(params, paramSpecs, logger),
}

tasks = append(tasks, task)
Expand Down
6 changes: 3 additions & 3 deletions pkg/chains/formats/intotoite6/taskrun/provenance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,12 +206,12 @@ spec:

expected := slsa.ProvenanceInvocation{
Parameters: map[string]string{
"my-param": "string-param",
"my-array-param": "[my array]",
"my-param": `"string-param"`,
"my-array-param": `["my","array"]`,
},
}

got := invocation(taskRun)
got := invocation(taskRun, logtesting.TestLogger(t))
if !reflect.DeepEqual(expected, got) {
if d := cmp.Diff(expected, got); d != "" {
t.Log(d)
Expand Down
6 changes: 3 additions & 3 deletions pkg/chains/formats/intotoite6/taskrun/taskrun.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func GenerateAttestation(builderID string, tr *v1beta1.TaskRun, logger *zap.Suga
ID: builderID,
},
BuildType: util.TektonID,
Invocation: invocation(tr),
Invocation: invocation(tr, logger),
BuildConfig: buildConfig(tr),
Metadata: metadata(tr),
Materials: materials(tr),
Expand All @@ -37,12 +37,12 @@ func GenerateAttestation(builderID string, tr *v1beta1.TaskRun, logger *zap.Suga
// invocation describes the event that kicked off the build
// we currently don't set ConfigSource because we don't know
// which material the Task definition came from
func invocation(tr *v1beta1.TaskRun) slsa.ProvenanceInvocation {
func invocation(tr *v1beta1.TaskRun, logger *zap.SugaredLogger) slsa.ProvenanceInvocation {
var paramSpecs []v1beta1.ParamSpec
if ts := tr.Status.TaskSpec; ts != nil {
paramSpecs = ts.Params
}
return util.AttestInvocation(tr.Spec.Params, paramSpecs)
return util.AttestInvocation(tr.Spec.Params, paramSpecs, logger)
}

func metadata(tr *v1beta1.TaskRun) *slsa.ProvenanceMetadata {
Expand Down
28 changes: 11 additions & 17 deletions pkg/chains/formats/intotoite6/util/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,36 +120,30 @@ func AttestStep(step *v1beta1.Step, stepState *v1beta1.StepState) StepAttestatio
return attestation
}

func AttestInvocation(params []v1beta1.Param, paramSpecs []v1beta1.ParamSpec) slsa.ProvenanceInvocation {
func AttestInvocation(params []v1beta1.Param, paramSpecs []v1beta1.ParamSpec, logger *zap.SugaredLogger) slsa.ProvenanceInvocation {
i := slsa.ProvenanceInvocation{}
iParams := make(map[string]string)

// get implicit parameters from defaults
for _, p := range paramSpecs {
if p.Default != nil {
// TODO: Consider using p.Default.MarshalJSON()
var v string
switch p.Default.Type {
case v1beta1.ParamTypeString:
v = p.Default.StringVal
case v1beta1.ParamTypeArray:
v = fmt.Sprintf("%v", p.Default.ArrayVal)
v, err := p.Default.MarshalJSON()
if err != nil {
logger.Errorf("Unable to marshall %q default parameter: %s", p, err)
continue
}
iParams[p.Name] = v
iParams[p.Name] = string(v)
}
}

// get explicit parameters
for _, p := range params {
// TODO: Consider using p.Value.MarshalJSON()
var v string
switch p.Value.Type {
case v1beta1.ParamTypeString:
v = p.Value.StringVal
case v1beta1.ParamTypeArray:
v = fmt.Sprintf("%v", p.Value.ArrayVal)
v, err := p.Value.MarshalJSON()
if err != nil {
logger.Errorf("Unable to marshall %q parameter: %s", p, err)
continue
}
iParams[p.Name] = v
iParams[p.Name] = string(v)
}

i.Parameters = iParams
Expand Down

0 comments on commit 0a22dda

Please sign in to comment.