@codacy/tools-checkov-3 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # @codacy/tools-checkov-3
2
2
 
3
3
  ## Table of Contents
4
+
4
5
  - [Overview](#overview)
5
6
  - [Updating patterns](#updating-patterns)
6
7
  - [Updating the Checkov version](#updating-the-checkov-version)
@@ -13,16 +14,16 @@
13
14
 
14
15
  Infrastructure-as-Code security scanner using the [Checkov](https://www.checkov.io/) binary. Scans Terraform, CloudFormation, Kubernetes, Dockerfile, and many other IaC frameworks for security misconfigurations. Uses the CLI execution strategy with Python/pip installation into an isolated virtual environment.
15
16
 
16
- | Property | Value |
17
- |----------|-------|
18
- | Tool ID | `Checkov` |
19
- | Codacy UUID | `13af9d89-1ce5-4fec-a168-765c3e7b26b3` |
20
- | Strategy | CLI |
21
- | Languages | JSON, YAML, Terraform |
22
- | Binary | `checkov` (Python package) |
23
- | File patterns | `**/*.tf`, `**/*.yaml`, `**/*.yml`, `**/*.json`, `**/Dockerfile` |
24
- | Pattern count | ~1,358 |
25
- | Pattern ID format | `Checkov_{check_id}` (e.g. `Checkov_CKV_AWS_41`) |
17
+ | Property | Value |
18
+ | ----------------- | ---------------------------------------------------------------- |
19
+ | Tool ID | `Checkov` |
20
+ | Codacy UUID | `13af9d89-1ce5-4fec-a168-765c3e7b26b3` |
21
+ | Strategy | CLI |
22
+ | Languages | JSON, YAML, Terraform |
23
+ | Binary | `checkov` (Python package) |
24
+ | File patterns | `**/*.tf`, `**/*.yaml`, `**/*.yml`, `**/*.json`, `**/Dockerfile` |
25
+ | Pattern count | ~1,358 |
26
+ | Pattern ID format | `Checkov_{check_id}` (e.g. `Checkov_CKV_AWS_41`) |
26
27
 
27
28
  ## Updating patterns
28
29
 
@@ -67,3 +68,9 @@ pnpm test
67
68
  - **Pattern filtering**: Uses `--check CKV_xxx,CKV_yyy,...` to run only specific checks. The `Checkov_` prefix is stripped from pattern IDs to get the raw check ID.
68
69
  - **Config files**: Looks for `.checkov.yaml` or `.checkov.yml`. When local config is active, passes `--config-file <path>`.
69
70
  - **Parsing errors**: Checkov reports `parsing_errors` in its JSON output, which are surfaced as `AnalysisError` objects with `kind: "ParsingError"`.
71
+ - **Preset mappings (`src/pattern-mappings.json`)**: gates 54 of the 1,358 patterns on a detected preset (Dockerfile, Terraform, GitHub Actions, CircleCI, GitLab CI, Bitbucket Pipelines, Azure Pipelines), so `init --auto` doesn't enable e.g. GitHub Actions checks in a repo with no `.github/workflows/`. The remaining 1,304 patterns stay universal (enabled everywhere) until their detection story is solved — this is deliberately conservative rather than approximate:
72
+ - `"Terraform"` maps **only** `CKV_TF_` (2 patterns — Terraform module-source hygiene, e.g. "use a commit hash"). The much larger cloud-provider families (`CKV_AWS_` 384, `CKV_AZURE_` 247, `CKV_GCP_` 124, and 12 smaller clouds — ~1,091 patterns total) are **not** Terraform-specific: Checkov evaluates the same resource-policy checks against CloudFormation/ARM/Bicep/Serverless Framework templates too (plain YAML/JSON, no `.tf` file involved) — confirmed by Codacy's own pattern metadata, where every single pattern carries the identical `languages: ["JSON", "YAML", "Terraform"]`. Gating them on `.tf` presence would silently drop all cloud checks for a CloudFormation/ARM/Serverless-only repo — a real false negative, not just noise the old universal behavior already had. They stay universal until discovery can recognize those other IaC formats too.
73
+ - Each CI platform also has a **second**, easily-confused prefix family for that platform's repo/org governance settings as managed via its own Terraform provider (e.g. `CKV_GIT_`/`CKV_GITHUB_` vs. the mapped `CKV_GHA_`; `CKV_GLB_`/`CKV_GITLAB_` vs. the mapped `CKV_GITLABCI_`). Those governance patterns need Terraform-provider-content parsing, not file presence, so they're intentionally left out of the mapping (40 patterns, universal for now).
74
+ - `CKV_K8S_`/`CKV2_K8S_`/`CKV_ARGO_` (121 patterns) are also left out — a bare Kubernetes manifest needs YAML content-sniffing (`apiVersion`/`kind`), not just a `.yaml` extension.
75
+ - `CKV_ANSIBLE_`/`CKV2_ANSIBLE_` (12) and `CKV_OPENAPI_` (21) are left out too — there's no Ansible-playbook or OpenAPI/AsyncAPI-spec detector in `discover()` at all yet.
76
+ - `CKV_SECRET_` (18) and `CKV_BCW_` (1) are excluded from every preset by design and stay universal — secret-scanning shouldn't be suppressed by any framework gate.
package/dist/index.js CHANGED
@@ -57,7 +57,7 @@ var patterns_default = [
57
57
  severityLevel: "High",
58
58
  title: "Ensure HTTPS URL usage with uri module",
59
59
  enabled: true,
60
- languages: ["JSON", "YAML", "Terraform"],
60
+ languages: ["YAML", "JSON", "Terraform"],
61
61
  parameters: []
62
62
  },
63
63
  {
@@ -66,7 +66,7 @@ var patterns_default = [
66
66
  severityLevel: "High",
67
67
  title: "Ensure HTTPS URL is used with get_url",
68
68
  enabled: true,
69
- languages: ["JSON", "YAML", "Terraform"],
69
+ languages: ["YAML", "JSON", "Terraform"],
70
70
  parameters: []
71
71
  },
72
72
  {
@@ -156,7 +156,7 @@ var patterns_default = [
156
156
  severityLevel: "High",
157
157
  title: "Ensure Auto Scaling Groups Associated with Load Balancers Use Elastic Load Balancing Health Checks",
158
158
  enabled: true,
159
- languages: ["JSON", "YAML", "Terraform"],
159
+ languages: ["Terraform"],
160
160
  parameters: [],
161
161
  tags: ["aws"]
162
162
  },
@@ -166,7 +166,7 @@ var patterns_default = [
166
166
  severityLevel: "Warning",
167
167
  title: "Ensure Auto Scaling is Enabled on DynamoDB Tables",
168
168
  enabled: true,
169
- languages: ["JSON", "YAML", "Terraform"],
169
+ languages: ["Terraform"],
170
170
  parameters: [],
171
171
  tags: ["aws"]
172
172
  },
@@ -230,7 +230,7 @@ var patterns_default = [
230
230
  severityLevel: "High",
231
231
  title: "Ensure Route53 A Record Has Attached Resource",
232
232
  enabled: true,
233
- languages: ["JSON", "YAML", "Terraform"],
233
+ languages: ["Terraform"],
234
234
  parameters: [],
235
235
  tags: ["aws"]
236
236
  },
@@ -555,7 +555,7 @@ var patterns_default = [
555
555
  severityLevel: "Warning",
556
556
  title: "Ensure Dedicated Master Node is Enabled for ElasticSearch/OpenSearch",
557
557
  enabled: true,
558
- languages: ["JSON", "YAML", "Terraform"],
558
+ languages: ["Terraform"],
559
559
  parameters: [],
560
560
  tags: ["aws"]
561
561
  },
@@ -574,7 +574,7 @@ var patterns_default = [
574
574
  severityLevel: "Warning",
575
575
  title: "Ensure RDS Instance Has Copy Tags to Snapshots Enabled",
576
576
  enabled: true,
577
- languages: ["JSON", "YAML", "Terraform"],
577
+ languages: ["Terraform"],
578
578
  parameters: [],
579
579
  tags: ["aws"]
580
580
  },
@@ -584,7 +584,7 @@ var patterns_default = [
584
584
  severityLevel: "Warning",
585
585
  title: "Ensure S3 Bucket Has Lifecycle Configuration",
586
586
  enabled: true,
587
- languages: ["JSON", "YAML", "Terraform"],
587
+ languages: ["Terraform"],
588
588
  parameters: [],
589
589
  tags: ["aws"]
590
590
  },
@@ -1261,7 +1261,7 @@ var patterns_default = [
1261
1261
  severityLevel: "Warning",
1262
1262
  title: "Ensure Virtual Machines Utilize Managed Disks",
1263
1263
  enabled: true,
1264
- languages: ["JSON", "YAML", "Terraform"],
1264
+ languages: ["Terraform"],
1265
1265
  parameters: []
1266
1266
  },
1267
1267
  {
@@ -1459,7 +1459,7 @@ var patterns_default = [
1459
1459
  severityLevel: "Warning",
1460
1460
  title: "Ensure PostgreSQL Database Flag 'log_duration' Is Set to 'on'",
1461
1461
  enabled: true,
1462
- languages: ["JSON", "YAML", "Terraform"],
1462
+ languages: ["SQL"],
1463
1463
  parameters: [],
1464
1464
  tags: ["gcp"]
1465
1465
  },
@@ -1478,7 +1478,7 @@ var patterns_default = [
1478
1478
  severityLevel: "Warning",
1479
1479
  title: "Ensure PostgreSQL Database Flag 'log_parser_stats' Is Set to 'off'",
1480
1480
  enabled: true,
1481
- languages: ["JSON", "YAML", "Terraform"],
1481
+ languages: ["SQL"],
1482
1482
  parameters: [],
1483
1483
  tags: ["gcp"]
1484
1484
  },
@@ -1488,7 +1488,7 @@ var patterns_default = [
1488
1488
  severityLevel: "Warning",
1489
1489
  title: "Ensure PostgreSQL Database Flag 'log_planner_stats' Is Set to 'off'",
1490
1490
  enabled: true,
1491
- languages: ["JSON", "YAML", "Terraform"],
1491
+ languages: ["Terraform"],
1492
1492
  parameters: [],
1493
1493
  tags: ["googlecloudplatform"]
1494
1494
  },
@@ -1498,7 +1498,7 @@ var patterns_default = [
1498
1498
  severityLevel: "Warning",
1499
1499
  title: "Ensure PostgreSQL Database Flag 'log_statement_stats' Is Set to 'off'",
1500
1500
  enabled: true,
1501
- languages: ["JSON", "YAML", "Terraform"],
1501
+ languages: ["SQL", "Terraform"],
1502
1502
  parameters: [],
1503
1503
  tags: ["gcp"]
1504
1504
  },
@@ -1970,7 +1970,7 @@ var patterns_default = [
1970
1970
  severityLevel: "Warning",
1971
1971
  title: "Ensure OSS Bucket Has Transfer Acceleration Enabled",
1972
1972
  enabled: true,
1973
- languages: ["JSON", "YAML", "Terraform"],
1973
+ languages: ["Terraform"],
1974
1974
  parameters: [],
1975
1975
  tags: ["alibabacloud", "oss"]
1976
1976
  },
@@ -2169,7 +2169,7 @@ var patterns_default = [
2169
2169
  severityLevel: "Warning",
2170
2170
  title: "Ensure Kubernetes Node Pools Are Set to Auto Repair",
2171
2171
  enabled: true,
2172
- languages: ["JSON", "YAML", "Terraform"],
2172
+ languages: ["Terraform", "YAML"],
2173
2173
  parameters: [],
2174
2174
  tags: ["alibabacloud", "kubernetes"]
2175
2175
  },
@@ -2197,7 +2197,7 @@ var patterns_default = [
2197
2197
  severityLevel: "Warning",
2198
2198
  title: "Ensure RDS Instance Has log_duration Enabled",
2199
2199
  enabled: true,
2200
- languages: ["JSON", "YAML", "Terraform"],
2200
+ languages: ["Terraform"],
2201
2201
  parameters: [],
2202
2202
  tags: ["alibabacloud", "rds"]
2203
2203
  },
@@ -2333,7 +2333,7 @@ var patterns_default = [
2333
2333
  severityLevel: "High",
2334
2334
  title: "Ensure Certificate Validation Is Enabled with get_url",
2335
2335
  enabled: true,
2336
- languages: ["JSON", "YAML", "Terraform"],
2336
+ languages: ["YAML", "JSON", "Terraform"],
2337
2337
  parameters: []
2338
2338
  },
2339
2339
  {
@@ -2558,7 +2558,7 @@ var patterns_default = [
2558
2558
  severityLevel: "Warning",
2559
2559
  title: "Ensure AWS Lambda Function Has Function-Level Concurrent Execution Limit Configured",
2560
2560
  enabled: true,
2561
- languages: ["JSON", "YAML", "Terraform"],
2561
+ languages: ["Terraform"],
2562
2562
  parameters: [],
2563
2563
  tags: ["aws", "lambda"]
2564
2564
  },
@@ -2568,7 +2568,7 @@ var patterns_default = [
2568
2568
  severityLevel: "Warning",
2569
2569
  title: "Ensure AWS Lambda Function is Configured with a Dead Letter Queue (DLQ)",
2570
2570
  enabled: true,
2571
- languages: ["JSON", "YAML", "Terraform"],
2571
+ languages: ["Terraform"],
2572
2572
  parameters: [],
2573
2573
  tags: ["aws"]
2574
2574
  },
@@ -2614,7 +2614,7 @@ var patterns_default = [
2614
2614
  severityLevel: "Warning",
2615
2615
  title: "Ensure API Gateway Caching Is Enabled",
2616
2616
  enabled: true,
2617
- languages: ["JSON", "YAML", "Terraform"],
2617
+ languages: ["Terraform"],
2618
2618
  parameters: [],
2619
2619
  tags: ["aws"]
2620
2620
  },
@@ -2660,7 +2660,7 @@ var patterns_default = [
2660
2660
  severityLevel: "Warning",
2661
2661
  title: "Ensure Detailed Monitoring is Enabled for EC2 Instances",
2662
2662
  enabled: true,
2663
- languages: ["JSON", "YAML", "Terraform"],
2663
+ languages: ["Terraform"],
2664
2664
  parameters: [],
2665
2665
  tags: ["aws"]
2666
2666
  },
@@ -2733,7 +2733,7 @@ var patterns_default = [
2733
2733
  severityLevel: "High",
2734
2734
  title: "Ensure EC2 Instances Are EBS Optimized",
2735
2735
  enabled: true,
2736
- languages: ["JSON", "YAML", "Terraform"],
2736
+ languages: ["Terraform"],
2737
2737
  parameters: [],
2738
2738
  tags: ["aws"]
2739
2739
  },
@@ -2761,7 +2761,7 @@ var patterns_default = [
2761
2761
  severityLevel: "Warning",
2762
2762
  title: "Ensure ELB Cross-Zone Load Balancing Is Enabled",
2763
2763
  enabled: true,
2764
- languages: ["JSON", "YAML", "Terraform"],
2764
+ languages: ["Terraform"],
2765
2765
  parameters: [],
2766
2766
  tags: ["aws"]
2767
2767
  },
@@ -2897,7 +2897,7 @@ var patterns_default = [
2897
2897
  severityLevel: "Warning",
2898
2898
  title: "Ensure Load Balancer Has Cross-Zone Load Balancing Enabled",
2899
2899
  enabled: true,
2900
- languages: ["JSON", "YAML", "Terraform"],
2900
+ languages: ["Terraform"],
2901
2901
  parameters: [],
2902
2902
  tags: ["aws"]
2903
2903
  },
@@ -2907,7 +2907,7 @@ var patterns_default = [
2907
2907
  severityLevel: "Warning",
2908
2908
  title: "Enforce Tags on Autoscaling Group Launch Configurations",
2909
2909
  enabled: true,
2910
- languages: ["JSON", "YAML", "Terraform"],
2910
+ languages: ["Terraform"],
2911
2911
  parameters: [],
2912
2912
  tags: ["aws"]
2913
2913
  },
@@ -3530,7 +3530,7 @@ var patterns_default = [
3530
3530
  severityLevel: "Warning",
3531
3531
  title: "Ensure CloudFront Distribution Is Enabled",
3532
3532
  enabled: true,
3533
- languages: ["JSON", "YAML", "Terraform"],
3533
+ languages: ["Terraform"],
3534
3534
  parameters: [],
3535
3535
  tags: ["aws"]
3536
3536
  },
@@ -3540,7 +3540,7 @@ var patterns_default = [
3540
3540
  severityLevel: "Warning",
3541
3541
  title: "Ensure Create Before Destroy for API Deployments",
3542
3542
  enabled: true,
3543
- languages: ["JSON", "YAML", "Terraform"],
3543
+ languages: ["Terraform"],
3544
3544
  parameters: [],
3545
3545
  tags: ["aws"]
3546
3546
  },
@@ -3622,7 +3622,7 @@ var patterns_default = [
3622
3622
  severityLevel: "Warning",
3623
3623
  title: "Ensure API Gateway Method Setting Caching is Enabled",
3624
3624
  enabled: true,
3625
- languages: ["JSON", "YAML", "Terraform"],
3625
+ languages: ["Terraform"],
3626
3626
  parameters: [],
3627
3627
  tags: ["aws"]
3628
3628
  },
@@ -3704,7 +3704,7 @@ var patterns_default = [
3704
3704
  severityLevel: "Warning",
3705
3705
  title: "Ensure Create Before Destroy for ACM Certificates",
3706
3706
  enabled: true,
3707
- languages: ["JSON", "YAML", "Terraform"],
3707
+ languages: ["Terraform"],
3708
3708
  parameters: [],
3709
3709
  tags: ["aws"]
3710
3710
  },
@@ -3741,7 +3741,7 @@ var patterns_default = [
3741
3741
  severityLevel: "Warning",
3742
3742
  title: "Ensure Create Before Destroy for API Gateway",
3743
3743
  enabled: true,
3744
- languages: ["JSON", "YAML", "Terraform"],
3744
+ languages: ["Terraform"],
3745
3745
  parameters: [],
3746
3746
  tags: ["aws"]
3747
3747
  },
@@ -3985,7 +3985,7 @@ var patterns_default = [
3985
3985
  severityLevel: "Warning",
3986
3986
  title: "Ensure HTTP/HTTPS Target Group Defines Healthcheck",
3987
3987
  enabled: true,
3988
- languages: ["JSON", "YAML", "Terraform"],
3988
+ languages: ["Terraform"],
3989
3989
  parameters: [],
3990
3990
  tags: ["aws"]
3991
3991
  },
@@ -4373,7 +4373,7 @@ var patterns_default = [
4373
4373
  severityLevel: "Warning",
4374
4374
  title: "Ensure S3 Lifecycle Configuration Sets Period for Aborting Failed Uploads",
4375
4375
  enabled: true,
4376
- languages: ["JSON", "YAML", "Terraform"],
4376
+ languages: ["Terraform"],
4377
4377
  parameters: [],
4378
4378
  tags: ["aws"]
4379
4379
  },
@@ -4419,7 +4419,7 @@ var patterns_default = [
4419
4419
  severityLevel: "Warning",
4420
4420
  title: "Ensure CloudFront Distribution Has a Default Root Object Configured",
4421
4421
  enabled: true,
4422
- languages: ["JSON", "YAML", "Terraform"],
4422
+ languages: ["Terraform"],
4423
4423
  parameters: [],
4424
4424
  tags: ["aws"]
4425
4425
  },
@@ -4474,7 +4474,7 @@ var patterns_default = [
4474
4474
  severityLevel: "Warning",
4475
4475
  title: "Ensure CloudFront Distributions Have Origin Failover Configured",
4476
4476
  enabled: true,
4477
- languages: ["JSON", "YAML", "Terraform"],
4477
+ languages: ["Terraform"],
4478
4478
  parameters: [],
4479
4479
  tags: ["aws"]
4480
4480
  },
@@ -4502,7 +4502,7 @@ var patterns_default = [
4502
4502
  severityLevel: "Warning",
4503
4503
  title: "Ensure RDS Cluster Copies Tags to Snapshots",
4504
4504
  enabled: true,
4505
- languages: ["JSON", "YAML", "Terraform"],
4505
+ languages: ["Terraform"],
4506
4506
  parameters: [],
4507
4507
  tags: ["aws"]
4508
4508
  },
@@ -4521,7 +4521,7 @@ var patterns_default = [
4521
4521
  severityLevel: "Warning",
4522
4522
  title: "Ensure EC2 Auto Scaling Groups Use EC2 Launch Templates",
4523
4523
  enabled: true,
4524
- languages: ["JSON", "YAML", "Terraform"],
4524
+ languages: ["Terraform"],
4525
4525
  parameters: [],
4526
4526
  tags: ["aws"]
4527
4527
  },
@@ -4549,7 +4549,7 @@ var patterns_default = [
4549
4549
  severityLevel: "High",
4550
4550
  title: "Ensure Elasticsearch domains have at least three dedicated master nodes for high availability",
4551
4551
  enabled: true,
4552
- languages: ["JSON", "YAML", "Terraform"],
4552
+ languages: ["Terraform"],
4553
4553
  parameters: [],
4554
4554
  tags: ["aws"]
4555
4555
  },
@@ -4631,7 +4631,7 @@ var patterns_default = [
4631
4631
  severityLevel: "Warning",
4632
4632
  title: "Ensure RDS Aurora Clusters Have Backtracking Enabled",
4633
4633
  enabled: true,
4634
- languages: ["JSON", "YAML", "Terraform"],
4634
+ languages: ["Terraform"],
4635
4635
  parameters: [],
4636
4636
  tags: ["aws"]
4637
4637
  },
@@ -4902,7 +4902,7 @@ var patterns_default = [
4902
4902
  severityLevel: "Warning",
4903
4903
  title: "Ensure RDS Instances Have Performance Insights Enabled",
4904
4904
  enabled: true,
4905
- languages: ["JSON", "YAML", "Terraform"],
4905
+ languages: ["Terraform"],
4906
4906
  parameters: [],
4907
4907
  tags: ["aws"]
4908
4908
  },
@@ -4993,7 +4993,7 @@ var patterns_default = [
4993
4993
  severityLevel: "Warning",
4994
4994
  title: "Enforce Neptune DB Clusters to Copy Tags to Snapshots",
4995
4995
  enabled: true,
4996
- languages: ["JSON", "YAML", "Terraform"],
4996
+ languages: ["Terraform"],
4997
4997
  parameters: [],
4998
4998
  tags: ["aws"]
4999
4999
  },
@@ -5543,7 +5543,7 @@ var patterns_default = [
5543
5543
  severityLevel: "Warning",
5544
5544
  title: "Ensure CloudWatch Log Group Specifies Retention Days",
5545
5545
  enabled: true,
5546
- languages: ["JSON", "YAML", "Terraform"],
5546
+ languages: ["Terraform"],
5547
5547
  parameters: [],
5548
5548
  tags: ["aws"]
5549
5549
  },
@@ -5922,7 +5922,7 @@ var patterns_default = [
5922
5922
  severityLevel: "Warning",
5923
5923
  title: "Ensure Azure Data Factory Uses Git Repository for Source Control",
5924
5924
  enabled: true,
5925
- languages: ["JSON", "YAML", "Terraform"],
5925
+ languages: ["Terraform"],
5926
5926
  parameters: [],
5927
5927
  tags: ["azure"]
5928
5928
  },
@@ -6249,7 +6249,7 @@ var patterns_default = [
6249
6249
  severityLevel: "Warning",
6250
6250
  title: "Ensure PostgreSQL Flexible Server Enables Geo-Redundant Backups",
6251
6251
  enabled: true,
6252
- languages: ["JSON", "YAML", "Terraform"],
6252
+ languages: ["Terraform"],
6253
6253
  parameters: [],
6254
6254
  tags: ["azure", "postgresql"]
6255
6255
  },
@@ -6396,7 +6396,7 @@ var patterns_default = [
6396
6396
  severityLevel: "Warning",
6397
6397
  title: "Ensure Machine Learning Compute Cluster Minimum Nodes Set To 0",
6398
6398
  enabled: true,
6399
- languages: ["JSON", "YAML", "Terraform"],
6399
+ languages: ["Terraform"],
6400
6400
  parameters: [],
6401
6401
  tags: ["azure"]
6402
6402
  },
@@ -6541,7 +6541,7 @@ var patterns_default = [
6541
6541
  severityLevel: "Warning",
6542
6542
  title: "Ensure Geo-Replicated Container Registries for Multi-Region Deployments",
6543
6543
  enabled: true,
6544
- languages: ["JSON", "YAML", "Terraform"],
6544
+ languages: ["Terraform"],
6545
6545
  parameters: [],
6546
6546
  tags: ["azure"]
6547
6547
  },
@@ -6560,7 +6560,7 @@ var patterns_default = [
6560
6560
  severityLevel: "Warning",
6561
6561
  title: "Ensure Retention Policy Is Set to Cleanup Untagged Manifests",
6562
6562
  enabled: true,
6563
- languages: ["JSON", "YAML", "Terraform"],
6563
+ languages: ["Terraform"],
6564
6564
  parameters: [],
6565
6565
  tags: ["azure"]
6566
6566
  },
@@ -6570,7 +6570,7 @@ var patterns_default = [
6570
6570
  severityLevel: "Warning",
6571
6571
  title: "Enforce Minimum Pod Count of 50 on Azure Kubernetes Cluster Nodes",
6572
6572
  enabled: true,
6573
- languages: ["JSON", "YAML", "Terraform"],
6573
+ languages: ["Terraform"],
6574
6574
  parameters: [],
6575
6575
  tags: ["azure", "kubernetes", "aks"]
6576
6576
  },
@@ -6580,7 +6580,7 @@ var patterns_default = [
6580
6580
  severityLevel: "Warning",
6581
6581
  title: "Ensure Azure Kubernetes Cluster (AKS) Nodes Use Scale Sets",
6582
6582
  enabled: true,
6583
- languages: ["JSON", "YAML", "Terraform"],
6583
+ languages: ["Terraform"],
6584
6584
  parameters: [],
6585
6585
  tags: ["azure", "kubernetes", "aks"]
6586
6586
  },
@@ -6599,7 +6599,7 @@ var patterns_default = [
6599
6599
  severityLevel: "Warning",
6600
6600
  title: "Ensure AKS Uses the Paid SKU for SLA",
6601
6601
  enabled: true,
6602
- languages: ["JSON", "YAML", "Terraform"],
6602
+ languages: ["Terraform"],
6603
6603
  parameters: [],
6604
6604
  tags: ["azure"]
6605
6605
  },
@@ -6609,7 +6609,7 @@ var patterns_default = [
6609
6609
  severityLevel: "Warning",
6610
6610
  title: "Ensure AKS Cluster Upgrade Channel Is Chosen",
6611
6611
  enabled: true,
6612
- languages: ["JSON", "YAML", "Terraform"],
6612
+ languages: ["Terraform"],
6613
6613
  parameters: [],
6614
6614
  tags: ["azure"]
6615
6615
  },
@@ -6646,7 +6646,7 @@ var patterns_default = [
6646
6646
  severityLevel: "High",
6647
6647
  title: "Ensure Web PubSub Uses a SKU with an SLA",
6648
6648
  enabled: true,
6649
- languages: ["JSON", "YAML", "Terraform"],
6649
+ languages: ["Terraform"],
6650
6650
  parameters: [],
6651
6651
  tags: ["azure"]
6652
6652
  },
@@ -6701,7 +6701,7 @@ var patterns_default = [
6701
6701
  severityLevel: "Warning",
6702
6702
  title: "Ensure Data Explorer Uses SKU with SLA",
6703
6703
  enabled: true,
6704
- languages: ["JSON", "YAML", "Terraform"],
6704
+ languages: ["Terraform"],
6705
6705
  parameters: [],
6706
6706
  tags: ["azure"]
6707
6707
  },
@@ -6774,7 +6774,7 @@ var patterns_default = [
6774
6774
  severityLevel: "Warning",
6775
6775
  title: "Ensure App Configuration SKU is Standard",
6776
6776
  enabled: true,
6777
- languages: ["JSON", "YAML", "Terraform"],
6777
+ languages: ["Terraform"],
6778
6778
  parameters: []
6779
6779
  },
6780
6780
  {
@@ -6792,7 +6792,7 @@ var patterns_default = [
6792
6792
  severityLevel: "Warning",
6793
6793
  title: "Enforce Selection of Standard Pricing Tier",
6794
6794
  enabled: true,
6795
- languages: ["JSON", "YAML", "Terraform"],
6795
+ languages: ["Terraform"],
6796
6796
  parameters: [],
6797
6797
  tags: ["azure"]
6798
6798
  },
@@ -6982,7 +6982,7 @@ var patterns_default = [
6982
6982
  severityLevel: "High",
6983
6983
  title: "Ensure Azure Cognitive Search SLA for Index Updates",
6984
6984
  enabled: true,
6985
- languages: ["JSON", "YAML", "Terraform"],
6985
+ languages: ["Terraform"],
6986
6986
  parameters: [],
6987
6987
  tags: ["azure"]
6988
6988
  },
@@ -6992,7 +6992,7 @@ var patterns_default = [
6992
6992
  severityLevel: "Warning",
6993
6993
  title: "Ensure Azure Cognitive Search SLA for Search Index Queries",
6994
6994
  enabled: true,
6995
- languages: ["JSON", "YAML", "Terraform"],
6995
+ languages: ["Terraform"],
6996
6996
  parameters: [],
6997
6997
  tags: ["azure"]
6998
6998
  },
@@ -7020,7 +7020,7 @@ var patterns_default = [
7020
7020
  severityLevel: "Warning",
7021
7021
  title: "Ensure App Service Plan Suitable for Production Use",
7022
7022
  enabled: true,
7023
- languages: ["JSON", "YAML", "Terraform"],
7023
+ languages: ["Terraform"],
7024
7024
  parameters: [],
7025
7025
  tags: ["azure"]
7026
7026
  },
@@ -7030,7 +7030,7 @@ var patterns_default = [
7030
7030
  severityLevel: "High",
7031
7031
  title: "Ensure App Service Has Minimum Number of Instances for Failover",
7032
7032
  enabled: true,
7033
- languages: ["JSON", "YAML", "Terraform"],
7033
+ languages: ["Terraform"],
7034
7034
  parameters: [],
7035
7035
  tags: ["azure"]
7036
7036
  },
@@ -7040,7 +7040,7 @@ var patterns_default = [
7040
7040
  severityLevel: "Warning",
7041
7041
  title: "Ensure App Service Configures Health Check",
7042
7042
  enabled: true,
7043
- languages: ["JSON", "YAML", "Terraform"],
7043
+ languages: ["Terraform"],
7044
7044
  parameters: [],
7045
7045
  tags: ["azure"]
7046
7046
  },
@@ -7050,7 +7050,7 @@ var patterns_default = [
7050
7050
  severityLevel: "Warning",
7051
7051
  title: "Ensure App Service Is Set To Be Always On",
7052
7052
  enabled: true,
7053
- languages: ["JSON", "YAML", "Terraform"],
7053
+ languages: ["Terraform"],
7054
7054
  parameters: [],
7055
7055
  tags: ["azure"]
7056
7056
  },
@@ -7159,7 +7159,7 @@ var patterns_default = [
7159
7159
  severityLevel: "Warning",
7160
7160
  title: "Ensure the App Service Plan is zone redundant",
7161
7161
  enabled: true,
7162
- languages: ["JSON", "YAML", "Terraform"],
7162
+ languages: ["Terraform"],
7163
7163
  parameters: [],
7164
7164
  tags: ["azure"]
7165
7165
  },
@@ -7187,7 +7187,7 @@ var patterns_default = [
7187
7187
  severityLevel: "Warning",
7188
7188
  title: "Ensure Azure Event Hub Namespace is Zone Redundant",
7189
7189
  enabled: true,
7190
- languages: ["JSON", "YAML", "Terraform"],
7190
+ languages: ["Terraform"],
7191
7191
  parameters: [],
7192
7192
  tags: ["azure"]
7193
7193
  },
@@ -7197,7 +7197,7 @@ var patterns_default = [
7197
7197
  severityLevel: "Warning",
7198
7198
  title: "Ensure Azure SQL Database Namespace is Zone Redundant",
7199
7199
  enabled: true,
7200
- languages: ["JSON", "YAML", "Terraform"],
7200
+ languages: ["Terraform"],
7201
7201
  parameters: [],
7202
7202
  tags: ["azure"]
7203
7203
  },
@@ -7225,7 +7225,7 @@ var patterns_default = [
7225
7225
  severityLevel: "Warning",
7226
7226
  title: "Ensure App Service Environment is Zone Redundant",
7227
7227
  enabled: true,
7228
- languages: ["JSON", "YAML", "Terraform"],
7228
+ languages: ["Terraform"],
7229
7229
  parameters: [],
7230
7230
  tags: ["azure"]
7231
7231
  },
@@ -7244,7 +7244,7 @@ var patterns_default = [
7244
7244
  severityLevel: "Warning",
7245
7245
  title: "Ensure Azure Container Registry (ACR) is Zone Redundant",
7246
7246
  enabled: true,
7247
- languages: ["JSON", "YAML", "Terraform"],
7247
+ languages: ["Terraform"],
7248
7248
  parameters: [],
7249
7249
  tags: ["azure"]
7250
7250
  },
@@ -7605,7 +7605,7 @@ var patterns_default = [
7605
7605
  severityLevel: "Warning",
7606
7606
  title: "Ensure Storage Accounts Adhere to the Naming Rules",
7607
7607
  enabled: true,
7608
- languages: ["JSON", "YAML", "Terraform"],
7608
+ languages: ["Terraform"],
7609
7609
  parameters: [],
7610
7610
  tags: ["azure"]
7611
7611
  },
@@ -7795,7 +7795,7 @@ var patterns_default = [
7795
7795
  severityLevel: "Warning",
7796
7796
  title: "Ensure App Service Enables Detailed Error Messages",
7797
7797
  enabled: true,
7798
- languages: ["JSON", "YAML", "Terraform"],
7798
+ languages: ["Terraform"],
7799
7799
  parameters: [],
7800
7800
  tags: ["azure"]
7801
7801
  },
@@ -7814,7 +7814,7 @@ var patterns_default = [
7814
7814
  severityLevel: "Warning",
7815
7815
  title: "Ensure HTTP Version Is the Latest When Running Azure Function App",
7816
7816
  enabled: true,
7817
- languages: ["JSON", "YAML", "Terraform"],
7817
+ languages: ["Terraform"],
7818
7818
  parameters: [],
7819
7819
  tags: ["azure"]
7820
7820
  },
@@ -8022,7 +8022,7 @@ var patterns_default = [
8022
8022
  severityLevel: "Warning",
8023
8023
  title: "Ensure App Services Use Azure Files",
8024
8024
  enabled: true,
8025
- languages: ["JSON", "YAML", "Terraform"],
8025
+ languages: ["Terraform"],
8026
8026
  parameters: [],
8027
8027
  tags: ["azure"]
8028
8028
  },
@@ -8311,7 +8311,7 @@ var patterns_default = [
8311
8311
  severityLevel: "High",
8312
8312
  title: "Ensure WORKDIR values are absolute paths",
8313
8313
  enabled: true,
8314
- languages: ["JSON", "YAML", "Terraform"],
8314
+ languages: ["Dockerfile"],
8315
8315
  parameters: []
8316
8316
  },
8317
8317
  {
@@ -8320,7 +8320,7 @@ var patterns_default = [
8320
8320
  severityLevel: "High",
8321
8321
  title: "Ensure Unique From Aliases in Multistage Docker Builds",
8322
8322
  enabled: true,
8323
- languages: ["JSON", "YAML", "Terraform"],
8323
+ languages: ["Dockerfile"],
8324
8324
  parameters: []
8325
8325
  },
8326
8326
  {
@@ -8329,7 +8329,7 @@ var patterns_default = [
8329
8329
  severityLevel: "Warning",
8330
8330
  title: "Ensure HEALTHCHECK Instructions Are Added to Container Images",
8331
8331
  enabled: true,
8332
- languages: ["JSON", "YAML", "Terraform"],
8332
+ languages: ["Dockerfile"],
8333
8333
  parameters: []
8334
8334
  },
8335
8335
  {
@@ -8347,7 +8347,7 @@ var patterns_default = [
8347
8347
  severityLevel: "Warning",
8348
8348
  title: "Ensure COPY is Used Instead of ADD in Dockerfiles",
8349
8349
  enabled: true,
8350
- languages: ["JSON", "YAML", "Terraform"],
8350
+ languages: ["Dockerfile"],
8351
8351
  parameters: []
8352
8352
  },
8353
8353
  {
@@ -8356,7 +8356,7 @@ var patterns_default = [
8356
8356
  severityLevel: "Warning",
8357
8357
  title: "Avoid Using Update Instructions Alone in Dockerfile",
8358
8358
  enabled: true,
8359
- languages: ["JSON", "YAML", "Terraform"],
8359
+ languages: ["Dockerfile"],
8360
8360
  parameters: [],
8361
8361
  tags: ["docker"]
8362
8362
  },
@@ -8366,7 +8366,7 @@ var patterns_default = [
8366
8366
  severityLevel: "Warning",
8367
8367
  title: "Enforce use of LABEL maintainer instead of deprecated MAINTAINER",
8368
8368
  enabled: true,
8369
- languages: ["JSON", "YAML", "Terraform"],
8369
+ languages: ["Dockerfile"],
8370
8370
  parameters: [],
8371
8371
  tags: ["docker"]
8372
8372
  },
@@ -8763,7 +8763,7 @@ var patterns_default = [
8763
8763
  severityLevel: "Warning",
8764
8764
  title: "Ensure Kubernetes Clusters are Configured with Labels",
8765
8765
  enabled: true,
8766
- languages: ["JSON", "YAML", "Terraform"],
8766
+ languages: ["YAML", "JSON"],
8767
8767
  parameters: [],
8768
8768
  tags: ["kubernetes", "googlecloud"]
8769
8769
  },
@@ -9053,7 +9053,7 @@ var patterns_default = [
9053
9053
  severityLevel: "Warning",
9054
9054
  title: "Ensure PostgreSQL Database 'log_checkpoints' Flag Is Set to 'on'",
9055
9055
  enabled: true,
9056
- languages: ["JSON", "YAML", "Terraform"],
9056
+ languages: ["SQL"],
9057
9057
  parameters: [],
9058
9058
  tags: ["gcp", "postgresql"]
9059
9059
  },
@@ -9081,7 +9081,7 @@ var patterns_default = [
9081
9081
  severityLevel: "Warning",
9082
9082
  title: "Ensure PostgreSQL 'log_lock_waits' Flag Is Set To 'on'",
9083
9083
  enabled: true,
9084
- languages: ["JSON", "YAML", "Terraform"],
9084
+ languages: ["SQL", "Terraform"],
9085
9085
  parameters: [],
9086
9086
  tags: ["gcp"]
9087
9087
  },
@@ -9100,7 +9100,7 @@ var patterns_default = [
9100
9100
  severityLevel: "Warning",
9101
9101
  title: "Ensure PostgreSQL 'log_temp_files' Flag Is Set to '0'",
9102
9102
  enabled: true,
9103
- languages: ["JSON", "YAML", "Terraform"],
9103
+ languages: ["SQL"],
9104
9104
  parameters: [],
9105
9105
  tags: ["gcp", "cloudsql", "postgresql"]
9106
9106
  },
@@ -9173,7 +9173,7 @@ var patterns_default = [
9173
9173
  severityLevel: "Warning",
9174
9174
  title: "Avoid Configuring a Bucket to Log to Itself",
9175
9175
  enabled: true,
9176
- languages: ["JSON", "YAML", "Terraform"],
9176
+ languages: ["Terraform", "YAML", "JSON"],
9177
9177
  parameters: [],
9178
9178
  tags: ["gcp", "googlecloudstorage"]
9179
9179
  },
@@ -9427,7 +9427,7 @@ var patterns_default = [
9427
9427
  severityLevel: "High",
9428
9428
  title: "Ensure 'Automatic node repair' is enabled for Kubernetes Clusters",
9429
9429
  enabled: true,
9430
- languages: ["JSON", "YAML", "Terraform"],
9430
+ languages: ["Terraform", "YAML"],
9431
9431
  parameters: [],
9432
9432
  tags: ["gcp", "kubernetes"]
9433
9433
  },
@@ -9961,7 +9961,7 @@ var patterns_default = [
9961
9961
  severityLevel: "Warning",
9962
9962
  title: "Enforce CPU Requests in Kubernetes Pods",
9963
9963
  enabled: true,
9964
- languages: ["JSON", "YAML", "Terraform"],
9964
+ languages: ["YAML"],
9965
9965
  parameters: [],
9966
9966
  tags: ["kubernetes"]
9967
9967
  },
@@ -10007,7 +10007,7 @@ var patterns_default = [
10007
10007
  severityLevel: "Warning",
10008
10008
  title: "Ensure Proper Setting of --terminated-pod-gc-threshold Argument",
10009
10009
  enabled: true,
10010
- languages: ["JSON", "YAML", "Terraform"],
10010
+ languages: ["YAML"],
10011
10011
  parameters: [],
10012
10012
  tags: ["kubernetes"]
10013
10013
  },
@@ -10035,7 +10035,7 @@ var patterns_default = [
10035
10035
  severityLevel: "Warning",
10036
10036
  title: "Enforce CPU Limits Are Set",
10037
10037
  enabled: true,
10038
- languages: ["JSON", "YAML", "Terraform"],
10038
+ languages: ["YAML"],
10039
10039
  parameters: [],
10040
10040
  tags: ["kubernetes"]
10041
10041
  },
@@ -10135,7 +10135,7 @@ var patterns_default = [
10135
10135
  severityLevel: "Warning",
10136
10136
  title: "Enforce Memory Requests in Kubernetes Pods",
10137
10137
  enabled: true,
10138
- languages: ["JSON", "YAML", "Terraform"],
10138
+ languages: ["YAML"],
10139
10139
  parameters: [],
10140
10140
  tags: ["kubernetes"]
10141
10141
  },
@@ -10154,7 +10154,7 @@ var patterns_default = [
10154
10154
  severityLevel: "Warning",
10155
10155
  title: "Enforce Memory Limits Are Set",
10156
10156
  enabled: true,
10157
- languages: ["JSON", "YAML", "Terraform"],
10157
+ languages: ["YAML"],
10158
10158
  parameters: [],
10159
10159
  tags: ["kubernetes"]
10160
10160
  },
@@ -10465,7 +10465,7 @@ var patterns_default = [
10465
10465
  severityLevel: "Warning",
10466
10466
  title: "Avoid Specifying hostPort Unless Absolutely Necessary",
10467
10467
  enabled: true,
10468
- languages: ["JSON", "YAML", "Terraform"],
10468
+ languages: ["YAML"],
10469
10469
  parameters: [],
10470
10470
  tags: ["kubernetes"]
10471
10471
  },
@@ -10799,7 +10799,7 @@ var patterns_default = [
10799
10799
  severityLevel: "Warning",
10800
10800
  title: "Enforce Liveness Probe Configuration in Kubernetes Pods",
10801
10801
  enabled: true,
10802
- languages: ["JSON", "YAML", "Terraform"],
10802
+ languages: ["YAML"],
10803
10803
  parameters: [],
10804
10804
  tags: ["kubernetes"]
10805
10805
  },
@@ -10890,7 +10890,7 @@ var patterns_default = [
10890
10890
  severityLevel: "Warning",
10891
10891
  title: "Enforce Readiness Probe Configuration",
10892
10892
  enabled: true,
10893
- languages: ["JSON", "YAML", "Terraform"],
10893
+ languages: ["YAML"],
10894
10894
  parameters: [],
10895
10895
  tags: ["kubernetes"]
10896
10896
  },
@@ -11144,7 +11144,7 @@ var patterns_default = [
11144
11144
  severityLevel: "High",
11145
11145
  title: "Ensure NKS Control Plane Logging is Enabled for All Log Types",
11146
11146
  enabled: true,
11147
- languages: ["JSON", "YAML", "Terraform"],
11147
+ languages: ["Terraform", "JSON", "YAML"],
11148
11148
  parameters: []
11149
11149
  },
11150
11150
  {
@@ -11829,7 +11829,7 @@ var patterns_default = [
11829
11829
  severityLevel: "Warning",
11830
11830
  title: "Ensure Description Is Populated Within Security Policies",
11831
11831
  enabled: true,
11832
- languages: ["JSON", "YAML", "Terraform"],
11832
+ languages: ["YAML"],
11833
11833
  parameters: []
11834
11834
  },
11835
11835
  {
@@ -12135,7 +12135,7 @@ var patterns_default = [
12135
12135
  severityLevel: "High",
12136
12136
  title: "Ensure Terraform Module Sources Use Commit Hash",
12137
12137
  enabled: true,
12138
- languages: ["JSON", "YAML", "Terraform"],
12138
+ languages: ["Terraform", "JSON", "YAML"],
12139
12139
  parameters: []
12140
12140
  },
12141
12141
  {
@@ -12144,7 +12144,7 @@ var patterns_default = [
12144
12144
  severityLevel: "Warning",
12145
12145
  title: "Ensure Terraform Module Sources Use a Version Tag",
12146
12146
  enabled: true,
12147
- languages: ["JSON", "YAML", "Terraform"],
12147
+ languages: ["Terraform"],
12148
12148
  parameters: []
12149
12149
  },
12150
12150
  {
@@ -12366,7 +12366,29 @@ var patterns_default = [
12366
12366
  ];
12367
12367
 
12368
12368
  // src/pattern-mappings.json
12369
- var pattern_mappings_default = {};
12369
+ var pattern_mappings_default = {
12370
+ Dockerfile: {
12371
+ prefixes: ["Checkov_CKV_DOCKER_", "Checkov_CKV2_DOCKER_"]
12372
+ },
12373
+ Terraform: {
12374
+ prefixes: ["Checkov_CKV_TF_"]
12375
+ },
12376
+ "GitHub Actions": {
12377
+ prefixes: ["Checkov_CKV_GHA_", "Checkov_CKV2_GHA_"]
12378
+ },
12379
+ CircleCI: {
12380
+ prefixes: ["Checkov_CKV_CIRCLECIPIPELINES_"]
12381
+ },
12382
+ "GitLab CI": {
12383
+ prefixes: ["Checkov_CKV_GITLABCI_"]
12384
+ },
12385
+ "Bitbucket Pipelines": {
12386
+ prefixes: ["Checkov_CKV_BITBUCKETPIPELINES_"]
12387
+ },
12388
+ "Azure Pipelines": {
12389
+ prefixes: ["Checkov_CKV_AZUREPIPELINES_"]
12390
+ }
12391
+ };
12370
12392
 
12371
12393
  // src/metadata.ts
12372
12394
  var descriptor = {
@@ -12375,7 +12397,7 @@ var descriptor = {
12375
12397
  preferredVersion: "3.2.508",
12376
12398
  languages: ["JSON", "YAML", "Terraform"],
12377
12399
  filePatterns: ["**/*.tf", "**/*.yaml", "**/*.yml", "**/*.json", "**/Dockerfile"],
12378
- supportedOS: ["linux", "darwin"],
12400
+ supportedOS: ["linux", "darwin", "win32"],
12379
12401
  supportedArch: ["x64", "arm64"],
12380
12402
  supportedRunners: ["local", "container"],
12381
12403
  frameworkMappings: pattern_mappings_default
@@ -12399,16 +12421,35 @@ var CONFIG_FILE_CANDIDATES = [".checkov.yaml", ".checkov.yml"];
12399
12421
  var PIP_PACKAGE = "checkov==3.2.508";
12400
12422
  var BINARY = "checkov";
12401
12423
  var VERSION_REGEX = /(\d+\.\d+\.\d+)/;
12402
- async function resolveBinaryPath(ctx) {
12424
+ var PYTHON_VERSION_RANGE = ">=3.9.0 <3.14.0";
12425
+ var MODULE_ARGS = ["-m", "checkov.main"];
12426
+ async function resolveCheckovInvocation(ctx) {
12403
12427
  const venvDir = (0, import_tooling.getVenvDir)(ctx.globalDir, TOOL_ID);
12428
+ const venvPython = (0, import_tooling.getVenvPaths)(venvDir).python;
12429
+ if (await pathExists(venvPython)) {
12430
+ return { command: venvPython, prefixArgs: MODULE_ARGS };
12431
+ }
12432
+ return { command: BINARY, prefixArgs: [] };
12433
+ }
12434
+ async function probeCheckovVersion(command, prefixArgs, logger) {
12404
12435
  try {
12405
- const venv = await (0, import_tooling.ensureVenv)((await (0, import_tooling.findPython)())?.path ?? "python3", venvDir);
12406
- const venvBin = (0, import_tooling.resolveVenvBinary)(venv, BINARY);
12407
- await import_promises.default.access(venvBin);
12408
- return venvBin;
12436
+ const { stdout, stderr, exitCode } = await (0, import_tooling.spawnTool)(command, [...prefixArgs, "--version"], {
12437
+ cwd: process.cwd(),
12438
+ timeoutMs: 6e4,
12439
+ logger
12440
+ });
12441
+ if (exitCode !== 0) return null;
12442
+ const match = (stdout || stderr).match(VERSION_REGEX);
12443
+ return match ? match[1] : null;
12409
12444
  } catch {
12445
+ return null;
12410
12446
  }
12411
- return BINARY;
12447
+ }
12448
+ async function listDirSafe(dir) {
12449
+ return import_promises.default.readdir(dir).catch(() => []);
12450
+ }
12451
+ async function pathExists(p) {
12452
+ return import_promises.default.access(p).then(() => true).catch(() => false);
12412
12453
  }
12413
12454
  function buildEnv(ctx) {
12414
12455
  if (ctx.runner !== "container") return void 0;
@@ -12434,25 +12475,25 @@ var adapter = {
12434
12475
  prerequisites: [
12435
12476
  {
12436
12477
  name: "Python",
12437
- versionRange: ">=3.9.0",
12478
+ versionRange: PYTHON_VERSION_RANGE,
12438
12479
  preferredVersion: "3.12.0",
12439
12480
  checkCommand: "python3 --version"
12440
12481
  }
12441
12482
  ],
12442
12483
  /**
12443
- * Checks whether the `checkov` binary is present and runnable.
12484
+ * Checks whether checkov is present and runnable.
12444
12485
  *
12445
12486
  * Checks in order:
12446
- * 1. Codacy-managed venv (`~/.codacy/runtimes/Checkov/venv/bin/checkov`) -> installation: "codacy"
12447
- * 2. Global PATH (`checkov`) -> installation: "global"
12487
+ * 1. Codacy-managed venv — `<venv>/python -m checkov.main --version` -> "codacy"
12488
+ * 2. Global PATH — `checkov --version` -> "global"
12448
12489
  *
12449
- * Parses the version from `checkov --version` output using a version regex.
12450
- * Returns `available: false` (rather than throwing) if the binary is not
12451
- * found or returns a non-zero exit code.
12490
+ * checkov is always invoked as a module (see {@link MODULE_ARGS}); its wheel
12491
+ * ships no console-script, so on Windows there is no `checkov.exe` to probe.
12492
+ * Returns `available: false` (rather than throwing) if checkov cannot be run.
12452
12493
  */
12453
12494
  async checkAvailability(ctx) {
12454
12495
  ctx.logger.debug("Checking availability", { toolId: TOOL_ID });
12455
- const pythonInfo = await (0, import_tooling.findPython)(void 0, ctx.logger).catch(() => null);
12496
+ const pythonInfo = await (0, import_tooling.findPython)(PYTHON_VERSION_RANGE, ctx.logger).catch(() => null);
12456
12497
  const dependencies = pythonInfo ? [
12457
12498
  {
12458
12499
  name: "Python",
@@ -12462,46 +12503,36 @@ var adapter = {
12462
12503
  }
12463
12504
  ] : [{ name: "Python", available: false, reason: "Python 3 not found" }];
12464
12505
  const venvDir = (0, import_tooling.getVenvDir)(ctx.globalDir, TOOL_ID);
12465
- try {
12466
- if (pythonInfo) {
12467
- const venv = await (0, import_tooling.ensureVenv)(pythonInfo.path, venvDir, ctx.logger);
12468
- const version = await (0, import_tooling.checkVenvTool)(venv, BINARY, "--version", VERSION_REGEX, ctx.logger);
12469
- if (version) {
12470
- ctx.logger.debug("Checkov found in codacy venv", { toolId: TOOL_ID, version });
12471
- return {
12472
- available: true,
12473
- version,
12474
- path: (0, import_tooling.resolveVenvBinary)(venv, BINARY),
12475
- installation: "codacy",
12476
- dependencies
12477
- };
12478
- }
12506
+ const venvPython = (0, import_tooling.getVenvPaths)(venvDir).python;
12507
+ const venvPythonExists = await pathExists(venvPython);
12508
+ if (venvPythonExists) {
12509
+ const version = await probeCheckovVersion(venvPython, MODULE_ARGS, ctx.logger);
12510
+ if (version) {
12511
+ ctx.logger.debug("Checkov found in codacy venv", { toolId: TOOL_ID, version });
12512
+ return {
12513
+ available: true,
12514
+ version,
12515
+ path: venvPython,
12516
+ installation: "codacy",
12517
+ dependencies
12518
+ };
12479
12519
  }
12480
- } catch {
12481
12520
  }
12482
- try {
12483
- const { stdout, exitCode } = await (0, import_tooling.spawnTool)(BINARY, ["--version"], {
12484
- cwd: process.cwd(),
12485
- logger: ctx.logger
12486
- });
12487
- if (exitCode === 0) {
12488
- const match = stdout.match(VERSION_REGEX);
12489
- if (match) {
12490
- ctx.logger.debug("Checkov found on global PATH", { toolId: TOOL_ID, version: match[1] });
12491
- return {
12492
- available: true,
12493
- version: match[1],
12494
- installation: "global",
12495
- dependencies
12496
- };
12497
- }
12498
- }
12499
- } catch {
12521
+ const globalVersion = await probeCheckovVersion(BINARY, [], ctx.logger);
12522
+ if (globalVersion) {
12523
+ ctx.logger.debug("Checkov found on global PATH", { toolId: TOOL_ID, version: globalVersion });
12524
+ return {
12525
+ available: true,
12526
+ version: globalVersion,
12527
+ installation: "global",
12528
+ dependencies
12529
+ };
12500
12530
  }
12501
- ctx.logger.debug("Checkov not found", { toolId: TOOL_ID });
12531
+ const reason = venvPythonExists ? `checkov could not be run via '${venvPython} -m checkov.main --version' (see debug logs); it may not be installed in the venv or the venv's Python may be incompatible` : "checkov not found in the Codacy venv or on PATH";
12532
+ ctx.logger.debug("Checkov not found", { toolId: TOOL_ID, venvPython, venvPythonExists });
12502
12533
  return {
12503
12534
  available: false,
12504
- reason: "checkov binary not found in PATH or Codacy venv directory",
12535
+ reason,
12505
12536
  installHint: "pip install checkov # or\ncodacy-analysis analyze . --install-dependencies # auto-install",
12506
12537
  dependencies
12507
12538
  };
@@ -12515,7 +12546,7 @@ var adapter = {
12515
12546
  */
12516
12547
  async install(ctx) {
12517
12548
  ctx.logger.info("Starting install", { toolId: TOOL_ID });
12518
- const pythonInfo = await (0, import_tooling.ensurePython)(ctx.globalDir, void 0, ctx.logger);
12549
+ const pythonInfo = await (0, import_tooling.ensurePython)(ctx.globalDir, PYTHON_VERSION_RANGE, ctx.logger);
12519
12550
  if (!pythonInfo) {
12520
12551
  return {
12521
12552
  success: false,
@@ -12523,24 +12554,50 @@ var adapter = {
12523
12554
  toolId: TOOL_ID,
12524
12555
  phase: "toolInstall",
12525
12556
  kind: "MissingPrerequisite",
12526
- message: "Python 3 could not be found or downloaded. Install Python 3.9+ or enable auto-install.",
12557
+ message: "Python (>=3.9.0 <3.14.0) could not be found or downloaded. Checkov 3.2.x does not support Python 3.14+.",
12527
12558
  level: "error"
12528
12559
  }
12529
12560
  };
12530
12561
  }
12531
12562
  const venvDir = (0, import_tooling.getVenvDir)(ctx.globalDir, TOOL_ID);
12532
- try {
12533
- ctx.logger.info(`Creating venv for Checkov at ${venvDir}...`);
12563
+ const venvPython = (0, import_tooling.getVenvPaths)(venvDir).python;
12564
+ const installIntoVenv = async () => {
12534
12565
  const venv = await (0, import_tooling.ensureVenv)(pythonInfo.path, venvDir, ctx.logger);
12535
12566
  ctx.logger.info(
12536
12567
  `Installing ${PIP_PACKAGE} (this may take several minutes due to ~200 transitive dependencies)...`
12537
12568
  );
12538
12569
  await (0, import_tooling.pipInstall)(venv, [PIP_PACKAGE], ctx.logger);
12539
- const installedPath = (0, import_tooling.resolveVenvBinary)(venv, BINARY);
12540
- ctx.logger.info(`Installed Checkov to ${installedPath}`);
12570
+ return probeCheckovVersion(venv.python, MODULE_ARGS, ctx.logger);
12571
+ };
12572
+ try {
12573
+ ctx.logger.info(`Creating venv for Checkov at ${venvDir}...`);
12574
+ let version = await installIntoVenv();
12575
+ if (!version) {
12576
+ ctx.logger.warn(
12577
+ `Checkov installed but 'python -m checkov.main' did not run; rebuilding the venv`,
12578
+ { venvDir, binDirContents: await listDirSafe((0, import_tooling.getVenvPaths)(venvDir).binDir) }
12579
+ );
12580
+ await import_promises.default.rm(venvDir, { recursive: true, force: true }).catch(() => {
12581
+ });
12582
+ version = await installIntoVenv();
12583
+ }
12584
+ if (!version) {
12585
+ const contents = await listDirSafe((0, import_tooling.getVenvPaths)(venvDir).binDir);
12586
+ return {
12587
+ success: false,
12588
+ error: {
12589
+ toolId: TOOL_ID,
12590
+ phase: "toolInstall",
12591
+ kind: "InstallError",
12592
+ message: `Checkov install completed but 'python -m checkov.main --version' did not run in the venv (bin dir contains: ${contents.join(", ") || "nothing"}). The venv's Python may be incompatible with Checkov 3.2.x.`,
12593
+ level: "error"
12594
+ }
12595
+ };
12596
+ }
12597
+ ctx.logger.info(`Installed Checkov ${version} to ${venvPython}`);
12541
12598
  return {
12542
12599
  success: true,
12543
- installedPath,
12600
+ installedPath: venvPython,
12544
12601
  installedVersion: adapter.preferredVersion
12545
12602
  };
12546
12603
  } catch (err) {
@@ -12615,54 +12672,87 @@ var adapter = {
12615
12672
  if (ctx.targetFiles.length === 0) {
12616
12673
  return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, 0);
12617
12674
  }
12618
- let binary;
12675
+ let command;
12676
+ let prefixArgs;
12619
12677
  try {
12620
- binary = await resolveBinaryPath(ctx);
12678
+ ({ command, prefixArgs } = await resolveCheckovInvocation(ctx));
12621
12679
  } catch {
12622
- binary = BINARY;
12680
+ command = BINARY;
12681
+ prefixArgs = [];
12623
12682
  }
12624
- const args = ["-o", "json", "--quiet"];
12683
+ const baseArgs = [...prefixArgs, "-o", "json", "--quiet"];
12625
12684
  const useLocal = codacyConfig.useLocalConfigurationFile && codacyConfig.localConfigurationFile;
12626
12685
  if (useLocal) {
12627
- args.push("--config-file", codacyConfig.localConfigurationFile);
12628
- }
12629
- for (const file of ctx.targetFiles) {
12630
- args.push("-f", import_path.default.resolve(ctx.repositoryRoot, file));
12686
+ baseArgs.push("--config-file", codacyConfig.localConfigurationFile);
12631
12687
  }
12688
+ const absoluteFiles = ctx.targetFiles.map((f) => import_path.default.resolve(ctx.repositoryRoot, f));
12689
+ const fileChunks = (0, import_tooling.chunkFilesForArgv)(absoluteFiles);
12632
12690
  const env = buildEnv(ctx);
12691
+ const frameworks = [];
12633
12692
  try {
12634
- const { stdout, stderr, exitCode } = await (0, import_tooling.spawnTool)(binary, args, {
12635
- cwd: ctx.repositoryRoot,
12636
- env,
12637
- logger: ctx.logger
12638
- });
12639
- if (exitCode > 1) {
12640
- errors.push({
12641
- toolId: TOOL_ID,
12642
- phase: "toolInvoke",
12643
- kind: "NonZeroExit",
12644
- message: `checkov exited with code ${exitCode}${stderr ? `: ${stderr.trim()}` : ""}`,
12645
- level: "error"
12646
- });
12647
- return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
12648
- }
12649
- if (!stdout.trim()) {
12650
- return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
12651
- }
12652
- let parsed;
12653
- try {
12654
- parsed = JSON.parse(stdout);
12655
- } catch (err) {
12656
- errors.push({
12657
- toolId: TOOL_ID,
12658
- phase: "outputParse",
12659
- kind: "MalformedOutput",
12660
- message: `Failed to parse checkov JSON output: ${err instanceof Error ? err.message : String(err)}`,
12661
- level: "error"
12693
+ for (const chunk of fileChunks) {
12694
+ const fileArgs = [];
12695
+ for (const file of chunk) {
12696
+ fileArgs.push("-f", file);
12697
+ }
12698
+ const { stdout, stderr, exitCode } = await (0, import_tooling.spawnTool)(command, [...baseArgs, ...fileArgs], {
12699
+ cwd: ctx.repositoryRoot,
12700
+ env,
12701
+ logger: ctx.logger
12662
12702
  });
12663
- return (0, import_tooling.buildResult)(TOOL_ID, startedAt, /* @__PURE__ */ new Date(), issues, errors, ctx.targetFiles.length);
12703
+ if (exitCode > 1) {
12704
+ errors.push({
12705
+ toolId: TOOL_ID,
12706
+ phase: "toolInvoke",
12707
+ kind: "NonZeroExit",
12708
+ message: `checkov exited with code ${exitCode}${stderr ? `: ${stderr.trim()}` : ""}`,
12709
+ level: "error"
12710
+ });
12711
+ return (0, import_tooling.buildResult)(
12712
+ TOOL_ID,
12713
+ startedAt,
12714
+ /* @__PURE__ */ new Date(),
12715
+ issues,
12716
+ errors,
12717
+ ctx.targetFiles.length
12718
+ );
12719
+ }
12720
+ if (stderr && stderr.trim()) {
12721
+ errors.push({
12722
+ toolId: TOOL_ID,
12723
+ phase: "toolInvoke",
12724
+ kind: "StderrWarning",
12725
+ message: `checkov stderr: ${stderr.trim()}`,
12726
+ level: "warning"
12727
+ });
12728
+ }
12729
+ if (!stdout.trim()) continue;
12730
+ let parsed;
12731
+ try {
12732
+ parsed = JSON.parse(stdout);
12733
+ } catch (err) {
12734
+ errors.push({
12735
+ toolId: TOOL_ID,
12736
+ phase: "outputParse",
12737
+ kind: "MalformedOutput",
12738
+ message: `Failed to parse checkov JSON output: ${err instanceof Error ? err.message : String(err)}`,
12739
+ level: "error"
12740
+ });
12741
+ return (0, import_tooling.buildResult)(
12742
+ TOOL_ID,
12743
+ startedAt,
12744
+ /* @__PURE__ */ new Date(),
12745
+ issues,
12746
+ errors,
12747
+ ctx.targetFiles.length
12748
+ );
12749
+ }
12750
+ if (Array.isArray(parsed)) {
12751
+ frameworks.push(...parsed);
12752
+ } else {
12753
+ frameworks.push(parsed);
12754
+ }
12664
12755
  }
12665
- const frameworks = Array.isArray(parsed) ? parsed : [parsed];
12666
12756
  const enabledPatterns = new Set(codacyConfig.patterns.map((p) => p.patternId));
12667
12757
  const targetFilesSet = new Set(ctx.targetFiles);
12668
12758
  const linesCache = /* @__PURE__ */ new Map();
@@ -12716,15 +12806,6 @@ var adapter = {
12716
12806
  issues.push(issue);
12717
12807
  }
12718
12808
  }
12719
- if (stderr && stderr.trim()) {
12720
- errors.push({
12721
- toolId: TOOL_ID,
12722
- phase: "toolInvoke",
12723
- kind: "StderrWarning",
12724
- message: `checkov stderr: ${stderr.trim()}`,
12725
- level: "warning"
12726
- });
12727
- }
12728
12809
  } catch (err) {
12729
12810
  errors.push({
12730
12811
  toolId: TOOL_ID,
package/dist/metadata.js CHANGED
@@ -25,7 +25,29 @@ __export(metadata_exports, {
25
25
  module.exports = __toCommonJS(metadata_exports);
26
26
 
27
27
  // src/pattern-mappings.json
28
- var pattern_mappings_default = {};
28
+ var pattern_mappings_default = {
29
+ Dockerfile: {
30
+ prefixes: ["Checkov_CKV_DOCKER_", "Checkov_CKV2_DOCKER_"]
31
+ },
32
+ Terraform: {
33
+ prefixes: ["Checkov_CKV_TF_"]
34
+ },
35
+ "GitHub Actions": {
36
+ prefixes: ["Checkov_CKV_GHA_", "Checkov_CKV2_GHA_"]
37
+ },
38
+ CircleCI: {
39
+ prefixes: ["Checkov_CKV_CIRCLECIPIPELINES_"]
40
+ },
41
+ "GitLab CI": {
42
+ prefixes: ["Checkov_CKV_GITLABCI_"]
43
+ },
44
+ "Bitbucket Pipelines": {
45
+ prefixes: ["Checkov_CKV_BITBUCKETPIPELINES_"]
46
+ },
47
+ "Azure Pipelines": {
48
+ prefixes: ["Checkov_CKV_AZUREPIPELINES_"]
49
+ }
50
+ };
29
51
 
30
52
  // src/metadata.ts
31
53
  var descriptor = {
@@ -34,7 +56,7 @@ var descriptor = {
34
56
  preferredVersion: "3.2.508",
35
57
  languages: ["JSON", "YAML", "Terraform"],
36
58
  filePatterns: ["**/*.tf", "**/*.yaml", "**/*.yml", "**/*.json", "**/Dockerfile"],
37
- supportedOS: ["linux", "darwin"],
59
+ supportedOS: ["linux", "darwin", "win32"],
38
60
  supportedArch: ["x64", "arm64"],
39
61
  supportedRunners: ["local", "container"],
40
62
  frameworkMappings: pattern_mappings_default
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codacy/tools-checkov-3",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "Checkov adapter — CLI-mode IaC security scanner",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,7 +8,7 @@
8
8
  "dist"
9
9
  ],
10
10
  "dependencies": {
11
- "@codacy/tooling": "0.13.0"
11
+ "@codacy/tooling": "0.15.0"
12
12
  },
13
13
  "license": "MIT",
14
14
  "author": "Codacy <support@codacy.com> (https://www.codacy.com)",