diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index af22e72b95..0b6ac7d481 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,3 +3,5 @@ # Unify src/lib/plugins/uv/ @snyk/engines_sca-scanners @snyk/developer-experience_cli + +cliv2/pkg/core/contributors.go @snyk/platformeng_identity-tenancy diff --git a/cliv2-private/go.mod b/cliv2-private/go.mod index 91fcb61dde..ce5b121c62 100644 --- a/cliv2-private/go.mod +++ b/cliv2-private/go.mod @@ -225,7 +225,7 @@ require ( github.com/snyk/container-cli v0.0.0-20260213211631-cd2b2cf8f3ea // indirect github.com/snyk/dep-graph/go v0.0.0-20260127160647-c836da762c62 // indirect github.com/snyk/error-catalog-golang-public v0.0.0-20260806122555-28dc45bbbde6 // indirect - github.com/snyk/go-application-framework v0.19.1 // indirect + github.com/snyk/go-application-framework v0.19.3-0.20260903111918-5bc252f6adb6 // indirect github.com/snyk/go-httpauth v0.0.0-20260810142636-0f6182aaccbc // indirect github.com/snyk/policy-engine v1.1.4 // indirect github.com/snyk/snyk-iac-capture v0.6.5 // indirect diff --git a/cliv2-private/go.sum b/cliv2-private/go.sum index d548500f1a..122dc9ac75 100644 --- a/cliv2-private/go.sum +++ b/cliv2-private/go.sum @@ -609,8 +609,8 @@ github.com/snyk/dep-graph/go v0.0.0-20260127160647-c836da762c62 h1:kgZNQ5ztI4+n3 github.com/snyk/dep-graph/go v0.0.0-20260127160647-c836da762c62/go.mod h1:hTr91da/4ze2nk9q6ZW1BmfM2Z8rLUZSEZ3kK+6WGpc= github.com/snyk/error-catalog-golang-public v0.0.0-20260806122555-28dc45bbbde6 h1:XUPFP85nBh+zDCTvxxBuouZP9yG7H1qXZiMGFVMWVKM= github.com/snyk/error-catalog-golang-public v0.0.0-20260806122555-28dc45bbbde6/go.mod h1:0dz+HUR/r7VLlQpLfF0a/F1tdHH84NLTZzCxjZ+Q1nk= -github.com/snyk/go-application-framework v0.19.1 h1:HmIxqrGafFVJgt/y6A3o8x6ekP5RbHGezTBgsfd8t9I= -github.com/snyk/go-application-framework v0.19.1/go.mod h1:UJMR1Tk4OPGFa03O9cko4ic0GeaqmSO03fx55HpOFp0= +github.com/snyk/go-application-framework v0.19.3-0.20260903111918-5bc252f6adb6 h1:eXqZi37DKJanWWto9d0YVOwjrL8DoAdD2EJYesihblg= +github.com/snyk/go-application-framework v0.19.3-0.20260903111918-5bc252f6adb6/go.mod h1:UJMR1Tk4OPGFa03O9cko4ic0GeaqmSO03fx55HpOFp0= github.com/snyk/go-httpauth v0.0.0-20260810142636-0f6182aaccbc h1:tuZVhmJFxS4qJlwYIIIw8xgw3VaVqIR3IAV0WaaFVnI= github.com/snyk/go-httpauth v0.0.0-20260810142636-0f6182aaccbc/go.mod h1:f42qLL7WXOS0od7dXJV/hK3myjms/r6HsXgLrg1HRRY= github.com/snyk/policy-engine v1.1.4 h1:0XpaMpl7ixSk4+dlpHYg2iKEBuv+5Ci+QIcbsmhktao= diff --git a/cliv2/go.mod b/cliv2/go.mod index 37aaff2b08..08c2f8f463 100644 --- a/cliv2/go.mod +++ b/cliv2/go.mod @@ -22,7 +22,7 @@ require ( github.com/snyk/code-client-go v1.31.8 github.com/snyk/container-cli v0.0.0-20260213211631-cd2b2cf8f3ea github.com/snyk/error-catalog-golang-public v0.0.0-20260806122555-28dc45bbbde6 - github.com/snyk/go-application-framework v0.19.1 + github.com/snyk/go-application-framework v0.19.3-0.20260903111918-5bc252f6adb6 github.com/snyk/go-httpauth v0.0.0-20260810142636-0f6182aaccbc github.com/snyk/snyk-iac-capture v0.6.5 github.com/snyk/snyk-ls v0.0.0-20260902080529-bf1230ca471b @@ -259,7 +259,7 @@ require ( google.golang.org/genproto v0.0.0-20260519071638-aa98bba5eb94 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d // indirect - google.golang.org/grpc v1.83.0 // indirect + google.golang.org/grpc v1.83.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/cliv2/go.sum b/cliv2/go.sum index 619723d407..c01951aa05 100644 --- a/cliv2/go.sum +++ b/cliv2/go.sum @@ -556,8 +556,8 @@ github.com/snyk/dep-graph/go v0.0.0-20260127160647-c836da762c62 h1:kgZNQ5ztI4+n3 github.com/snyk/dep-graph/go v0.0.0-20260127160647-c836da762c62/go.mod h1:hTr91da/4ze2nk9q6ZW1BmfM2Z8rLUZSEZ3kK+6WGpc= github.com/snyk/error-catalog-golang-public v0.0.0-20260806122555-28dc45bbbde6 h1:XUPFP85nBh+zDCTvxxBuouZP9yG7H1qXZiMGFVMWVKM= github.com/snyk/error-catalog-golang-public v0.0.0-20260806122555-28dc45bbbde6/go.mod h1:0dz+HUR/r7VLlQpLfF0a/F1tdHH84NLTZzCxjZ+Q1nk= -github.com/snyk/go-application-framework v0.19.1 h1:HmIxqrGafFVJgt/y6A3o8x6ekP5RbHGezTBgsfd8t9I= -github.com/snyk/go-application-framework v0.19.1/go.mod h1:UJMR1Tk4OPGFa03O9cko4ic0GeaqmSO03fx55HpOFp0= +github.com/snyk/go-application-framework v0.19.3-0.20260903111918-5bc252f6adb6 h1:eXqZi37DKJanWWto9d0YVOwjrL8DoAdD2EJYesihblg= +github.com/snyk/go-application-framework v0.19.3-0.20260903111918-5bc252f6adb6/go.mod h1:UJMR1Tk4OPGFa03O9cko4ic0GeaqmSO03fx55HpOFp0= github.com/snyk/go-httpauth v0.0.0-20260810142636-0f6182aaccbc h1:tuZVhmJFxS4qJlwYIIIw8xgw3VaVqIR3IAV0WaaFVnI= github.com/snyk/go-httpauth v0.0.0-20260810142636-0f6182aaccbc/go.mod h1:f42qLL7WXOS0od7dXJV/hK3myjms/r6HsXgLrg1HRRY= github.com/snyk/policy-engine v1.1.4 h1:0XpaMpl7ixSk4+dlpHYg2iKEBuv+5Ci+QIcbsmhktao= @@ -784,6 +784,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.0 h1:JeNZEKJFbQxArAMl+hiytHauacDNqJUllNfmIMmpqnQ= google.golang.org/grpc v1.83.0/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= +google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/cliv2/pkg/core/contributors.go b/cliv2/pkg/core/contributors.go new file mode 100644 index 0000000000..3c2017beaa --- /dev/null +++ b/cliv2/pkg/core/contributors.go @@ -0,0 +1,27 @@ +package core + +import ( + "github.com/snyk/go-application-framework/pkg/contributors" + "github.com/snyk/go-application-framework/pkg/local_workflows/config_utils" + "github.com/snyk/go-application-framework/pkg/networking/middleware/contributor_capture" + "github.com/snyk/go-application-framework/pkg/workflow" +) + +const ( + featureFlagEnableEntityContributorsPublish = "enable-entity-contributors-publish" + configEnableEntityContributorsPublish = "internal_snyk_contributors_enabled" +) + +func initContributorCapture() { + config_utils.AddFeatureFlagsToConfig(globalEngine, map[string]string{configEnableEntityContributorsPublish: featureFlagEnableEntityContributorsPublish}) + + if globalConfiguration.GetBool(configEnableEntityContributorsPublish) { + hook, sink := contributors.NewPostInvokeHook() + globalEngine.GetNetworkAccess().AddMiddleware( + contributor_capture.NewContributorCaptureMiddleware(globalConfiguration, sink, globalLogger), + ) + if err := workflow.AddPostInvokeHook(globalEngine, hook); err != nil { + globalLogger.Debug().Err(err).Msg("contributors: failed to register post-invoke hook") + } + } +} diff --git a/cliv2/pkg/core/main.go b/cliv2/pkg/core/main.go index 81f378963e..f18e9af0cc 100644 --- a/cliv2/pkg/core/main.go +++ b/cliv2/pkg/core/main.go @@ -644,6 +644,8 @@ func mainWithErrorCode(additionalExts []workflow.ExtensionInit) int { // initialize the extensions -> they register themselves at the engine initExtensions(globalEngine, globalConfiguration, additionalExts) + initContributorCapture() + // init engine err = globalEngine.Init() diff --git a/test/acceptance/fake-server.ts b/test/acceptance/fake-server.ts index de99c47f95..6dd33e16ff 100644 --- a/test/acceptance/fake-server.ts +++ b/test/acceptance/fake-server.ts @@ -386,6 +386,7 @@ export const fakeServer = (basePath: string, snykToken: string): FakeServer => { req.url?.includes('/analytics') || req.url?.includes('/instrumentation') || req.url?.includes('/v1/track') || + req.url?.includes('/feature_flags/evaluation') || req.url?.includes('/api/rest/orgs/'); if (responseDelayMs > 0 && !isExcludedEndpoint) { global.setTimeout(() => next(), responseDelayMs);