Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
fc3c156
Move skip tests calls (#254)
attiasas Dec 1, 2024
47b4253
adding mono to action env downloads to fix linux failures
eranturgeman Dec 12, 2024
273f81b
keep original file order in SBOM Enrich (#258)
barv-jfrog Dec 15, 2024
857bca8
Don't save SecurityCommandResults obj as a file (#256)
attiasas Dec 15, 2024
63e89a6
Pass versions to conditional scans (#262)
attiasas Dec 15, 2024
20b7fa1
Update am 1.12.2 - SEC FP/FN (#260)
hadarshjfrog Dec 15, 2024
a42170d
Control the depth of the pnpm dependency tree (#202)
attiasas Dec 15, 2024
4a2541a
Merge branch 'dev' of https://github.com/jfrog/jfrog-cli-security int…
eranturgeman Dec 15, 2024
39cbd48
minor fix
eranturgeman Dec 15, 2024
ab3aab3
addition to env file to figure out if msbuild tool exists and linked …
eranturgeman Dec 16, 2024
379dde5
adding msbuild installation for linux
eranturgeman Dec 16, 2024
7064d3f
adding msbuild installation for linux - prewritten action
eranturgeman Dec 16, 2024
2b93462
adding msbuild installation for linux - prewritten action
eranturgeman Dec 16, 2024
7d70e20
trying install mono-complete
eranturgeman Dec 16, 2024
c613475
another try
eranturgeman Dec 16, 2024
be55245
another try
eranturgeman Dec 17, 2024
6b3c4fe
another try
eranturgeman Dec 17, 2024
56fc34a
attempt to check failures after fixing another issue in audit tests
eranturgeman Dec 17, 2024
6a87c81
.
eranturgeman Dec 17, 2024
ea03788
Update tests according to scanner changes (#266)
eranturgeman Dec 17, 2024
d5719ca
another attempt
eranturgeman Dec 18, 2024
eb62b8e
Merge branch 'dev' of https://github.com/jfrog/jfrog-cli-security int…
eranturgeman Dec 18, 2024
19f3836
another attempt
eranturgeman Dec 18, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/actions/install-and-setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,17 @@ runs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: '6.x'
- name: Install Mono on Linux
run: |
sudo apt-get update
sudo apt-get install -y apt-transport-https dirmngr gnupg ca-certificates
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt-get update
sudo apt-get install -y mono-complete

if: runner.os == 'Linux'
shell: 'bash'

- name: Setup Python3
uses: actions/setup-python@v5
Expand Down
83 changes: 60 additions & 23 deletions audit_test.go

Large diffs are not rendered by default.

27 changes: 15 additions & 12 deletions cli/docs/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package docs

import (
"fmt"
"github.com/jfrog/jfrog-cli-security/commands/git"
"strings"

"github.com/jfrog/jfrog-cli-security/commands/git"

"github.com/jfrog/jfrog-cli-core/v2/common/cliutils"
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
Expand Down Expand Up @@ -114,6 +115,7 @@ const (
useWrapperAudit = auditPrefix + UseWrapper
ExcludeTestDeps = "exclude-test-deps"
DepType = "dep-type"
MaxTreeDepth = "max-tree-depth"
ThirdPartyContextualAnalysis = "third-party-contextual-analysis"
RequirementsFile = "requirements-file"
WorkingDirs = "working-dirs"
Expand Down Expand Up @@ -240,17 +242,18 @@ var flagsMap = map[string]components.Flag{
"List of exclusions separated by semicolons, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.",
components.WithStrDefaultValue(strings.Join(utils.DefaultScaExcludePatterns, ";")),
),
Mvn: components.NewBoolFlag(Mvn, "Set to true to request audit for a Maven project."),
Gradle: components.NewBoolFlag(Gradle, "Set to true to request audit for a Gradle project."),
Npm: components.NewBoolFlag(Npm, "Set to true to request audit for a npm project."),
Pnpm: components.NewBoolFlag(Pnpm, "Set to true to request audit for a Pnpm project."),
Yarn: components.NewBoolFlag(Yarn, "Set to true to request audit for a Yarn project."),
Nuget: components.NewBoolFlag(Nuget, "Set to true to request audit for a .NET project."),
Pip: components.NewBoolFlag(Pip, "Set to true to request audit for a Pip project."),
Pipenv: components.NewBoolFlag(Pipenv, "Set to true to request audit for a Pipenv project."),
Poetry: components.NewBoolFlag(Poetry, "Set to true to request audit for a Poetry project."),
Go: components.NewBoolFlag(Go, "Set to true to request audit for a Go project."),
DepType: components.NewStringFlag(DepType, "[npm] Defines npm dependencies type. Possible values are: all, devOnly and prodOnly."),
Mvn: components.NewBoolFlag(Mvn, "Set to true to request audit for a Maven project."),
Gradle: components.NewBoolFlag(Gradle, "Set to true to request audit for a Gradle project."),
Npm: components.NewBoolFlag(Npm, "Set to true to request audit for a npm project."),
Pnpm: components.NewBoolFlag(Pnpm, "Set to true to request audit for a Pnpm project."),
Yarn: components.NewBoolFlag(Yarn, "Set to true to request audit for a Yarn project."),
Nuget: components.NewBoolFlag(Nuget, "Set to true to request audit for a .NET project."),
Pip: components.NewBoolFlag(Pip, "Set to true to request audit for a Pip project."),
Pipenv: components.NewBoolFlag(Pipenv, "Set to true to request audit for a Pipenv project."),
Poetry: components.NewBoolFlag(Poetry, "Set to true to request audit for a Poetry project."),
Go: components.NewBoolFlag(Go, "Set to true to request audit for a Go project."),
DepType: components.NewStringFlag(DepType, "[npm] Defines npm dependencies type. Possible values are: all, devOnly and prodOnly."),
MaxTreeDepth: components.NewStringFlag(MaxTreeDepth, "[pnpm] Max depth of the generated dependencies tree for SCA scan.", components.WithStrDefaultValue("Infinity")),
ThirdPartyContextualAnalysis: components.NewBoolFlag(
ThirdPartyContextualAnalysis,
"[npm] when set, the Contextual Analysis scan also uses the code of the project dependencies to determine the applicability of the vulnerability.",
Expand Down
30 changes: 4 additions & 26 deletions cli/scancommands.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func ScanCmd(c *components.Context) error {
if err != nil {
return err
}
xrayVersion, xscVersion, err := GetJfrogServicesVersion(serverDetails)
xrayVersion, xscVersion, err := xsc.GetJfrogServicesVersion(serverDetails)
if err != nil {
return err
}
Expand Down Expand Up @@ -453,7 +453,7 @@ func CreateAuditCmd(c *components.Context) (string, string, *coreConfig.ServerDe
if err != nil {
return "", "", nil, nil, err
}
xrayVersion, xscVersion, err := GetJfrogServicesVersion(serverDetails)
xrayVersion, xscVersion, err := xsc.GetJfrogServicesVersion(serverDetails)
if err != nil {
return "", "", nil, nil, err
}
Expand Down Expand Up @@ -500,6 +500,7 @@ func CreateAuditCmd(c *components.Context) (string, string, *coreConfig.ServerDe
SetInsecureTls(c.GetBoolFlagValue(flags.InsecureTls)).
SetNpmScope(c.GetStringFlagValue(flags.DepType)).
SetPipRequirementsFile(c.GetStringFlagValue(flags.RequirementsFile)).
SetMaxTreeDepth(c.GetStringFlagValue(flags.MaxTreeDepth)).
SetExclusions(pluginsCommon.GetStringsArrFlagValue(c, flags.Exclusions))
return xrayVersion, xscVersion, serverDetails, auditCmd, err
}
Expand Down Expand Up @@ -713,7 +714,7 @@ func DockerScan(c *components.Context, image string) error {
if err != nil {
return err
}
xrayVersion, xscVersion, err := GetJfrogServicesVersion(serverDetails)
xrayVersion, xscVersion, err := xsc.GetJfrogServicesVersion(serverDetails)
if err != nil {
return err
}
Expand Down Expand Up @@ -747,26 +748,3 @@ func DockerScan(c *components.Context, image string) error {
}
return progressbar.ExecWithProgress(containerScanCommand)
}

func GetJfrogServicesVersion(serverDetails *coreConfig.ServerDetails) (xrayVersion, xscVersion string, err error) {
xrayManager, err := xray.CreateXrayServiceManager(serverDetails)
if err != nil {
return
}
xrayVersion, err = xrayManager.GetVersion()
if err != nil {
return
}
log.Debug("Xray version: " + xrayVersion)
xscService, err := xsc.CreateXscService(xrayVersion, serverDetails)
if err != nil {
return
}
xscVersion, e := xscService.GetVersion()
if e != nil {
log.Debug("Using Xray: " + e.Error())
return
}
log.Debug("XSC version: " + xscVersion)
return
}
32 changes: 14 additions & 18 deletions commands/audit/sca/pnpm/pnpm.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@ import (
"github.com/jfrog/gofrog/datastructures"
"github.com/jfrog/gofrog/io"
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"

"github.com/jfrog/jfrog-cli-security/commands/audit/sca"
"github.com/jfrog/jfrog-cli-security/commands/audit/sca/npm"
"github.com/jfrog/jfrog-cli-security/utils"
Expand All @@ -21,6 +18,7 @@ import (
"github.com/jfrog/jfrog-client-go/utils/errorutils"
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
"github.com/jfrog/jfrog-client-go/utils/log"
"golang.org/x/exp/maps"

biutils "github.com/jfrog/build-info-go/utils"
xrayUtils "github.com/jfrog/jfrog-client-go/xray/services/utils"
Expand Down Expand Up @@ -123,13 +121,17 @@ func installProjectIfNeeded(pnpmExecPath, workingDir string) (dirForDependencies
err = fmt.Errorf("failed copying project to temp dir: %w", err)
return
}
err = getPnpmCmd(pnpmExecPath, dirForDependenciesCalculation, "install", npm.IgnoreScriptsFlag).GetCmd().Run()
output, err := getPnpmCmd(pnpmExecPath, dirForDependenciesCalculation, "install", npm.IgnoreScriptsFlag).GetCmd().CombinedOutput()
if err != nil {
err = fmt.Errorf("failed to install project: %w\n%s", err, string(output))
}
return
}

// Run 'pnpm ls ...' command (project must be installed) and parse the returned result to create a dependencies trees for the projects.
func calculateDependencies(executablePath, workingDir string, params utils.AuditParams) (dependencyTrees []*xrayUtils.GraphNode, uniqueDeps []string, err error) {
lsArgs := append([]string{"--depth", "Infinity", "--json", "--long"}, params.Args()...)
lsArgs := append([]string{"--depth", params.MaxTreeDepth(), "--json", "--long"}, params.Args()...)
log.Debug("Running Pnpm ls command with args:", lsArgs)
npmLsCmdContent, err := getPnpmCmd(executablePath, workingDir, "ls", lsArgs...).RunWithOutput()
if err != nil {
return
Expand Down Expand Up @@ -163,13 +165,13 @@ func createProjectDependenciesTree(project pnpmLsProject) map[string]xray.DepTre
for depName, dependency := range project.Dependencies {
directDependency := getDependencyId(depName, dependency.Version)
directDependencies = append(directDependencies, directDependency)
appendTransitiveDependencies(directDependency, dependency.Dependencies, treeMap)
appendTransitiveDependencies(directDependency, dependency.Dependencies, &treeMap)
}
// Handle dev-dependencies
for depName, dependency := range project.DevDependencies {
directDependency := getDependencyId(depName, dependency.Version)
directDependencies = append(directDependencies, directDependency)
appendTransitiveDependencies(directDependency, dependency.Dependencies, treeMap)
appendTransitiveDependencies(directDependency, dependency.Dependencies, &treeMap)
}
if len(directDependencies) > 0 {
treeMap[getDependencyId(project.Name, project.Version)] = xray.DepTreeNode{Children: directDependencies}
Expand All @@ -182,21 +184,15 @@ func getDependencyId(depName, version string) string {
return techutils.Npm.GetPackageTypeId() + depName + ":" + version
}

func appendTransitiveDependencies(parent string, dependencies map[string]pnpmLsDependency, result map[string]xray.DepTreeNode) {
func appendTransitiveDependencies(parent string, dependencies map[string]pnpmLsDependency, result *map[string]xray.DepTreeNode) {
for depName, dependency := range dependencies {
dependencyId := getDependencyId(depName, dependency.Version)
if node, ok := result[parent]; ok {
node.Children = appendUniqueChild(node.Children, dependencyId)
if node, ok := (*result)[parent]; ok {
node.Children = append(node.Children, dependencyId)
(*result)[parent] = node
} else {
result[parent] = xray.DepTreeNode{Children: []string{dependencyId}}
(*result)[parent] = xray.DepTreeNode{Children: []string{dependencyId}}
}
appendTransitiveDependencies(dependencyId, dependency.Dependencies, result)
}
}

func appendUniqueChild(children []string, candidateDependency string) []string {
if slices.Contains(children, candidateDependency) {
return children
}
return append(children, candidateDependency)
}
70 changes: 68 additions & 2 deletions commands/audit/sca/pnpm/pnpm_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package pnpm

import (
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
"path/filepath"
"sort"
"testing"

"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

Expand All @@ -16,6 +18,70 @@ import (
"github.com/jfrog/jfrog-cli-security/utils"
)

func TestBuildDependencyTreeLimitedDepth(t *testing.T) {
// Create and change directory to test workspace
_, cleanUp := sca.CreateTestWorkspace(t, filepath.Join("projects", "package-managers", "npm", "npm-big-tree"))
defer cleanUp()
testCases := []struct {
name string
treeDepth string
expectedUniqueDeps []string
expectedTree *xrayUtils.GraphNode
}{
{
name: "Only direct dependencies",
treeDepth: "0",
expectedUniqueDeps: []string{
"npm://zen-website:1.0.0",
"npm://balaganjs:1.0.0",
},
expectedTree: &xrayUtils.GraphNode{
Id: "npm://zen-website:1.0.0",
Nodes: []*xrayUtils.GraphNode{{Id: "npm://balaganjs:1.0.0"}},
},
},
{
name: "With transitive dependencies",
treeDepth: "1",
expectedUniqueDeps: []string{
"npm://axios:1.7.9",
"npm://balaganjs:1.0.0",
"npm://yargs:13.3.0",
"npm://zen-website:1.0.0",
},
expectedTree: &xrayUtils.GraphNode{
Id: "npm://zen-website:1.0.0",
Nodes: []*xrayUtils.GraphNode{
{
Id: "npm://balaganjs:1.0.0",
Nodes: []*xrayUtils.GraphNode{{Id: "npm://axios:1.7.9"}, {Id: "npm://yargs:13.3.0"}},
},
},
},
},
}

for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
// Build dependency tree
params := &utils.AuditBasicParams{}
rootNode, uniqueDeps, err := BuildDependencyTree(params.SetMaxTreeDepth(testCase.treeDepth))
require.NoError(t, err)
sort.Slice(uniqueDeps, func(i, j int) bool {
return uniqueDeps[i] < uniqueDeps[j]
})
// Validations
assert.ElementsMatch(t, uniqueDeps, testCase.expectedUniqueDeps, "First is actual, Second is Expected")
if assert.Len(t, rootNode, 1) {
assert.Equal(t, rootNode[0].Id, testCase.expectedTree.Id)
if !tests.CompareTree(testCase.expectedTree, rootNode[0]) {
t.Error("expected:", testCase.expectedTree.Nodes, "got:", rootNode[0].Nodes)
}
}
})
}
}

func TestBuildDependencyTree(t *testing.T) {
// Create and change directory to test workspace
_, cleanUp := sca.CreateTestWorkspace(t, filepath.Join("projects", "package-managers", "npm", "npm-no-lock"))
Expand Down
2 changes: 1 addition & 1 deletion commands/audit/scarunner.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ func buildDependencyTree(scan *results.TargetResults, params *AuditParams) (*Dep
}
treeResult, techErr := GetTechDependencyTree(params.AuditBasicParams, serverDetails, scan.Technology)
if techErr != nil {
return nil, fmt.Errorf("failed while building '%s' dependency tree:\n%w", scan.Technology, techErr)
return nil, fmt.Errorf("failed while building '%s' dependency tree: %w", scan.Technology, techErr)
}
if treeResult.FlatTree == nil || len(treeResult.FlatTree.Nodes) == 0 {
return nil, errorutils.CheckErrorf("no dependencies were found. Please try to build your project and re-run the audit command")
Expand Down
10 changes: 5 additions & 5 deletions commands/enrich/enrich.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package enrich

import (
"encoding/json"
"encoding/xml"
"errors"
"fmt"
"github.com/jfrog/jfrog-cli-security/utils/results/output"
"os"
"os/exec"
"path/filepath"
Expand All @@ -17,7 +17,6 @@ import (
"github.com/jfrog/jfrog-cli-security/commands/enrich/enrichgraph"
"github.com/jfrog/jfrog-cli-security/utils"
"github.com/jfrog/jfrog-cli-security/utils/results"
"github.com/jfrog/jfrog-cli-security/utils/results/output"
"github.com/jfrog/jfrog-cli-security/utils/techutils"
"github.com/jfrog/jfrog-cli-security/utils/xray"
"github.com/jfrog/jfrog-client-go/artifactory/services/fspatterns"
Expand All @@ -27,6 +26,7 @@ import (
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
"github.com/jfrog/jfrog-client-go/utils/log"
"github.com/jfrog/jfrog-client-go/xray/services"
orderedJson "github.com/virtuald/go-ordered-json"
)

type FileContext func(string) parallel.TaskFunc
Expand Down Expand Up @@ -75,8 +75,8 @@ func AppendVulnsToJson(cmdResults *results.SecurityCommandResults) error {
if err != nil {
return fmt.Errorf("error reading file: %s", err.Error())
}
var data map[string]interface{}
err = json.Unmarshal(fileContent, &data)
var data orderedJson.OrderedObject
err = orderedJson.Unmarshal(fileContent, &data)
if err != nil {
return fmt.Errorf("error parsing JSON: %s", err.Error())
}
Expand All @@ -93,7 +93,7 @@ func AppendVulnsToJson(cmdResults *results.SecurityCommandResults) error {
vulnerabilities = append(vulnerabilities, vulnerability)
}
}
data["vulnerabilities"] = vulnerabilities
data = append(data, orderedJson.Member{Key: "vulnerabilities", Value: vulnerabilities})
return output.PrintJson(data)
}

Expand Down
7 changes: 6 additions & 1 deletion commands/scan/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/jfrog/jfrog-cli-security/utils/techutils"
"github.com/jfrog/jfrog-cli-security/utils/xray"
"github.com/jfrog/jfrog-cli-security/utils/xray/scangraph"
"github.com/jfrog/jfrog-cli-security/utils/xsc"
xrayUtils "github.com/jfrog/jfrog-client-go/xray/services/utils"
"golang.org/x/sync/errgroup"

Expand Down Expand Up @@ -625,5 +626,9 @@ func directDepsListFromVulnerabilities(scanResult ...services.ScanResponse) *[]s
}

func ConditionalUploadDefaultScanFunc(serverDetails *config.ServerDetails, fileSpec *spec.SpecFiles, threads int, scanOutputFormat format.OutputFormat) error {
return NewScanCommand().SetServerDetails(serverDetails).SetSpec(fileSpec).SetThreads(threads).SetOutputFormat(scanOutputFormat).SetFail(true).SetPrintExtendedTable(false).Run()
xrayVersion, xscVersion, err := xsc.GetJfrogServicesVersion(serverDetails)
if err != nil {
return err
}
return NewScanCommand().SetServerDetails(serverDetails).SetXrayVersion(xrayVersion).SetXscVersion(xscVersion).SetSpec(fileSpec).SetThreads(threads).SetOutputFormat(scanOutputFormat).SetFail(true).SetPrintExtendedTable(false).Run()
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ require (
github.com/owenrumney/go-sarif/v2 v2.3.0
github.com/stretchr/testify v1.9.0
github.com/urfave/cli v1.22.16
github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f
golang.org/x/sync v0.9.0
golang.org/x/text v0.20.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,8 @@ github.com/urfave/cli v1.22.16 h1:MH0k6uJxdwdeWQTwhSO42Pwr4YLrNLwBtg1MRgTqPdQ=
github.com/urfave/cli v1.22.16/go.mod h1:EeJR6BKodywf4zciqrdw6hpCPk68JO9z5LazXZMn5Po=
github.com/vbauerster/mpb/v8 v8.8.3 h1:dTOByGoqwaTJYPubhVz3lO5O6MK553XVgUo33LdnNsQ=
github.com/vbauerster/mpb/v8 v8.8.3/go.mod h1:JfCCrtcMsJwP6ZwMn9e5LMnNyp3TVNpUWWkN+nd4EWk=
github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo=
github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c=
github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
github.com/xanzy/go-gitlab v0.110.0 h1:hsFIFp01v/0D0sdUXoZfRk6CROzZbHQplk6NzKSFKhc=
Expand Down
2 changes: 1 addition & 1 deletion jas/analyzermanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
const (
ApplicabilityFeatureId = "contextual_analysis"
AnalyzerManagerZipName = "analyzerManager.zip"
defaultAnalyzerManagerVersion = "1.12.0"
defaultAnalyzerManagerVersion = "1.12.2"
analyzerManagerDownloadPath = "xsc-gen-exe-analyzer-manager-local/v1"
analyzerManagerDirName = "analyzerManager"
analyzerManagerExecutableName = "analyzerManager"
Expand Down
Loading
Loading