devsecops-engine-tools 1.7.11__py3-none-any.whl → 1.7.12__py3-none-any.whl
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.
Potentially problematic release.
This version of devsecops-engine-tools might be problematic. Click here for more details.
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +7 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +2 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +29 -19
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +14 -13
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +15 -1
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +8 -2
- devsecops_engine_tools/version.py +1 -1
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.12.dist-info}/METADATA +1 -1
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.12.dist-info}/RECORD +12 -12
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.12.dist-info}/WHEEL +0 -0
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.12.dist-info}/entry_points.txt +0 -0
- {devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.12.dist-info}/top_level.txt +0 -0
|
@@ -128,6 +128,13 @@ class HandleScan:
|
|
|
128
128
|
config_tool["ENGINE_SECRET"]["TOOL"],
|
|
129
129
|
self.devops_platform_gateway
|
|
130
130
|
)
|
|
131
|
+
if (
|
|
132
|
+
dict_args["use_vulnerability_management"] == "true"
|
|
133
|
+
and input_core.path_file_results
|
|
134
|
+
):
|
|
135
|
+
self._use_vulnerability_management(
|
|
136
|
+
config_tool, input_core, dict_args, secret_tool, env
|
|
137
|
+
)
|
|
131
138
|
return findings_list, input_core
|
|
132
139
|
elif "engine_dependencies" in dict_args["tool"]:
|
|
133
140
|
if secret_tool is not None:
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py
CHANGED
|
@@ -53,6 +53,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
|
|
|
53
53
|
"CHECKOV": "Checkov Scan",
|
|
54
54
|
"PRISMA": "Twistlock Image Scan",
|
|
55
55
|
"XRAY": "JFrog Xray On Demand Binary Scan",
|
|
56
|
+
"TRUFFLEHOG": "Trufflehog Scan",
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
if any(
|
|
@@ -60,7 +61,7 @@ class DefectDojoPlatform(VulnerabilityManagementGateway):
|
|
|
60
61
|
for branch in vulnerability_management.config_tool[
|
|
61
62
|
"VULNERABILITY_MANAGER"
|
|
62
63
|
]["BRANCH_FILTER"].split(",")
|
|
63
|
-
):
|
|
64
|
+
) or (vulnerability_management.dict_args["tool"] == 'engine_secret'):
|
|
64
65
|
request: ImportScanRequest = Connect.cmdb(
|
|
65
66
|
cmdb_mapping={
|
|
66
67
|
"product_type_name": "nombreevc",
|
|
@@ -28,16 +28,10 @@ class SecretScan:
|
|
|
28
28
|
self.tool_deserialize = tool_deserialize
|
|
29
29
|
self.git_gateway = git_gateway
|
|
30
30
|
|
|
31
|
-
def process(self,
|
|
32
|
-
tool = str(tool).lower()
|
|
33
|
-
init_config_tool = self.devops_platform_gateway.get_remote_config(
|
|
34
|
-
dict_args["remote_config_repo"], "engine_sast/engine_secret/ConfigTool.json"
|
|
35
|
-
)
|
|
36
|
-
config_tool, skip_tool = self.complete_config_tool(
|
|
37
|
-
init_config_tool, tool
|
|
38
|
-
)
|
|
31
|
+
def process(self, skip_tool, config_tool):
|
|
39
32
|
finding_list = []
|
|
40
|
-
|
|
33
|
+
file_path_findings = ""
|
|
34
|
+
if skip_tool == False:
|
|
41
35
|
self.tool_gateway.install_tool(self.devops_platform_gateway.get_variable("os"), self.devops_platform_gateway.get_variable("temp_directory"))
|
|
42
36
|
files_pullrequest = self.git_gateway.get_files_pull_request(
|
|
43
37
|
self.devops_platform_gateway.get_variable("work_folder"),
|
|
@@ -49,24 +43,40 @@ class SecretScan:
|
|
|
49
43
|
self.devops_platform_gateway.get_variable("project_name"),
|
|
50
44
|
self.devops_platform_gateway.get_variable("repository"),
|
|
51
45
|
self.devops_platform_gateway.get_variable("repository_provider"))
|
|
52
|
-
|
|
53
|
-
self.tool_gateway.run_tool_secret_scan(
|
|
46
|
+
findings, file_path_findings = self.tool_gateway.run_tool_secret_scan(
|
|
54
47
|
files_pullrequest,
|
|
55
48
|
config_tool.exclude_path,
|
|
56
49
|
self.devops_platform_gateway.get_variable("os"),
|
|
57
50
|
self.devops_platform_gateway.get_variable("work_folder"),
|
|
58
51
|
config_tool.number_threads,
|
|
59
52
|
self.devops_platform_gateway.get_variable("repository")
|
|
60
|
-
)
|
|
53
|
+
)
|
|
54
|
+
finding_list = self.tool_deserialize.get_list_vulnerability(
|
|
55
|
+
findings,
|
|
61
56
|
self.devops_platform_gateway.get_variable("os"),
|
|
62
57
|
self.devops_platform_gateway.get_variable("work_folder")
|
|
63
58
|
)
|
|
64
|
-
return finding_list,
|
|
59
|
+
return finding_list, file_path_findings
|
|
65
60
|
|
|
66
|
-
def complete_config_tool(self,
|
|
67
|
-
|
|
61
|
+
def complete_config_tool(self, dict_args, tool):
|
|
62
|
+
tool = str(tool).lower()
|
|
63
|
+
init_config_tool = self.devops_platform_gateway.get_remote_config(
|
|
64
|
+
dict_args["remote_config_repo"], "engine_sast/engine_secret/ConfigTool.json"
|
|
65
|
+
)
|
|
66
|
+
config_tool = DeserializeConfigTool(json_data=init_config_tool, tool=tool)
|
|
68
67
|
config_tool.scope_pipeline = self.devops_platform_gateway.get_variable("pipeline_name")
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
return config_tool
|
|
69
|
+
|
|
70
|
+
def skip_from_exclusion(self, exclusions):
|
|
71
|
+
"""
|
|
72
|
+
Handle skip tool.
|
|
73
|
+
|
|
74
|
+
Return: bool: True -> skip tool, False -> not skip tool.
|
|
75
|
+
"""
|
|
76
|
+
pipeline_name = self.devops_platform_gateway.get_variable("pipeline_name")
|
|
77
|
+
if (pipeline_name in exclusions) and (
|
|
78
|
+
exclusions[pipeline_name].get("SKIP_TOOL", 0)
|
|
79
|
+
):
|
|
80
|
+
return True
|
|
81
|
+
else:
|
|
82
|
+
return False
|
|
@@ -37,19 +37,20 @@ class SetInputCore:
|
|
|
37
37
|
list_exclusions = []
|
|
38
38
|
for key, value in exclusions_data.items():
|
|
39
39
|
if (key == "All") or (key == pipeline_name):
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
40
|
+
if value.get(tool, 0):
|
|
41
|
+
exclusions = [
|
|
42
|
+
Exclusions(
|
|
43
|
+
id=item.get("id", ""),
|
|
44
|
+
where=item.get("where", ""),
|
|
45
|
+
create_date=item.get("create_date", ""),
|
|
46
|
+
expired_date=item.get("expired_date", ""),
|
|
47
|
+
severity=item.get("severity", ""),
|
|
48
|
+
hu=item.get("hu", ""),
|
|
49
|
+
reason=item.get("reason", "Risk acceptance"),
|
|
50
|
+
)
|
|
51
|
+
for item in value[tool]
|
|
52
|
+
]
|
|
53
|
+
list_exclusions.extend(exclusions)
|
|
53
54
|
return list_exclusions
|
|
54
55
|
|
|
55
56
|
def set_input_core(self, finding_list):
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import os
|
|
2
3
|
import re
|
|
3
4
|
import subprocess
|
|
4
5
|
import concurrent.futures
|
|
@@ -61,7 +62,8 @@ class TrufflehogRun(ToolGateway):
|
|
|
61
62
|
include_paths,
|
|
62
63
|
[repository_name] * len(include_paths),
|
|
63
64
|
)
|
|
64
|
-
|
|
65
|
+
findings, file_findings = self.create_file(self.decode_output(results), agent_work_folder)
|
|
66
|
+
return findings, file_findings
|
|
65
67
|
|
|
66
68
|
def config_include_path(self, files, agent_work_folder):
|
|
67
69
|
chunks = []
|
|
@@ -102,3 +104,15 @@ class TrufflehogRun(ToolGateway):
|
|
|
102
104
|
if json_obj not in result:
|
|
103
105
|
result.append(json_obj)
|
|
104
106
|
return result
|
|
107
|
+
|
|
108
|
+
def create_file(self, findings, agent_work_folder):
|
|
109
|
+
file_findings = os.path.join(agent_work_folder, "secret_scan_result.json")
|
|
110
|
+
with open(file_findings, "w") as file:
|
|
111
|
+
for find in findings:
|
|
112
|
+
original_where = str(find.get("SourceMetadata").get("Data").get("Filesystem").get("file"))
|
|
113
|
+
original_where = original_where.replace("\\", "/")
|
|
114
|
+
where_text = original_where.replace(agent_work_folder, "")
|
|
115
|
+
find["SourceMetadata"]["Data"]["Filesystem"]["file"] = where_text
|
|
116
|
+
json_str = json.dumps(find)
|
|
117
|
+
file.write(json_str + '\n')
|
|
118
|
+
return findings, file_findings
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py
CHANGED
|
@@ -6,6 +6,12 @@ from devsecops_engine_tools.engine_sast.engine_secret.src.domain.usecases.set_in
|
|
|
6
6
|
|
|
7
7
|
def engine_secret_scan(devops_platform_gateway, tool_gateway, dict_args, tool, tool_deserealizator, git_gateway):
|
|
8
8
|
sys.stdout.reconfigure(encoding='utf-8')
|
|
9
|
-
|
|
9
|
+
exclusions = devops_platform_gateway.get_remote_config(
|
|
10
|
+
dict_args["remote_config_repo"], "engine_sast/engine_secret/Exclusions.json"
|
|
11
|
+
)
|
|
12
|
+
secret_scan = SecretScan(tool_gateway, devops_platform_gateway, tool_deserealizator, git_gateway)
|
|
13
|
+
config_tool = secret_scan.complete_config_tool(dict_args, tool)
|
|
14
|
+
skip_tool = secret_scan.skip_from_exclusion(exclusions)
|
|
15
|
+
finding_list, file_path_findings = secret_scan.process(skip_tool, config_tool)
|
|
10
16
|
input_core = SetInputCore(devops_platform_gateway, dict_args, tool, config_tool)
|
|
11
|
-
return finding_list, input_core.set_input_core(
|
|
17
|
+
return finding_list, input_core.set_input_core(file_path_findings)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '1.7.
|
|
1
|
+
version = '1.7.12'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
devsecops_engine_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
devsecops_engine_tools/version.py,sha256=
|
|
2
|
+
devsecops_engine_tools/version.py,sha256=XbIhoEEUEJTJUiJEPml2J2LjQIi6Frpqax51My0O9Eg,18
|
|
3
3
|
devsecops_engine_tools/engine_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
devsecops_engine_tools/engine_core/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
devsecops_engine_tools/engine_core/src/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -26,7 +26,7 @@ devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_manage
|
|
|
26
26
|
devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
27
|
devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py,sha256=z6lcd-tnb-3QfZ1yf2ZlaRbovwF0YE6nUmS5V92aszc,15534
|
|
28
28
|
devsecops_engine_tools/engine_core/src/domain/usecases/handle_risk.py,sha256=EBLEzm-p_lEeB7T8iarn2Fc4_6hY0XAIT1AJATd2JUM,2473
|
|
29
|
-
devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=
|
|
29
|
+
devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py,sha256=bcQV-mBGoMwUENtWWCl245baGJNSmLxOLvd50S0C9zc,6702
|
|
30
30
|
devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py,sha256=Xi0iNnPrFgqd2cBdAA5E_tgouhxs-BTo016aolnGgv8,2413
|
|
31
31
|
devsecops_engine_tools/engine_core/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
32
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -36,7 +36,7 @@ devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secret
|
|
|
36
36
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
37
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py,sha256=Ot1j5my-iEpU-ZYy9yNXkwmwLOmJ3f95JyyAUcpFN5g,4967
|
|
38
38
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
-
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=
|
|
39
|
+
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py,sha256=fnyexfnIfFyP4iCLTeMwWa6OaEP_VYcnPg8roANIKGs,10864
|
|
40
40
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/printer_pretty_table.py,sha256=Tz056qYuIKrdYGKyoPo7xFdOpfN3A0YMd3cCSAGVrYQ,3828
|
|
42
42
|
devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -113,17 +113,17 @@ devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gatewa
|
|
|
113
113
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/git_gateway.py,sha256=x6LFK8wZuVix-ZCBdBQTzvjQi59nZYVrSOTatCOQbxc,638
|
|
114
114
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py,sha256=juharYjy__KyB0fFCbU30k_aLd_9cQgsoCMeodq9ebA,593
|
|
115
115
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=
|
|
117
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=
|
|
116
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py,sha256=VSeZorNjc98TTqGxD1NKm1ox__DRlCBqLCrA2heTxtM,3907
|
|
117
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py,sha256=k0LZd9PJpqEDns6DLYRGu9DzpRZeFsxAnowcjP5Rml4,2838
|
|
118
118
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
119
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
120
120
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
121
121
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py,sha256=xKIUAnNK4u0pTHgo5tFrzmnquBegBQgN2-3jU6V6vxQ,2642
|
|
122
122
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
123
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py,sha256=HZcNUa9VvK1InsDY94HiuDQuEH_R6pJIeAN3Zwi8CBA,1825
|
|
124
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=
|
|
124
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py,sha256=cvCSKTDN-4oL9H5EZF_-WrP5bNamFt0WfeCwaMO_Nfo,5345
|
|
125
125
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=
|
|
126
|
+
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py,sha256=g3DNFlvt6NEYG-g0CjSAQAUUh6spWpnkU64Pvi3cjqM,1028
|
|
127
127
|
devsecops_engine_tools/engine_sca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
128
|
devsecops_engine_tools/engine_sca/engine_container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
129
|
devsecops_engine_tools/engine_sca/engine_container/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -242,8 +242,8 @@ devsecops_engine_tools/engine_utilities/utils/logger_info.py,sha256=4Mz8Bwlm9Mku
|
|
|
242
242
|
devsecops_engine_tools/engine_utilities/utils/name_conversion.py,sha256=ADJrRGaxYSDe0ZRh6VHRf53H4sXPcb-vNP_i81PUn3I,307
|
|
243
243
|
devsecops_engine_tools/engine_utilities/utils/printers.py,sha256=GAslbWaBpwP3mP6fBsgVl07TTBgcCggQTy8h2M9ibeo,612
|
|
244
244
|
devsecops_engine_tools/engine_utilities/utils/session_manager.py,sha256=yNtlT-8Legz1sHbGPH8LNYjL-LgDUE0zXG2rYjiab7U,290
|
|
245
|
-
devsecops_engine_tools-1.7.
|
|
246
|
-
devsecops_engine_tools-1.7.
|
|
247
|
-
devsecops_engine_tools-1.7.
|
|
248
|
-
devsecops_engine_tools-1.7.
|
|
249
|
-
devsecops_engine_tools-1.7.
|
|
245
|
+
devsecops_engine_tools-1.7.12.dist-info/METADATA,sha256=kpJhqb5u7IYwXEvJf79--U9cddAzxdHCif-kNijLL04,9927
|
|
246
|
+
devsecops_engine_tools-1.7.12.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
247
|
+
devsecops_engine_tools-1.7.12.dist-info/entry_points.txt,sha256=9IjXF_7Zpgowq_SY6OSmsA9vZze18a8_AeHwkQVrgKk,131
|
|
248
|
+
devsecops_engine_tools-1.7.12.dist-info/top_level.txt,sha256=ge6y0X_xBAU1aG3EMWFtl9djbVyg5BxuSp2r2Lg6EQU,23
|
|
249
|
+
devsecops_engine_tools-1.7.12.dist-info/RECORD,,
|
|
File without changes
|
{devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.12.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{devsecops_engine_tools-1.7.11.dist-info → devsecops_engine_tools-1.7.12.dist-info}/top_level.txt
RENAMED
|
File without changes
|