From d7e8ea8492bd5e0b7d0364694ecd01eced507980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 20 Jun 2025 09:08:03 +0300 Subject: [PATCH 1/3] refactor: use any instead of interface{} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ville Skyttä --- verifiers/internal/gcb/provenance.go | 6 +- .../gcb/slsaprovenance/iface/provenance.go | 2 +- .../gcb/slsaprovenance/v0.1/provenance.go | 12 +-- .../gcb/slsaprovenance/v1.0/provenance.go | 8 +- .../internal/gha/provenance_forgeable.go | 2 +- .../internal/gha/provenance_forgeable_test.go | 76 +++++++++---------- verifiers/internal/gha/provenance_test.go | 2 +- .../gha/slsaprovenance/common/common.go | 4 +- .../gha/slsaprovenance/iface/provenance.go | 2 +- .../internal/gha/slsaprovenance/v0.2/base.go | 10 +-- .../internal/gha/slsaprovenance/v0.2/byob.go | 2 +- .../gha/slsaprovenance/v0.2/byob_test.go | 14 ++-- .../internal/gha/slsaprovenance/v1.0/base.go | 18 ++--- .../gha/slsaprovenance/v1.0/base_test.go | 26 +++---- .../internal/gha/slsaprovenance/v1.0/byob.go | 2 +- .../gha/slsaprovenance/v1.0/byob_test.go | 10 +-- .../gha/slsaprovenance/v1.0/github_attest.go | 2 +- .../v1.0/npmcli_github_actions.go | 2 +- .../v1.0/npmcli_github_actions_test.go | 18 ++--- 19 files changed, 109 insertions(+), 109 deletions(-) diff --git a/verifiers/internal/gcb/provenance.go b/verifiers/internal/gcb/provenance.go index 964b40652..6b828c6c9 100644 --- a/verifiers/internal/gcb/provenance.go +++ b/verifiers/internal/gcb/provenance.go @@ -149,7 +149,7 @@ func (p *Provenance) VerifyTextProvenance() error { return err } - var unverifiedTextIntotoStatement interface{} + var unverifiedTextIntotoStatement any switch predicateType { case v10.PredicateSLSAProvenance: unverifiedTextIntotoStatement = &v10.Provenance{ @@ -329,7 +329,7 @@ func (p *Provenance) VerifyBuilder(builderOpts *options.BuilderOpts) (*utils.Tru return nil, fmt.Errorf("%w: expected %q, got %q", serrors.ErrorInvalidFormat, v01.PredicateSLSAProvenance, predicateType) } expectedType := "type.googleapis.com/google.devtools.cloudbuild.v1.Build" - args, ok := v.Recipe.Arguments.(map[string]interface{}) + args, ok := v.Recipe.Arguments.(map[string]any) if !ok { return nil, fmt.Errorf("%w: recipe arguments is not a map", serrors.ErrorInvalidDssePayload) } @@ -348,7 +348,7 @@ func (p *Provenance) VerifyBuilder(builderOpts *options.BuilderOpts) (*utils.Tru return provBuilderID, nil } -func getAsString(m map[string]interface{}, key string) (string, error) { +func getAsString(m map[string]any, key string) (string, error) { t, ok := m["@type"] if !ok { return "", fmt.Errorf("%w: '%s' field is absent", serrors.ErrorInvalidDssePayload, key) diff --git a/verifiers/internal/gcb/slsaprovenance/iface/provenance.go b/verifiers/internal/gcb/slsaprovenance/iface/provenance.go index bae4429be..d7621e173 100644 --- a/verifiers/internal/gcb/slsaprovenance/iface/provenance.go +++ b/verifiers/internal/gcb/slsaprovenance/iface/provenance.go @@ -7,7 +7,7 @@ import ( // Provenance represents provenance for a predicate type and build type. type Provenance interface { // Predicate returns the predicate. - Predicate() (interface{}, error) + Predicate() (any, error) // PredicateType returns the predicate type. PredicateType() (string, error) diff --git a/verifiers/internal/gcb/slsaprovenance/v0.1/provenance.go b/verifiers/internal/gcb/slsaprovenance/v0.1/provenance.go index b82f139b6..4fc082c59 100644 --- a/verifiers/internal/gcb/slsaprovenance/v0.1/provenance.go +++ b/verifiers/internal/gcb/slsaprovenance/v0.1/provenance.go @@ -57,9 +57,9 @@ type ProvenanceRecipe struct { // DefinedInMaterial can be sent as the null pointer to indicate that // the value is not present. // DefinedInMaterial *int `json:"definedInMaterial,omitempty"` - EntryPoint string `json:"entryPoint"` - Arguments interface{} `json:"arguments,omitempty"` - Environment interface{} `json:"environment,omitempty"` + EntryPoint string `json:"entryPoint"` + Arguments any `json:"arguments,omitempty"` + Environment any `json:"environment,omitempty"` } // ProvenanceMetadata contains metadata for the built artifact. @@ -145,7 +145,7 @@ func (p *Provenance) SourceBranch() (string, error) { return "", fmt.Errorf("%w: branch verification", serrors.ErrorNotSupported) } -func (p *Provenance) Predicate() (interface{}, error) { +func (p *Provenance) Predicate() (any, error) { return p.Pred, nil } @@ -170,7 +170,7 @@ func (p *Provenance) BuildType() (string, error) { // BuildType implements Statement.GetSystemParameters. func (p *Provenance) GetSystemParameters() (map[string]any, error) { arguments := p.Pred.Recipe.Arguments - argsMap, ok := arguments.(map[string]interface{}) + argsMap, ok := arguments.(map[string]any) if !ok { return nil, fmt.Errorf("%w: cannot cast arguments as map", common.ErrSubstitution) } @@ -180,7 +180,7 @@ func (p *Provenance) GetSystemParameters() (map[string]any, error) { return nil, fmt.Errorf("%w: no 'substitutions' field", common.ErrSubstitution) } - m, ok := substitutions.(map[string]interface{}) + m, ok := substitutions.(map[string]any) if !ok { return nil, fmt.Errorf("%w: cannot convert substitutions to a map", common.ErrSubstitution) } diff --git a/verifiers/internal/gcb/slsaprovenance/v1.0/provenance.go b/verifiers/internal/gcb/slsaprovenance/v1.0/provenance.go index 52c81a9e9..7e434ea4b 100644 --- a/verifiers/internal/gcb/slsaprovenance/v1.0/provenance.go +++ b/verifiers/internal/gcb/slsaprovenance/v1.0/provenance.go @@ -58,7 +58,7 @@ func New(payload []byte) (iface.Provenance, error) { return &provenance, nil } -func (p *Provenance) Predicate() (interface{}, error) { +func (p *Provenance) Predicate() (any, error) { return p.Pred, nil } @@ -82,7 +82,7 @@ func (p *Provenance) BuildType() (string, error) { // GetSystemParameters implements Provenance.GetSystemParameters. func (p *Provenance) GetSystemParameters() (map[string]any, error) { - sysParams, ok := p.Pred.BuildDefinition.InternalParameters.(map[string]interface{}) + sysParams, ok := p.Pred.BuildDefinition.InternalParameters.(map[string]any) if !ok { return nil, fmt.Errorf("%w: system parameters type", serrors.ErrorInvalidDssePayload) } @@ -122,7 +122,7 @@ func getSubstitutionsField(sysParams map[string]any, name string) (string, error if !ok { return "", fmt.Errorf("%w: substitution entry %q not found", common.ErrSubstitution, "systemSubstitutions") } - substitutionsMap, ok := substitutions.(map[string]interface{}) + substitutionsMap, ok := substitutions.(map[string]any) if !ok { return "", fmt.Errorf("%w: no entry '%v' in substitution map", common.ErrSubstitution, "systemSubstitutions") } @@ -145,7 +145,7 @@ func (p *Provenance) SourceBranch() (string, error) { } func (p *Provenance) externalParameters() (map[string]any, error) { - extParams, ok := p.Pred.BuildDefinition.ExternalParameters.(map[string]interface{}) + extParams, ok := p.Pred.BuildDefinition.ExternalParameters.(map[string]any) if !ok { return nil, fmt.Errorf("%w: system parameters type", serrors.ErrorInvalidDssePayload) } diff --git a/verifiers/internal/gha/provenance_forgeable.go b/verifiers/internal/gha/provenance_forgeable.go index 79043aeea..3d2784a5b 100644 --- a/verifiers/internal/gha/provenance_forgeable.go +++ b/verifiers/internal/gha/provenance_forgeable.go @@ -280,7 +280,7 @@ func verifyNpmCLIGithubActionsV1SystemParameters(prov *slsav1.NpmCLIGithubAction if err != nil { return err } - githubParams, ok := sysParams["github"].(map[string]interface{}) + githubParams, ok := sysParams["github"].(map[string]any) if !ok { return fmt.Errorf("%w: %s", serrors.ErrorInvalidFormat, "github parameters") } diff --git a/verifiers/internal/gha/provenance_forgeable_test.go b/verifiers/internal/gha/provenance_forgeable_test.go index 2bb594950..071d13233 100644 --- a/verifiers/internal/gha/provenance_forgeable_test.go +++ b/verifiers/internal/gha/provenance_forgeable_test.go @@ -571,13 +571,13 @@ func Test_verifySystemParameters(t *testing.T) { } tests := []struct { name string - environment map[string]interface{} + environment map[string]any workflow WorkflowIdentity err error }{ { name: "all field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -593,7 +593,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "unknown field", - environment: map[string]interface{}{ + environment: map[string]any{ "SOMETHING": "workflow_dispatch", }, workflow: expectedWorkflow, @@ -602,70 +602,70 @@ func Test_verifySystemParameters(t *testing.T) { // Correct partial populated fields. { name: "only GITHUB_EVENT_NAME field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", }, workflow: expectedWorkflow, }, { name: "only GITHUB_REF field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REF": "refs/heads/main", }, workflow: expectedWorkflow, }, { name: "only GITHUB_REPOSITORY field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", }, workflow: expectedWorkflow, }, { name: "only GITHUB_REPOSITORY_ID field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REPOSITORY_ID": "602223945", }, workflow: expectedWorkflow, }, { name: "only GITHUB_REPOSITORY_OWNER_ID field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REPOSITORY_OWNER_ID": "64505099", }, workflow: expectedWorkflow, }, { name: "only GITHUB_RUN_ATTEMPT field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_RUN_ATTEMPT": "1", }, workflow: expectedWorkflow, }, { name: "only GITHUB_RUN_ID field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_RUN_ID": "4757060009", }, workflow: expectedWorkflow, }, { name: "only GITHUB_SHA field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_SHA": "b38894f2dda4355ea5606fccb166e61565e12a14", }, workflow: expectedWorkflow, }, { name: "only GITHUB_WORKFLOW_REF field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_WORKFLOW_REF": "laurentsimon/provenance-npm-test/.github/workflows/release.yml@refs/heads/main", }, workflow: expectedWorkflow, }, { name: "only GITHUB_WORKFLOW_SHA field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_WORKFLOW_SHA": "b38894f2dda4355ea5606fccb166e61565e12a14", }, workflow: expectedWorkflow, @@ -673,7 +673,7 @@ func Test_verifySystemParameters(t *testing.T) { // All fields populated one mismatch. { name: "GITHUB_EVENT_NAME mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch2", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -690,7 +690,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_REF mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main2", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -707,7 +707,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_REPOSITORY mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test2", @@ -724,7 +724,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_REPOSITORY_ID mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -741,7 +741,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_REPOSITORY_OWNER_ID mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -758,7 +758,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_RUN_ATTEMPT mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -775,7 +775,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_RUN_ID mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -792,7 +792,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_SHA mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -809,7 +809,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_WORKFLOW_REF mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -826,7 +826,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "GITHUB_WORKFLOW_SHA mismatch", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "refs/heads/main", "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test", @@ -844,7 +844,7 @@ func Test_verifySystemParameters(t *testing.T) { // Incorrect partially populated fields. { name: "incorrect only GITHUB_EVENT_NAME field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch2", }, workflow: expectedWorkflow, @@ -852,7 +852,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_REF field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REF": "refs/heads/main2", }, workflow: expectedWorkflow, @@ -860,7 +860,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_REPOSITORY field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REPOSITORY": "laurentsimon/provenance-npm-test2", }, workflow: expectedWorkflow, @@ -868,7 +868,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_REPOSITORY_ID field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REPOSITORY_ID": "6022239452", }, workflow: expectedWorkflow, @@ -876,7 +876,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_REPOSITORY_OWNER_ID field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_REPOSITORY_OWNER_ID": "645050992", }, workflow: expectedWorkflow, @@ -884,7 +884,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_RUN_ATTEMPT field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_RUN_ATTEMPT": "12", }, workflow: expectedWorkflow, @@ -892,7 +892,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_RUN_ID field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_RUN_ID": "47570600092", }, workflow: expectedWorkflow, @@ -900,7 +900,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_SHA field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_SHA": "b38894f2dda4355ea5606fccb166e61565e12a142", }, workflow: expectedWorkflow, @@ -908,7 +908,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_WORKFLOW_REF field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_WORKFLOW_REF": "laurentsimon/provenance-npm-test/.github/workflows/release.yml@refs/heads/main2", }, workflow: expectedWorkflow, @@ -916,7 +916,7 @@ func Test_verifySystemParameters(t *testing.T) { }, { name: "incorrect only GITHUB_WORKFLOW_SHA field populated", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_WORKFLOW_SHA": "b38894f2dda4355ea5606fccb166e61565e12a142", }, workflow: expectedWorkflow, @@ -957,7 +957,7 @@ func Test_verifyProvenanceMatchesCertificate(t *testing.T) { subject []intoto.Subject numberResolvedDependencies int workflowTriggerPath string - environment map[string]interface{} + environment map[string]any certificateIdentity WorkflowIdentity err error }{ @@ -970,7 +970,7 @@ func Test_verifyProvenanceMatchesCertificate(t *testing.T) { }, numberResolvedDependencies: 1, workflowTriggerPath: "release/workflow/path", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "source-ref", "GITHUB_REPOSITORY": "repo/name", @@ -1002,7 +1002,7 @@ func Test_verifyProvenanceMatchesCertificate(t *testing.T) { Digest: intotocommon.DigestSet{"sha512": "abcd"}, }, }, - environment: map[string]interface{}{ + environment: map[string]any{ "SOMETHING": "workflow_dispatch", }, certificateIdentity: expectedWorkflow, @@ -1041,7 +1041,7 @@ func Test_verifyProvenanceMatchesCertificate(t *testing.T) { }, numberResolvedDependencies: 1, workflowTriggerPath: "release/workflow/path2", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch", "GITHUB_REF": "source-ref", "GITHUB_REPOSITORY": "repo/name", @@ -1065,7 +1065,7 @@ func Test_verifyProvenanceMatchesCertificate(t *testing.T) { }, numberResolvedDependencies: 1, workflowTriggerPath: "release/workflow/path", - environment: map[string]interface{}{ + environment: map[string]any{ "GITHUB_EVENT_NAME": "workflow_dispatch2", }, certificateIdentity: expectedWorkflow, diff --git a/verifiers/internal/gha/provenance_test.go b/verifiers/internal/gha/provenance_test.go index decf3542d..801d0df03 100644 --- a/verifiers/internal/gha/provenance_test.go +++ b/verifiers/internal/gha/provenance_test.go @@ -53,7 +53,7 @@ func (p *testProvenance) GetBuildInvocationID() (string, error) { return p func (p *testProvenance) GetBuildStartTime() (*time.Time, error) { return p.buildStartTime, nil } func (p *testProvenance) GetBuildFinishTime() (*time.Time, error) { return p.buildFinishTime, nil } func (p *testProvenance) GetNumberResolvedDependencies() (int, error) { return p.noResolvedDeps, nil } -func (p *testProvenance) GetWorkflowInputs() (map[string]interface{}, error) { +func (p *testProvenance) GetWorkflowInputs() (map[string]any, error) { return p.workflowInputs, nil } diff --git a/verifiers/internal/gha/slsaprovenance/common/common.go b/verifiers/internal/gha/slsaprovenance/common/common.go index 3e049a48f..ef79fdb13 100644 --- a/verifiers/internal/gha/slsaprovenance/common/common.go +++ b/verifiers/internal/gha/slsaprovenance/common/common.go @@ -44,7 +44,7 @@ func GetWorkflowInputs(environment map[string]any, upperEnv bool) (map[string]an return nil, fmt.Errorf("%w: error retrieving 'inputs': %v", serrors.ErrorInvalidDssePayload, err) } - pyldInputs, ok := payloadInputs.(map[string]interface{}) + pyldInputs, ok := payloadInputs.(map[string]any) if !ok { return nil, fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "parameters type inputs") } @@ -142,7 +142,7 @@ func getBranchForTag(environment map[string]any, upperEnv bool) (string, error) return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "release absent from payload") } - release, ok := releasePayload.(map[string]interface{}) + release, ok := releasePayload.(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "parameters type releasePayload") } diff --git a/verifiers/internal/gha/slsaprovenance/iface/provenance.go b/verifiers/internal/gha/slsaprovenance/iface/provenance.go index f294743d5..03cb48cf6 100644 --- a/verifiers/internal/gha/slsaprovenance/iface/provenance.go +++ b/verifiers/internal/gha/slsaprovenance/iface/provenance.go @@ -49,5 +49,5 @@ type Provenance interface { // GetWorkflowInputs retrieves the inputs from the provenance. Only succeeds for event // relevant event types (workflow_inputs). - GetWorkflowInputs() (map[string]interface{}, error) + GetWorkflowInputs() (map[string]any, error) } diff --git a/verifiers/internal/gha/slsaprovenance/v0.2/base.go b/verifiers/internal/gha/slsaprovenance/v0.2/base.go index 320306e68..435c07f56 100644 --- a/verifiers/internal/gha/slsaprovenance/v0.2/base.go +++ b/verifiers/internal/gha/slsaprovenance/v0.2/base.go @@ -75,7 +75,7 @@ func (p *provenanceV02) Subjects() ([]intoto.Subject, error) { // GetBranch implements Provenance.GetBranch. func (p *provenanceV02) GetBranch() (string, error) { // GetBranch gets the branch from the invocation parameters. - environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]interface{}) + environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "parameters type") } @@ -85,7 +85,7 @@ func (p *provenanceV02) GetBranch() (string, error) { // GetTag implements Provenance.GetTag. func (p *provenanceV02) GetTag() (string, error) { - environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]interface{}) + environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "parameters type") } @@ -94,9 +94,9 @@ func (p *provenanceV02) GetTag() (string, error) { } // GetWorkflowInputs implements Provenance.GetWorkflowInputs. -func (p *provenanceV02) GetWorkflowInputs() (map[string]interface{}, error) { +func (p *provenanceV02) GetWorkflowInputs() (map[string]any, error) { // Verify it's a workflow_dispatch trigger. - environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]interface{}) + environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]any) if !ok { return nil, fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "parameters type") } @@ -140,7 +140,7 @@ func (p *provenanceV02) GetNumberResolvedDependencies() (int, error) { // GetSystemParameters implements Provenance.GetSystemParameters. func (p *provenanceV02) GetSystemParameters() (map[string]any, error) { - environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]interface{}) + environment, ok := p.prov.Predicate.Invocation.Environment.(map[string]any) if !ok { return nil, fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "parameters type") } diff --git a/verifiers/internal/gha/slsaprovenance/v0.2/byob.go b/verifiers/internal/gha/slsaprovenance/v0.2/byob.go index 93f1943f9..67faa367e 100644 --- a/verifiers/internal/gha/slsaprovenance/v0.2/byob.go +++ b/verifiers/internal/gha/slsaprovenance/v0.2/byob.go @@ -48,7 +48,7 @@ func (p *byobProvenance) GetBranch() (string, error) { return ref, nil case "tags": // NOTE: If the ref type is a tag we want to try to parse out the branch from the tag. - sysParams, ok := p.prov.Predicate.Invocation.Environment.(map[string]interface{}) + sysParams, ok := p.prov.Predicate.Invocation.Environment.(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "parameters type") } diff --git a/verifiers/internal/gha/slsaprovenance/v0.2/byob_test.go b/verifiers/internal/gha/slsaprovenance/v0.2/byob_test.go index 012e2f05d..f2d5bb12c 100644 --- a/verifiers/internal/gha/slsaprovenance/v0.2/byob_test.go +++ b/verifiers/internal/gha/slsaprovenance/v0.2/byob_test.go @@ -55,7 +55,7 @@ func Test_byobProvenance_GetBranch(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa02.ProvenancePredicate{ Invocation: slsa02.ProvenanceInvocation{ - Environment: map[string]interface{}{ + Environment: map[string]any{ "GITHUB_REF_TYPE": "branch", "GITHUB_REF": "refs/heads/main", }, @@ -72,7 +72,7 @@ func Test_byobProvenance_GetBranch(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa02.ProvenancePredicate{ Invocation: slsa02.ProvenanceInvocation{ - Environment: map[string]interface{}{ + Environment: map[string]any{ "GITHUB_BASE_REF": "", "GITHUB_REF_TYPE": "tag", "GITHUB_REF": "refs/tags/v1.0.0", @@ -99,7 +99,7 @@ func Test_byobProvenance_GetBranch(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa02.ProvenancePredicate{ Invocation: slsa02.ProvenanceInvocation{ - Environment: map[string]interface{}{ + Environment: map[string]any{ "GITHUB_BASE_REF": "", "GITHUB_REF_TYPE": "tag", "GITHUB_REF": "refs/tags/v1.0.0", @@ -121,7 +121,7 @@ func Test_byobProvenance_GetBranch(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa02.ProvenancePredicate{ Invocation: slsa02.ProvenanceInvocation{ - Environment: map[string]interface{}{ + Environment: map[string]any{ "GITHUB_REF_TYPE": "branch", "GITHUB_REF": "refs/heads/main", }, @@ -196,7 +196,7 @@ func Test_byobProvenance_GetTag(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa02.ProvenancePredicate{ Invocation: slsa02.ProvenanceInvocation{ - Environment: map[string]interface{}{ + Environment: map[string]any{ "GITHUB_REF_TYPE": "branch", "GITHUB_REF": "refs/heads/main", }, @@ -229,7 +229,7 @@ func Test_byobProvenance_GetTag(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa02.ProvenancePredicate{ Invocation: slsa02.ProvenanceInvocation{ - Environment: map[string]interface{}{ + Environment: map[string]any{ "GITHUB_REF_TYPE": "tag", "GITHUB_REF": "refs/tags/v1.0.0", }, @@ -246,7 +246,7 @@ func Test_byobProvenance_GetTag(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa02.ProvenancePredicate{ Invocation: slsa02.ProvenanceInvocation{ - Environment: map[string]interface{}{ + Environment: map[string]any{ "GITHUB_REF_TYPE": "tag", "GITHUB_REF": "refs/tags/v1.0.0", }, diff --git a/verifiers/internal/gha/slsaprovenance/v1.0/base.go b/verifiers/internal/gha/slsaprovenance/v1.0/base.go index 74774e8fe..52e792e65 100644 --- a/verifiers/internal/gha/slsaprovenance/v1.0/base.go +++ b/verifiers/internal/gha/slsaprovenance/v1.0/base.go @@ -47,7 +47,7 @@ func (p *provenanceV1) SourceURI() (string, error) { } func (p *provenanceV1) builderTriggerInfo() (string, string, string, error) { - sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]interface{}) + sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]any) if !ok { return "", "", "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "internal parameters type") } @@ -105,7 +105,7 @@ func (p *provenanceV1) Subjects() ([]intoto.Subject, error) { // GetBranch implements Provenance.GetBranch. func (p *provenanceV1) GetBranch() (string, error) { - sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]interface{}) + sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "internal parameters type") } @@ -115,7 +115,7 @@ func (p *provenanceV1) GetBranch() (string, error) { // GetTag implements Provenance.GetTag. func (p *provenanceV1) GetTag() (string, error) { - sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]interface{}) + sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "system parameters type") } @@ -124,8 +124,8 @@ func (p *provenanceV1) GetTag() (string, error) { } // GetWorkflowInputs implements Provenance.GetWorkflowInputs. -func (p *provenanceV1) GetWorkflowInputs() (map[string]interface{}, error) { - sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]interface{}) +func (p *provenanceV1) GetWorkflowInputs() (map[string]any, error) { + sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]any) if !ok { return nil, fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "system parameters type") } @@ -150,7 +150,7 @@ func (p *provenanceV1) GetBuildTriggerPath() (string, error) { // `w` may originally have been meant to be a `map[string]interface{}`, but there is not enough test coverage to be sure. // See https://github.com/slsa-framework/slsa-verifier/pull/641/files#diff-8a6f19cc5906bcab1f16457810caf0806567ad7db6cb125d1b41a971ab525c39L78. switch wMap := w.(type) { - case map[string]interface{}: + case map[string]any: v, ok = wMap["path"].(string) case map[string]string: v, ok = wMap["path"] @@ -186,7 +186,7 @@ func (p *provenanceV1) GetNumberResolvedDependencies() (int, error) { // GetSystemParameters implements Provenance.GetSystemParameters. func (p *provenanceV1) GetSystemParameters() (map[string]any, error) { - sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]interface{}) + sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]any) if !ok { return nil, fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "system parameters type") } @@ -195,8 +195,8 @@ func (p *provenanceV1) GetSystemParameters() (map[string]any, error) { } // getExternalParameters() implements Provenance.getExternalParameters. -func (p *provenanceV1) getExternalParameters() (map[string]interface{}, error) { - externalParams, ok := p.prov.Predicate.BuildDefinition.ExternalParameters.(map[string]interface{}) +func (p *provenanceV1) getExternalParameters() (map[string]any, error) { + externalParams, ok := p.prov.Predicate.BuildDefinition.ExternalParameters.(map[string]any) if !ok { return nil, fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "external parameters type") } diff --git a/verifiers/internal/gha/slsaprovenance/v1.0/base_test.go b/verifiers/internal/gha/slsaprovenance/v1.0/base_test.go index bab1eb4d1..abe7c83f1 100644 --- a/verifiers/internal/gha/slsaprovenance/v1.0/base_test.go +++ b/verifiers/internal/gha/slsaprovenance/v1.0/base_test.go @@ -22,7 +22,7 @@ func Test_GetExternalParams(t *testing.T) { testCases := []struct { name string prov testProvenance - expectedParams map[string]interface{} + expectedParams map[string]any expectedError error }{ { @@ -46,13 +46,13 @@ func Test_GetExternalParams(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{}, + ExternalParameters: map[string]any{}, }, }, }, }, }, - expectedParams: make(map[string]interface{}), + expectedParams: make(map[string]any), expectedError: nil, }, { @@ -62,7 +62,7 @@ func Test_GetExternalParams(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ + ExternalParameters: map[string]any{ "key": "value", }, }, @@ -70,7 +70,7 @@ func Test_GetExternalParams(t *testing.T) { }, }, }, - expectedParams: map[string]interface{}{ + expectedParams: map[string]any{ "key": "value", }, expectedError: nil, @@ -107,8 +107,8 @@ func Test_GetBuildTriggerPath(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ - "other": map[string]interface{}{}, + ExternalParameters: map[string]any{ + "other": map[string]any{}, }, }, }, @@ -125,8 +125,8 @@ func Test_GetBuildTriggerPath(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ - "workflow": map[string]interface{}{ + ExternalParameters: map[string]any{ + "workflow": map[string]any{ "key": "value", }, }, @@ -145,7 +145,7 @@ func Test_GetBuildTriggerPath(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ + ExternalParameters: map[string]any{ "workflow": map[string]string{ "key": "value", }, @@ -165,7 +165,7 @@ func Test_GetBuildTriggerPath(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ + ExternalParameters: map[string]any{ "workflow": map[string]string{ "path": testPath, }, @@ -184,8 +184,8 @@ func Test_GetBuildTriggerPath(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ - "workflow": map[string]interface{}{ + ExternalParameters: map[string]any{ + "workflow": map[string]any{ "path": testPath, }, }, diff --git a/verifiers/internal/gha/slsaprovenance/v1.0/byob.go b/verifiers/internal/gha/slsaprovenance/v1.0/byob.go index d6dba5320..a705d07e4 100644 --- a/verifiers/internal/gha/slsaprovenance/v1.0/byob.go +++ b/verifiers/internal/gha/slsaprovenance/v1.0/byob.go @@ -42,7 +42,7 @@ func (p *BYOBProvenance) GetBranch() (string, error) { return ref, nil case "tags": // NOTE: If the ref type is a tag we want to try to parse out the branch from the tag. - sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]interface{}) + sysParams, ok := p.prov.Predicate.BuildDefinition.InternalParameters.(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidDssePayload, "internal parameters type") } diff --git a/verifiers/internal/gha/slsaprovenance/v1.0/byob_test.go b/verifiers/internal/gha/slsaprovenance/v1.0/byob_test.go index bb593f9cd..b2771bb1d 100644 --- a/verifiers/internal/gha/slsaprovenance/v1.0/byob_test.go +++ b/verifiers/internal/gha/slsaprovenance/v1.0/byob_test.go @@ -59,7 +59,7 @@ func Test_BYOBProvenance_GetBranch(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - InternalParameters: map[string]interface{}{ + InternalParameters: map[string]any{ "GITHUB_REF_TYPE": "branch", "GITHUB_REF": "refs/heads/main", }, @@ -78,7 +78,7 @@ func Test_BYOBProvenance_GetBranch(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - InternalParameters: map[string]interface{}{ + InternalParameters: map[string]any{ "GITHUB_BASE_REF": "", "GITHUB_REF_TYPE": "tag", "GITHUB_REF": "refs/tags/v1.0.0", @@ -107,7 +107,7 @@ func Test_BYOBProvenance_GetBranch(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - InternalParameters: map[string]interface{}{ + InternalParameters: map[string]any{ "GITHUB_REF_TYPE": "branch", "GITHUB_REF": "refs/heads/main", }, @@ -190,7 +190,7 @@ func Test_BYOBProvenance_GetTag(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - InternalParameters: map[string]interface{}{ + InternalParameters: map[string]any{ "GITHUB_REF_TYPE": "branch", "GITHUB_REF": "refs/heads/main", }, @@ -229,7 +229,7 @@ func Test_BYOBProvenance_GetTag(t *testing.T) { StatementHeader: intoto.StatementHeader{}, Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - InternalParameters: map[string]interface{}{ + InternalParameters: map[string]any{ "GITHUB_REF_TYPE": "tag", "GITHUB_REF": "refs/tags/v1.0.0", }, diff --git a/verifiers/internal/gha/slsaprovenance/v1.0/github_attest.go b/verifiers/internal/gha/slsaprovenance/v1.0/github_attest.go index ac24a5074..023a1be4b 100644 --- a/verifiers/internal/gha/slsaprovenance/v1.0/github_attest.go +++ b/verifiers/internal/gha/slsaprovenance/v1.0/github_attest.go @@ -19,7 +19,7 @@ func (p *GithubAttestProvenance) TriggerURI() (string, error) { if err != nil { return "", err } - workflow, ok := externalParams["workflow"].(map[string]interface{}) + workflow, ok := externalParams["workflow"].(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidFormat, "workflow parameters") } diff --git a/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions.go b/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions.go index 643ed2178..7bc39ea5b 100644 --- a/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions.go +++ b/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions.go @@ -17,7 +17,7 @@ func (p *NpmCLIGithubActionsProvenance) TriggerURI() (string, error) { if err != nil { return "", err } - workflow, ok := externalParams["workflow"].(map[string]interface{}) + workflow, ok := externalParams["workflow"].(map[string]any) if !ok { return "", fmt.Errorf("%w: %s", serrors.ErrorInvalidFormat, "workflow parameters") } diff --git a/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions_test.go b/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions_test.go index ae0a3c900..f87862720 100644 --- a/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions_test.go +++ b/verifiers/internal/gha/slsaprovenance/v1.0/npmcli_github_actions_test.go @@ -31,7 +31,7 @@ func Test_NpmCLIGithubActionsProvenance_TriggerURI(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{}, + ExternalParameters: map[string]any{}, }, }, }, @@ -47,8 +47,8 @@ func Test_NpmCLIGithubActionsProvenance_TriggerURI(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ - "workflow": map[string]interface{}{}, + ExternalParameters: map[string]any{ + "workflow": map[string]any{}, }, }, }, @@ -65,8 +65,8 @@ func Test_NpmCLIGithubActionsProvenance_TriggerURI(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ - "workflow": map[string]interface{}{ + ExternalParameters: map[string]any{ + "workflow": map[string]any{ "ref": testProvRef, }, }, @@ -85,8 +85,8 @@ func Test_NpmCLIGithubActionsProvenance_TriggerURI(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ - "workflow": map[string]interface{}{ + ExternalParameters: map[string]any{ + "workflow": map[string]any{ "repository": testProvRef, }, }, @@ -105,8 +105,8 @@ func Test_NpmCLIGithubActionsProvenance_TriggerURI(t *testing.T) { prov: &Attestation{ Predicate: slsa1.ProvenancePredicate{ BuildDefinition: slsa1.ProvenanceBuildDefinition{ - ExternalParameters: map[string]interface{}{ - "workflow": map[string]interface{}{ + ExternalParameters: map[string]any{ + "workflow": map[string]any{ "repository": testProvRepository, "ref": testProvRef, }, From e18c94e4b96f510bc88f06a551ee73332be23804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 20 Jun 2025 09:09:30 +0300 Subject: [PATCH 2/3] refactor: use maps.Copy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ville Skyttä --- verifiers/utils/structures.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/verifiers/utils/structures.go b/verifiers/utils/structures.go index 34906cc83..37c69145b 100644 --- a/verifiers/utils/structures.go +++ b/verifiers/utils/structures.go @@ -1,12 +1,10 @@ package utils +import "maps" + func MergeMaps[K comparable, V any](m1, m2 map[K]V) map[K]V { m := make(map[K]V, len(m1)+len(m2)) - for k, v := range m2 { - m[k] = v - } - for k, v := range m1 { - m[k] = v - } + maps.Copy(m, m2) + maps.Copy(m, m1) return m } From 4585496fe9b8a855db5825a774d983179c0c35f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 20 Jun 2025 09:12:23 +0300 Subject: [PATCH 3/3] refactor: use slices.Contains MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ville Skyttä --- verifiers/internal/gcb/provenance.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/verifiers/internal/gcb/provenance.go b/verifiers/internal/gcb/provenance.go index 6b828c6c9..d48762b93 100644 --- a/verifiers/internal/gcb/provenance.go +++ b/verifiers/internal/gcb/provenance.go @@ -193,10 +193,8 @@ func (p *Provenance) validateBuilderID(id string) error { default: return fmt.Errorf("%w: unknown predicate type: %v", serrors.ErrorInvalidDssePayload, predicateType) } - for _, b := range builders { - if id == b { - return nil - } + if slices.Contains(builders, id) { + return nil } return serrors.ErrorInvalidBuilderID }