From 367d94eb073fc5b1119917dccb8119ea63da8fb7 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:02:39 +0300 Subject: [PATCH 01/14] added new AnalyzerManager env var for application key --- jas/analyzermanager.go | 1 + 1 file changed, 1 insertion(+) diff --git a/jas/analyzermanager.go b/jas/analyzermanager.go index f7ca63d5b..d52384668 100644 --- a/jas/analyzermanager.go +++ b/jas/analyzermanager.go @@ -39,6 +39,7 @@ const ( watchesEnvVariable = "AM_WATCHES" projectEnvVariable = "AM_PROJECT_KEY" gitRepoEnvVariable = "AM_GIT_REPO_VIOLATIONS" + applicationKeyEnvVariable = "AM_APPLICATION_KEY" notEntitledExitCode = 31 unsupportedCommandExitCode = 13 unsupportedOsExitCode = 55 From d5bd7e8a13d93608233649bfff09af15690cb3dc Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:03:24 +0300 Subject: [PATCH 02/14] added new field to ResultContext to hold application key --- utils/results/results.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/results/results.go b/utils/results/results.go index e9c680ef4..02b65daec 100644 --- a/utils/results/results.go +++ b/utils/results/results.go @@ -55,6 +55,8 @@ type ResultContext struct { ProjectKey string `json:"project_key,omitempty"` // (Resource) If gitRepository is provided we will fetch the watches defined on the git repository. GitRepoHttpsCloneUrl string `json:"git_repo_key,omitempty"` + // (Resource) If applicationKey is provided we will fetch the watches defined on the application, and the scans will be performed and presented in the Application context only. + ApplicationKey string `json:"application_key,omitempty"` // If non of the above is provided or requested, the results will include vulnerabilities IncludeVulnerabilities bool `json:"include_vulnerabilities"` // If requested, the results will include licenses From cae37ee1aee5111f70b0adc353be1f2a3c6420b7 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:07:29 +0300 Subject: [PATCH 03/14] added app-key to ResultsContext creation, and passed app-key to AnalyzerManager env vars map --- commands/audit/audit.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/commands/audit/audit.go b/commands/audit/audit.go index 28e126db0..1185d86ee 100644 --- a/commands/audit/audit.go +++ b/commands/audit/audit.go @@ -103,11 +103,12 @@ func (auditCmd *AuditCommand) SetThreads(threads int) *AuditCommand { } // Create a results context based on the provided parameters. resolves conflicts between the parameters based on the retrieved platform watches. -func CreateAuditResultsContext(serverDetails *config.ServerDetails, xrayVersion string, watches []string, artifactoryRepoPath, projectKey, gitRepoHttpsCloneUrl string, includeVulnerabilities, includeLicenses, includeSbom bool) (context results.ResultContext) { +func CreateAuditResultsContext(serverDetails *config.ServerDetails, xrayVersion string, watches []string, artifactoryRepoPath, projectKey, gitRepoHttpsCloneUrl, applicationKey string, includeVulnerabilities, includeLicenses, includeSbom bool) (context results.ResultContext) { context = results.ResultContext{ RepoPath: artifactoryRepoPath, Watches: watches, ProjectKey: projectKey, + ApplicationKey: applicationKey, IncludeVulnerabilities: shouldIncludeVulnerabilities(includeVulnerabilities, watches, artifactoryRepoPath, projectKey, ""), IncludeLicenses: includeLicenses, IncludeSbom: includeSbom, @@ -180,6 +181,8 @@ func (auditCmd *AuditCommand) Run() (err error) { auditCmd.targetRepoPath, auditCmd.projectKey, auditCmd.gitRepoHttpsCloneUrl, + // AppTrust is currently not supported in Audit command, therefore we pass an empty applicationKey + "", auditCmd.IncludeVulnerabilities, auditCmd.IncludeLicenses, auditCmd.IncludeSbom, @@ -435,6 +438,7 @@ func AddJasScansToRunner(auditParallelRunner *utils.SecurityParallelRunner, audi auditParams.GetMultiScanId(), utils.GetGitRepoUrlKey(auditParams.resultsContext.GitRepoHttpsCloneUrl), auditParams.resultsContext.ProjectKey, + auditParams.resultsContext.ApplicationKey, auditParams.resultsContext.Watches, scanResults.GetTechnologies()..., ), From 20b66ae13a3d84a3e70d3a14571918b64aacc6c2 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:07:52 +0300 Subject: [PATCH 04/14] added testcase for adding ap-key to ResultContext creation --- commands/audit/audit_test.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/commands/audit/audit_test.go b/commands/audit/audit_test.go index a00c736db..64e27c71b 100644 --- a/commands/audit/audit_test.go +++ b/commands/audit/audit_test.go @@ -829,6 +829,7 @@ func TestCreateResultsContext(t *testing.T) { mockWatches := []string{"watch-1", "watch-2"} mockProjectKey := "project" mockArtifactoryRepoPath := "repo/path" + mockApplicationKey := "app-key" tests := []struct { name string @@ -862,6 +863,7 @@ func TestCreateResultsContext(t *testing.T) { httpCloneUrl string watches []string jfrogProjectKey string + jfrogApplicationKey string includeVulnerabilities bool includeLicenses bool includeSbom bool @@ -870,6 +872,7 @@ func TestCreateResultsContext(t *testing.T) { expectedHttpCloneUrl string expectedWatches []string expectedJfrogProjectKey string + expectedJfrogApplicationKey string expectedIncludeVulnerabilities bool expectedIncludeLicenses bool expectedIncludeSbom bool @@ -900,6 +903,12 @@ func TestCreateResultsContext(t *testing.T) { includeLicenses: true, expectedIncludeLicenses: true, }, + { + name: "Application Key", + jfrogApplicationKey: mockApplicationKey, + expectedJfrogApplicationKey: mockApplicationKey, + expectedIncludeVulnerabilities: true, + }, { name: "Git Clone Url", httpCloneUrl: validations.TestMockGitInfo.Source.GitRepoHttpsCloneUrl, @@ -911,6 +920,7 @@ func TestCreateResultsContext(t *testing.T) { httpCloneUrl: validations.TestMockGitInfo.Source.GitRepoHttpsCloneUrl, watches: mockWatches, jfrogProjectKey: mockProjectKey, + jfrogApplicationKey: mockApplicationKey, includeVulnerabilities: true, includeLicenses: true, includeSbom: true, @@ -918,6 +928,7 @@ func TestCreateResultsContext(t *testing.T) { expectedHttpCloneUrl: testCaseExpectedGitRepoHttpsCloneUrl, expectedWatches: mockWatches, expectedJfrogProjectKey: mockProjectKey, + expectedJfrogApplicationKey: mockApplicationKey, expectedIncludeVulnerabilities: true, expectedIncludeLicenses: true, expectedIncludeSbom: true, @@ -927,11 +938,12 @@ func TestCreateResultsContext(t *testing.T) { t.Run(fmt.Sprintf("%s - %s", test.name, testCase.name), func(t *testing.T) { mockServer, serverDetails, _ := validations.XrayServer(t, validations.MockServerParams{XrayVersion: test.xrayVersion, ReturnMockPlatformWatches: test.expectedPlatformWatches}) defer mockServer.Close() - context := CreateAuditResultsContext(serverDetails, test.xrayVersion, testCase.watches, testCase.artifactoryRepoPath, testCase.jfrogProjectKey, testCase.httpCloneUrl, testCase.includeVulnerabilities, testCase.includeLicenses, testCase.includeSbom) + context := CreateAuditResultsContext(serverDetails, test.xrayVersion, testCase.watches, testCase.artifactoryRepoPath, testCase.jfrogProjectKey, testCase.httpCloneUrl, testCase.jfrogApplicationKey, testCase.includeVulnerabilities, testCase.includeLicenses, testCase.includeSbom) assert.Equal(t, testCase.expectedArtifactoryRepoPath, context.RepoPath) assert.Equal(t, testCase.expectedHttpCloneUrl, context.GitRepoHttpsCloneUrl) assert.Equal(t, testCase.expectedWatches, context.Watches) assert.Equal(t, testCase.expectedJfrogProjectKey, context.ProjectKey) + assert.Equal(t, testCase.expectedJfrogApplicationKey, context.ApplicationKey) assert.Equal(t, testCase.expectedIncludeVulnerabilities, context.IncludeVulnerabilities) assert.Equal(t, testCase.expectedIncludeLicenses, context.IncludeLicenses) assert.Equal(t, testCase.expectedIncludeSbom, context.IncludeSbom) From f30e199ce304a2113ea4df0ec39822024b303c1e Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:09:09 +0300 Subject: [PATCH 05/14] enabled passing app-key to AnalyzerManager env vars map + test --- jas/common.go | 5 ++++- jas/common_test.go | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/jas/common.go b/jas/common.go index 1a29f4930..f196f5940 100644 --- a/jas/common.go +++ b/jas/common.go @@ -450,7 +450,7 @@ func CheckForSecretValidation(xrayManager *xray.XrayServicesManager, xrayVersion return err == nil && isEnabled } -func GetAnalyzerManagerXscEnvVars(msi string, gitRepoUrl, projectKey string, watches []string, technologies ...techutils.Technology) map[string]string { +func GetAnalyzerManagerXscEnvVars(msi string, gitRepoUrl, projectKey, applicationKey string, watches []string, technologies ...techutils.Technology) map[string]string { envVars := map[string]string{utils.JfMsiEnvVariable: msi} if gitRepoUrl != "" { envVars[gitRepoEnvVariable] = gitRepoUrl @@ -458,6 +458,9 @@ func GetAnalyzerManagerXscEnvVars(msi string, gitRepoUrl, projectKey string, wat if projectKey != "" { envVars[projectEnvVariable] = projectKey } + if applicationKey != "" { + envVars[applicationKeyEnvVariable] = applicationKey + } if len(watches) > 0 { envVars[watchesEnvVariable] = strings.Join(watches, ",") } diff --git a/jas/common_test.go b/jas/common_test.go index d5f907f8f..ad5be8486 100644 --- a/jas/common_test.go +++ b/jas/common_test.go @@ -416,6 +416,7 @@ func TestGetAnalyzerManagerXscEnvVars(t *testing.T) { msi string gitRepoUrl string projectKey string + applicationKey string watches []string technologies []techutils.Technology expectedOutput map[string]string @@ -482,10 +483,24 @@ func TestGetAnalyzerManagerXscEnvVars(t *testing.T) { watchesEnvVariable: "watch1,watch2", }, }, + { + name: "With Application Key", + msi: "msi", + gitRepoUrl: "gitRepoUrl", + applicationKey: "appKey", + technologies: []techutils.Technology{techutils.Npm}, + expectedOutput: map[string]string{ + JfPackageManagerEnvVariable: string(techutils.Npm), + JfLanguageEnvVariable: string(techutils.JavaScript), + utils.JfMsiEnvVariable: "msi", + gitRepoEnvVariable: "gitRepoUrl", + applicationKeyEnvVariable: "appKey", + }, + }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - assert.Equal(t, test.expectedOutput, GetAnalyzerManagerXscEnvVars(test.msi, test.gitRepoUrl, test.projectKey, test.watches, test.technologies...)) + assert.Equal(t, test.expectedOutput, GetAnalyzerManagerXscEnvVars(test.msi, test.gitRepoUrl, test.projectKey, test.applicationKey, test.watches, test.technologies...)) }) } } From efe5c8bb803b40a7e75755ee980cc2915ee7b151 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:09:57 +0300 Subject: [PATCH 06/14] fix broken signature with empty app-key in git-audit (apptrust not supported) --- commands/git/audit/gitaudit.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/commands/git/audit/gitaudit.go b/commands/git/audit/gitaudit.go index f056d87a1..753045b73 100644 --- a/commands/git/audit/gitaudit.go +++ b/commands/git/audit/gitaudit.go @@ -84,6 +84,8 @@ func toAuditParams(params GitAuditParams) *sourceAudit.AuditParams { params.resultsContext.RepoPath, params.resultsContext.ProjectKey, params.source.Source.GitRepoHttpsCloneUrl, + // AppTrust is currently not supported in Git Audit command, therefore we pass an empty applicationKey + "", params.resultsContext.IncludeVulnerabilities, params.resultsContext.IncludeLicenses, false, From d3ba2d69544ba3078e74d154b3e70de21919e64f Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:10:49 +0300 Subject: [PATCH 07/14] fix broken signature with empty app-key in scan command (apptrust not supported) + aligned the empty GitRepoHttpsCloneUrl to pass empty value for clarity --- commands/scan/scan.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/commands/scan/scan.go b/commands/scan/scan.go index 6064c2c59..f706f8e9d 100644 --- a/commands/scan/scan.go +++ b/commands/scan/scan.go @@ -497,9 +497,11 @@ func (scanCmd *ScanCommand) RunBinaryJasScans(cmdType utils.CommandType, msi str jas.NotDiffScanEnvValue, jas.GetAnalyzerManagerXscEnvVars( msi, - // Passing but empty since not supported for binary scans - scanCmd.resultsContext.GitRepoHttpsCloneUrl, + // GitRepoHttpsCloneUrl is not relevant for binary scans, therefore we pass an empty value + "", scanCmd.resultsContext.ProjectKey, + // AppTrust is not supported for binary scans, therefore we pass an empty applicationKey + "", scanCmd.resultsContext.Watches, targetResults.GetTechnologies()..., ), From abe801b74e4c183d6cb819ddd90026ce2c0f5bcf Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 14:11:08 +0300 Subject: [PATCH 08/14] fixed broken signature in test --- jas/runner/jasrunner_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jas/runner/jasrunner_test.go b/jas/runner/jasrunner_test.go index 0838a8b46..9b32a65fb 100644 --- a/jas/runner/jasrunner_test.go +++ b/jas/runner/jasrunner_test.go @@ -43,7 +43,7 @@ func TestJasRunner(t *testing.T) { securityParallelRunnerForTest := utils.CreateSecurityParallelRunner(cliutils.Threads) targetResults := results.NewCommandResults(utils.SourceCode).SetEntitledForJas(true).SetSecretValidation(true).NewScanResults(results.ScanTarget{Target: "target", Technology: techutils.Pip}) - jasScanner, err := jas.NewJasScanner(&jas.FakeServerDetails, jas.WithEnvVars(false, jas.NotDiffScanEnvValue, jas.GetAnalyzerManagerXscEnvVars("", "", "", []string{}, targetResults.GetTechnologies()...))) + jasScanner, err := jas.NewJasScanner(&jas.FakeServerDetails, jas.WithEnvVars(false, jas.NotDiffScanEnvValue, jas.GetAnalyzerManagerXscEnvVars("", "", "", "", []string{}, targetResults.GetTechnologies()...))) assert.NoError(t, err) targetResults.NewScaScanResults(0, jas.FakeBasicXrayResults[0]) From 553689c1e97b57a0ecda297e45a3479c6145780d Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Mon, 30 Jun 2025 15:51:36 +0300 Subject: [PATCH 09/14] fix break in conan test --- sca/bom/buildinfo/technologies/conan/conan_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sca/bom/buildinfo/technologies/conan/conan_test.go b/sca/bom/buildinfo/technologies/conan/conan_test.go index 6bedc5cf5..0870f8379 100644 --- a/sca/bom/buildinfo/technologies/conan/conan_test.go +++ b/sca/bom/buildinfo/technologies/conan/conan_test.go @@ -18,7 +18,7 @@ var expectedResult = &xrayUtils.GraphNode{ Nodes: []*xrayUtils.GraphNode{ {Id: "conan://zlib:1.3.1"}, {Id: "conan://openssl:3.0.9", Nodes: []*xrayUtils.GraphNode{{Id: "conan://zlib:1.3.1"}}}, - {Id: "conan://meson:1.4.1", Nodes: []*xrayUtils.GraphNode{{Id: "conan://ninja:1.12.1"}}}, + {Id: "conan://meson:1.4.1", Nodes: []*xrayUtils.GraphNode{{Id: "conan://ninja:1.13.0"}}}, }, } var expectedUniqueDeps = []string{"conan://openssl:3.0.9", "conan://zlib:1.3.1", "conan://meson:1.4.1", "conan://ninja:1.12.1"} From 1439cfde54b8b2ac7745bd81c51ffcd0deea6f33 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Tue, 1 Jul 2025 09:35:02 +0300 Subject: [PATCH 10/14] fix break in conan test --- sca/bom/buildinfo/technologies/conan/conan_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sca/bom/buildinfo/technologies/conan/conan_test.go b/sca/bom/buildinfo/technologies/conan/conan_test.go index 0870f8379..6bedc5cf5 100644 --- a/sca/bom/buildinfo/technologies/conan/conan_test.go +++ b/sca/bom/buildinfo/technologies/conan/conan_test.go @@ -18,7 +18,7 @@ var expectedResult = &xrayUtils.GraphNode{ Nodes: []*xrayUtils.GraphNode{ {Id: "conan://zlib:1.3.1"}, {Id: "conan://openssl:3.0.9", Nodes: []*xrayUtils.GraphNode{{Id: "conan://zlib:1.3.1"}}}, - {Id: "conan://meson:1.4.1", Nodes: []*xrayUtils.GraphNode{{Id: "conan://ninja:1.13.0"}}}, + {Id: "conan://meson:1.4.1", Nodes: []*xrayUtils.GraphNode{{Id: "conan://ninja:1.12.1"}}}, }, } var expectedUniqueDeps = []string{"conan://openssl:3.0.9", "conan://zlib:1.3.1", "conan://meson:1.4.1", "conan://ninja:1.12.1"} From 26ebc4228211066ccf9b7114f7975597d114e344 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Tue, 1 Jul 2025 10:27:42 +0300 Subject: [PATCH 11/14] fix break in conan test --- sca/bom/buildinfo/technologies/conan/conan_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sca/bom/buildinfo/technologies/conan/conan_test.go b/sca/bom/buildinfo/technologies/conan/conan_test.go index 6bedc5cf5..0601e09c5 100644 --- a/sca/bom/buildinfo/technologies/conan/conan_test.go +++ b/sca/bom/buildinfo/technologies/conan/conan_test.go @@ -21,7 +21,7 @@ var expectedResult = &xrayUtils.GraphNode{ {Id: "conan://meson:1.4.1", Nodes: []*xrayUtils.GraphNode{{Id: "conan://ninja:1.12.1"}}}, }, } -var expectedUniqueDeps = []string{"conan://openssl:3.0.9", "conan://zlib:1.3.1", "conan://meson:1.4.1", "conan://ninja:1.12.1"} +var expectedUniqueDeps = []string{"conan://openssl:3.0.9", "conan://zlib:1.3.1", "conan://meson:1.4.1", "conan://ninja:1.13.0"} func TestParseConanDependencyTree(t *testing.T) { _, cleanUp := technologies.CreateTestWorkspace(t, filepath.Join("other", "conan")) From 6f953225a2fa44b1aead0bc5646f6909e75ff704 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Tue, 1 Jul 2025 10:56:26 +0300 Subject: [PATCH 12/14] fix break in conan test --- sca/bom/buildinfo/technologies/conan/conan_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sca/bom/buildinfo/technologies/conan/conan_test.go b/sca/bom/buildinfo/technologies/conan/conan_test.go index 0601e09c5..d3809490c 100644 --- a/sca/bom/buildinfo/technologies/conan/conan_test.go +++ b/sca/bom/buildinfo/technologies/conan/conan_test.go @@ -58,7 +58,7 @@ func TestCalculateUniqueDeps(t *testing.T) { "1": {Name: "zlib", Version: "1.3.1"}, "2": {Name: "openssl", Version: "3.0.9"}, "3": {Name: "meson", Version: "1.4.1"}, - "4": {Name: "ninja", Version: "1.12.1"}, + "4": {Name: "ninja", Version: "1.13.0"}, "5": {Name: "openssl", Version: "3.0.9"}, // duplicate, should be removed } From 364f789ffbc6e21e2c735f88e89f976fd644e034 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Tue, 1 Jul 2025 12:04:10 +0300 Subject: [PATCH 13/14] fix break in conan test --- sca/bom/buildinfo/technologies/conan/conan_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sca/bom/buildinfo/technologies/conan/conan_test.go b/sca/bom/buildinfo/technologies/conan/conan_test.go index d3809490c..f23962499 100644 --- a/sca/bom/buildinfo/technologies/conan/conan_test.go +++ b/sca/bom/buildinfo/technologies/conan/conan_test.go @@ -18,7 +18,7 @@ var expectedResult = &xrayUtils.GraphNode{ Nodes: []*xrayUtils.GraphNode{ {Id: "conan://zlib:1.3.1"}, {Id: "conan://openssl:3.0.9", Nodes: []*xrayUtils.GraphNode{{Id: "conan://zlib:1.3.1"}}}, - {Id: "conan://meson:1.4.1", Nodes: []*xrayUtils.GraphNode{{Id: "conan://ninja:1.12.1"}}}, + {Id: "conan://meson:1.4.1", Nodes: []*xrayUtils.GraphNode{{Id: "conan://ninja:1.13.0"}}}, }, } var expectedUniqueDeps = []string{"conan://openssl:3.0.9", "conan://zlib:1.3.1", "conan://meson:1.4.1", "conan://ninja:1.13.0"} From 96fb3b54d69d160d7d11c3916c94a205b2aad1f0 Mon Sep 17 00:00:00 2001 From: Eran Turgeman Date: Tue, 1 Jul 2025 12:58:42 +0300 Subject: [PATCH 14/14] fix break in conan test --- tests/testdata/other/conan/dependencies.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/testdata/other/conan/dependencies.json b/tests/testdata/other/conan/dependencies.json index 1d433243b..488361456 100644 --- a/tests/testdata/other/conan/dependencies.json +++ b/tests/testdata/other/conan/dependencies.json @@ -133,7 +133,7 @@ "visible": true }, "4": { - "ref": "ninja/1.12.1", + "ref": "ninja/1.13.0", "run": true, "libs": false, "skip": false, @@ -887,7 +887,7 @@ "vendor": false, "dependencies": { "4": { - "ref": "ninja/1.12.1", + "ref": "ninja/1.13.0", "run": true, "libs": false, "skip": false, @@ -906,7 +906,7 @@ "test": false }, "4": { - "ref": "ninja/1.12.1#fd583651bf0c6a901943495d49878803", + "ref": "ninja/1.13.0#fd583651bf0c6a901943495d49878803", "id": "4", "recipe": "Downloaded", "package_id": "3593751651824fb813502c69c971267624ced41a", @@ -937,7 +937,7 @@ "win_bash_run": null, "default_options": null, "options_description": null, - "version": "1.12.1", + "version": "1.13.0", "topics": [ "ninja", "build" @@ -993,7 +993,7 @@ } }, "conf_info": {}, - "label": "ninja/1.12.1", + "label": "ninja/1.13.0", "info": { "settings": { "os": "Linux", @@ -1012,7 +1012,7 @@ }, "overrides": {}, "resolved_ranges": { - "ninja/[>=1.10.2 <2]": "ninja/1.12.1" + "ninja/[>=1.10.2 <2]": "ninja/1.13.0" }, "replaced_requires": {}, "error": null