From b8cf2a6e9d7f457c3a7e6fc404c636029d2bdf1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Scha=CC=88fer?= <101886095+PeterSchafer@users.noreply.github.com> Date: Sat, 19 Jul 2025 10:51:18 +0200 Subject: [PATCH] chore: adding a central check for the experimental flag --- cliv2/cmd/cliv2/main.go | 39 ++++++++----------- cliv2/go.mod | 2 +- cliv2/go.sum | 4 +- .../snyk-sbom-monitor/all-projects.spec.ts | 11 +++--- .../snyk-sbom-test/all-projects.spec.ts | 9 +++-- 5 files changed, 30 insertions(+), 35 deletions(-) diff --git a/cliv2/cmd/cliv2/main.go b/cliv2/cmd/cliv2/main.go index 7adf03c3cc..c9c4f69fa9 100644 --- a/cliv2/cmd/cliv2/main.go +++ b/cliv2/cmd/cliv2/main.go @@ -22,8 +22,6 @@ import ( "github.com/snyk/cli-extension-iac-rules/iacrules" "github.com/snyk/cli-extension-iac/pkg/iac" "github.com/snyk/cli-extension-sbom/pkg/sbom" - "github.com/snyk/cli/cliv2/internal/cliv2" - "github.com/snyk/cli/cliv2/internal/constants" "github.com/snyk/container-cli/pkg/container" "github.com/snyk/go-application-framework/pkg/analytics" "github.com/snyk/go-application-framework/pkg/app" @@ -34,6 +32,12 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" + "github.com/snyk/error-catalog-golang-public/cli" + "github.com/snyk/go-application-framework/pkg/local_workflows/config_utils" + + "github.com/snyk/cli/cliv2/internal/cliv2" + "github.com/snyk/cli/cliv2/internal/constants" + localworkflows "github.com/snyk/go-application-framework/pkg/local_workflows" "github.com/snyk/go-application-framework/pkg/local_workflows/content_type" @@ -51,9 +55,10 @@ import ( snykmcp "github.com/snyk/snyk-ls/mcp_extension" + workflows "github.com/snyk/go-application-framework/pkg/local_workflows/connectivity_check_extension" + cli_errors "github.com/snyk/cli/cliv2/internal/errors" "github.com/snyk/cli/cliv2/pkg/basic_workflows" - workflows "github.com/snyk/go-application-framework/pkg/local_workflows/connectivity_check_extension" ) var internalOS string @@ -153,6 +158,13 @@ func runMainWorkflow(config configuration.Configuration, cmd *cobra.Command, arg return err } + // global handling of experimental commands + if config_utils.IsExperimental(cmd.Flags()) { + if !globalConfiguration.GetBool(configuration.FLAG_EXPERIMENTAL) { + return cli.NewCommandIsExperimentalError(getFullCommandString(cmd)) + } + } + updateConfigFromParameter(config, args, rawArgs) name := getFullCommandString(cmd) @@ -548,7 +560,7 @@ func MainWithErrorCode() (int, []error) { globalEngine.AddExtensionInitializer(snykls.Init) globalEngine.AddExtensionInitializer(snykmcp.Init) globalEngine.AddExtensionInitializer(container.Init) - globalEngine.AddExtensionInitializer(initConnectivityCheck) + globalEngine.AddExtensionInitializer(workflows.InitConnectivityCheckWorkflow) globalEngine.AddExtensionInitializer(localworkflows.InitCodeWorkflow) globalEngine.AddExtensionInitializer(ignoreworkflow.InitIgnoreWorkflows) @@ -695,22 +707,3 @@ func setTimeout(config configuration.Configuration, onTimeout func()) { onTimeout() }() } - -// initConnectivityCheck wraps the connectivity-check extension initialization -// to ensure the workflow is visible -func initConnectivityCheck(engine workflow.Engine) error { - // Call the original init function - err := workflows.InitConnectivityCheckWorkflow(engine) - if err != nil { - return err - } - - // Get the workflow entry and make it visible - workflowID := workflow.NewWorkflowIdentifier("tools.connectivity-check") - entry, exists := engine.GetWorkflow(workflowID) - if exists && entry != nil { - entry.SetVisibility(true) - } - - return nil -} diff --git a/cliv2/go.mod b/cliv2/go.mod index f35036fad6..0d942be539 100644 --- a/cliv2/go.mod +++ b/cliv2/go.mod @@ -17,7 +17,7 @@ require ( github.com/snyk/cli-extension-sbom v0.0.0-20250422133603-a5ae6fdf0934 github.com/snyk/container-cli v0.0.0-20250321132345-1e2e01681dd7 github.com/snyk/error-catalog-golang-public v0.0.0-20250625135845-2d6f9a31f318 - github.com/snyk/go-application-framework v0.0.0-20250718142739-7b13eea2dabe + github.com/snyk/go-application-framework v0.0.0-20250721152513-f5f856730f1a github.com/snyk/go-httpauth v0.0.0-20240307114523-1f5ea3f55c65 github.com/snyk/snyk-iac-capture v0.6.5 github.com/snyk/snyk-ls v0.0.0-20250721151312-af6f306b820e diff --git a/cliv2/go.sum b/cliv2/go.sum index 7d331a272f..ddd49baa54 100644 --- a/cliv2/go.sum +++ b/cliv2/go.sum @@ -804,8 +804,8 @@ github.com/snyk/container-cli v0.0.0-20250321132345-1e2e01681dd7 h1:/2+2piwQtB9f github.com/snyk/container-cli v0.0.0-20250321132345-1e2e01681dd7/go.mod h1:38w+dcAQp9eG3P5t2eNS9eG0reut10AeJjLv5lJ5lpM= github.com/snyk/error-catalog-golang-public v0.0.0-20250625135845-2d6f9a31f318 h1:2bNOlUstBBWHa3doBvdOBlMSu8AC01IHyNexT9MoKiM= github.com/snyk/error-catalog-golang-public v0.0.0-20250625135845-2d6f9a31f318/go.mod h1:Ytttq7Pw4vOCu9NtRQaOeDU2dhBYUyNBe6kX4+nIIQ4= -github.com/snyk/go-application-framework v0.0.0-20250718142739-7b13eea2dabe h1:tONNShHQHSdIAm/wDNOUyLGOj+eQSvbGDNzTJ2WshxY= -github.com/snyk/go-application-framework v0.0.0-20250718142739-7b13eea2dabe/go.mod h1:ePzg+iOUmh9C7KNDGwDbz4Yt9q2FVXNIu2YoyR0X5J4= +github.com/snyk/go-application-framework v0.0.0-20250721152513-f5f856730f1a h1:EVChqpbOgpWL+STGDbYD0ZSyzgtGMvpCaWCC+dz6myQ= +github.com/snyk/go-application-framework v0.0.0-20250721152513-f5f856730f1a/go.mod h1:ePzg+iOUmh9C7KNDGwDbz4Yt9q2FVXNIu2YoyR0X5J4= github.com/snyk/go-httpauth v0.0.0-20240307114523-1f5ea3f55c65 h1:CEQuYv0Go6MEyRCD3YjLYM2u3Oxkx8GpCpFBd4rUTUk= github.com/snyk/go-httpauth v0.0.0-20240307114523-1f5ea3f55c65/go.mod h1:88KbbvGYlmLgee4OcQ19yr0bNpXpOr2kciOthaSzCAg= github.com/snyk/policy-engine v0.33.2 h1:ZxD6/RQ4vqUAXa64V72SsGjZ8vmnBgZNGYQxMIqctYo= diff --git a/test/jest/acceptance/snyk-sbom-monitor/all-projects.spec.ts b/test/jest/acceptance/snyk-sbom-monitor/all-projects.spec.ts index 536240a4fd..124e91e4e9 100644 --- a/test/jest/acceptance/snyk-sbom-monitor/all-projects.spec.ts +++ b/test/jest/acceptance/snyk-sbom-monitor/all-projects.spec.ts @@ -3,6 +3,7 @@ import { fakeServer } from '../../../acceptance/fake-server'; import { getServerPort } from '../../util/getServerPort'; import { getFixturePath } from '../../util/getFixturePath'; import * as path from 'path'; +import { EXIT_CODES } from '../../../../src/cli/exit-codes'; jest.setTimeout(1000 * 60); @@ -86,14 +87,14 @@ describe('snyk sbom monitor (mocked server only)', () => { 'npm-sbom-cdx15.json', ); - const { stdout, stderr } = await runSnykCLI( + const { stdout, stderr, code } = await runSnykCLI( `sbom monitor --org aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee --file ${fileToTest}`, { env }, ); - expect(stdout).toMatch( - 'Flag `--experimental` is required to execute this command.', - ); + expect(code).toBe(EXIT_CODES.ERROR); + + expect(stdout).toContain('--experimental'); expect(stderr).toEqual(''); }); @@ -124,7 +125,7 @@ describe('snyk sbom monitor (mocked server only)', () => { { env }, ); - expect(code).toEqual(2); + expect(code).toEqual(EXIT_CODES.ERROR); expect(stderr).toEqual(''); expect(stdout).toContain( diff --git a/test/jest/acceptance/snyk-sbom-test/all-projects.spec.ts b/test/jest/acceptance/snyk-sbom-test/all-projects.spec.ts index da33ee76c5..d2b09d6d06 100644 --- a/test/jest/acceptance/snyk-sbom-test/all-projects.spec.ts +++ b/test/jest/acceptance/snyk-sbom-test/all-projects.spec.ts @@ -3,6 +3,7 @@ import { fakeServer } from '../../../acceptance/fake-server'; import { getServerPort } from '../../util/getServerPort'; import { getFixturePath } from '../../util/getFixturePath'; import * as path from 'path'; +import { EXIT_CODES } from '../../../../src/cli/exit-codes'; jest.setTimeout(1000 * 60); @@ -112,14 +113,14 @@ describe('snyk sbom test (mocked server only)', () => { 'npm-sbom-cdx15.json', ); - const { stdout, stderr } = await runSnykCLI( + const { stdout, stderr, code } = await runSnykCLI( `sbom test --org aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee --file ${fileToTest}`, { env }, ); - expect(stdout).toMatch( - 'Flag `--experimental` is required to execute this command.', - ); + expect(code).toBe(EXIT_CODES.ERROR); + + expect(stdout).toMatch('--experimental'); expect(stderr).toEqual(''); });