fosslight-dependency 3.12.5__tar.gz → 3.12.7__tar.gz

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.
Files changed (35) hide show
  1. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/PKG-INFO +1 -1
  2. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/setup.py +1 -1
  3. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/_analyze_dependency.py +3 -0
  4. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/_package_manager.py +30 -40
  5. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/constant.py +3 -1
  6. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Cocoapods.py +37 -27
  7. fosslight_dependency-3.12.7/src/fosslight_dependency/package_manager/Helm.py +95 -0
  8. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/run_dependency_scanner.py +3 -3
  9. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency.egg-info/PKG-INFO +1 -1
  10. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency.egg-info/SOURCES.txt +1 -0
  11. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/LICENSE +0 -0
  12. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/LICENSES/Apache-2.0.txt +0 -0
  13. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/LICENSES/LicenseRef-3rd_party_licenses.txt +0 -0
  14. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/LICENSES/MIT.txt +0 -0
  15. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/MANIFEST.in +0 -0
  16. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/README.md +0 -0
  17. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/requirements.txt +0 -0
  18. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/setup.cfg +0 -0
  19. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/__init__.py +0 -0
  20. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/_help.py +0 -0
  21. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Android.py +0 -0
  22. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Carthage.py +0 -0
  23. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Go.py +0 -0
  24. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Gradle.py +0 -0
  25. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Maven.py +0 -0
  26. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Npm.py +0 -0
  27. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Nuget.py +0 -0
  28. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Pub.py +0 -0
  29. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Pypi.py +0 -0
  30. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/Swift.py +0 -0
  31. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency/package_manager/__init__.py +0 -0
  32. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency.egg-info/dependency_links.txt +0 -0
  33. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency.egg-info/entry_points.txt +0 -0
  34. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency.egg-info/requires.txt +0 -0
  35. {fosslight_dependency-3.12.5 → fosslight_dependency-3.12.7}/src/fosslight_dependency.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight_dependency
3
- Version: 3.12.5
3
+ Version: 3.12.7
4
4
  Summary: FOSSLight Dependency Scanner
5
5
  Home-page: https://github.com/fosslight/fosslight_dependency_scanner
6
6
  Author: LG Electronics
@@ -35,7 +35,7 @@ if __name__ == "__main__":
35
35
 
36
36
  setup(
37
37
  name=_PACKAEG_NAME,
38
- version='3.12.5',
38
+ version='3.12.7',
39
39
  package_dir={"": "src"},
40
40
  packages=find_namespace_packages(where='src'),
41
41
  description='FOSSLight Dependency Scanner',
@@ -17,6 +17,7 @@ from fosslight_dependency.package_manager.Swift import Swift
17
17
  from fosslight_dependency.package_manager.Carthage import Carthage
18
18
  from fosslight_dependency.package_manager.Go import Go
19
19
  from fosslight_dependency.package_manager.Nuget import Nuget
20
+ from fosslight_dependency.package_manager.Helm import Helm
20
21
  import fosslight_util.constant as constant
21
22
 
22
23
  logger = logging.getLogger(constant.LOGGER_NAME)
@@ -50,6 +51,8 @@ def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate
50
51
  package_manager = Go(input_dir, output_dir)
51
52
  elif package_manager_name == const.NUGET:
52
53
  package_manager = Nuget(input_dir, output_dir)
54
+ elif package_manager_name == const.HELM:
55
+ package_manager = Helm(input_dir, output_dir)
53
56
  else:
54
57
  logger.error(f"Not supported package manager name: {package_manager_name}")
55
58
  ret = False
@@ -82,7 +82,6 @@ class PackageManager:
82
82
  pass
83
83
 
84
84
  def run_gradle_task(self):
85
- dependency_tree_fname = 'tmp_dependency_tree.txt'
86
85
  if os.path.isfile(const.SUPPORT_PACKAE.get(self.package_manager_name)):
87
86
  gradle_backup = f'{const.SUPPORT_PACKAE.get(self.package_manager_name)}_bk'
88
87
 
@@ -91,15 +90,20 @@ class PackageManager:
91
90
  if not ret:
92
91
  return
93
92
 
94
- ret = self.exeucte_gradle_task(dependency_tree_fname)
93
+ if os.path.isfile('gradlew') or os.path.isfile('gradlew.bat'):
94
+ if self.platform == const.WINDOWS:
95
+ cmd_gradle = "gradlew.bat"
96
+ else:
97
+ cmd_gradle = "./gradlew"
98
+ else:
99
+ return 1
100
+ cmd = f"{cmd_gradle} allDeps"
101
+ ret = subprocess.check_output(cmd, shell=True, encoding='utf-8')
95
102
  if ret != 0:
103
+ self.parse_dependency_tree(ret)
104
+ else:
96
105
  self.set_direct_dependencies(False)
97
106
  logger.warning("Failed to run allDeps task.")
98
- else:
99
- self.parse_dependency_tree(dependency_tree_fname)
100
-
101
- if os.path.isfile(dependency_tree_fname):
102
- os.remove(dependency_tree_fname)
103
107
 
104
108
  if os.path.isfile(gradle_backup):
105
109
  os.remove(const.SUPPORT_PACKAE.get(self.package_manager_name))
@@ -128,40 +132,26 @@ class PackageManager:
128
132
 
129
133
  return ret
130
134
 
131
- def exeucte_gradle_task(self, dependency_tree_fname):
132
- if os.path.isfile('gradlew') or os.path.isfile('gradlew.bat'):
133
- if self.platform == const.WINDOWS:
134
- cmd_gradle = "gradlew.bat"
135
- else:
136
- cmd_gradle = "./gradlew"
137
- else:
138
- return 1
139
- cmd = f"{cmd_gradle} allDeps > {dependency_tree_fname}"
140
-
141
- ret = subprocess.call(cmd, shell=True)
142
- return ret
143
-
144
- def parse_dependency_tree(self, f_name):
135
+ def parse_dependency_tree(self, dependency_tree_fname):
145
136
  config = android_config if self.package_manager_name == 'android' else gradle_config
146
- with open(f_name, 'r', encoding='utf8') as input_fp:
147
- packages_in_config = False
148
- for i, line in enumerate(input_fp.readlines()):
149
- try:
150
- line_bk = copy.deepcopy(line)
151
- if not packages_in_config:
152
- filtered = next(filter(lambda c: re.findall(rf'^{c}\s\-', line), config), None)
153
- if filtered:
154
- packages_in_config = True
155
- else:
156
- if line == '':
157
- packages_in_config = False
158
- re_result = re.findall(r'\-\-\-\s([^\:\s]+\:[^\:\s]+)\:([^\:\s]+)', line)
159
- if re_result:
160
- self.total_dep_list.append(re_result[0][0])
161
- if re.match(r'^[\+|\\]\-\-\-\s([^\:\s]+\:[^\:\s]+)\:([^\:\s]+)', line_bk):
162
- self.direct_dep_list.append(re_result[0][0])
163
- except Exception as e:
164
- logger.error(f"Failed to parse dependency tree: {e}")
137
+ packages_in_config = False
138
+ for line in dependency_tree_fname.split('\n'):
139
+ try:
140
+ line_bk = copy.deepcopy(line)
141
+ if not packages_in_config:
142
+ filtered = next(filter(lambda c: re.findall(rf'^{c}\s\-', line), config), None)
143
+ if filtered:
144
+ packages_in_config = True
145
+ else:
146
+ if line == '':
147
+ packages_in_config = False
148
+ re_result = re.findall(r'\-\-\-\s([^\:\s]+\:[^\:\s]+)\:([^\:\s]+)', line)
149
+ if re_result:
150
+ self.total_dep_list.append(re_result[0][0])
151
+ if re.match(r'^[\+|\\]\-\-\-\s([^\:\s]+\:[^\:\s]+)\:([^\:\s]+)', line_bk):
152
+ self.direct_dep_list.append(re_result[0][0])
153
+ except Exception as e:
154
+ logger.error(f"Failed to parse dependency tree: {e}")
165
155
 
166
156
 
167
157
  def version_refine(oss_version):
@@ -21,6 +21,7 @@ SWIFT = 'swift'
21
21
  CARTHAGE = 'carthage'
22
22
  GO = 'go'
23
23
  NUGET = 'nuget'
24
+ HELM = 'helm'
24
25
 
25
26
  # Supported package name and manifest file
26
27
  SUPPORT_PACKAE = {
@@ -34,7 +35,8 @@ SUPPORT_PACKAE = {
34
35
  SWIFT: 'Package.resolved',
35
36
  CARTHAGE: 'Cartfile.resolved',
36
37
  GO: 'go.mod',
37
- NUGET: ['packages.config', os.path.join('obj', 'project.assets.json')]
38
+ NUGET: ['packages.config', os.path.join('obj', 'project.assets.json')],
39
+ HELM: 'Chart.yaml'
38
40
  }
39
41
 
40
42
  # default android app name
@@ -8,7 +8,6 @@ import logging
8
8
  import json
9
9
  import yaml
10
10
  import re
11
- import traceback
12
11
  import fosslight_util.constant as constant
13
12
  import fosslight_dependency.constant as const
14
13
  from fosslight_dependency._package_manager import PackageManager
@@ -99,8 +98,8 @@ class Cocoapods(PackageManager):
99
98
  command = f"pod spec which --regex ^{search_oss_name}$"
100
99
  spec_which = os.popen(command).readline()
101
100
  if spec_which.startswith('[!]'):
102
- logger.error(f"This command({command}) returns an error")
103
- return ''
101
+ logger.warning(f"This command({command}) returns an error")
102
+ continue
104
103
 
105
104
  file_path = spec_which.rstrip().split(os.path.sep)
106
105
  if file_path[0] == '':
@@ -110,38 +109,49 @@ class Cocoapods(PackageManager):
110
109
  spec_file_path = os.path.join(file_path_without_version, pod_oss[1], file_path[-1])
111
110
 
112
111
  oss_name, oss_version, license_name, dn_loc, homepage = self.get_oss_in_podspec(spec_file_path)
112
+ if oss_name == '':
113
+ continue
113
114
 
114
115
  sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
115
116
  oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment])
116
117
  except Exception as e:
117
- logger.warning(f"It failed to get {pod_oss[0]}:{e}")
118
- logger.warning(traceback.format_exc())
118
+ logger.warning(f"Fail to get {pod_oss[0]}:{e}")
119
119
 
120
120
  return sheet_list
121
121
 
122
122
  def get_oss_in_podspec(self, spec_file_path):
123
- with open(spec_file_path, 'r', encoding='utf8') as json_file:
124
- json_data = json.load(json_file)
125
-
126
- oss_origin_name = json_data['name']
127
- oss_name = f"{self.package_manager_name}:{oss_origin_name}"
128
- oss_version = json_data['version']
129
- homepage = f"{self.dn_url}pods/{oss_origin_name}"
130
-
131
- if not isinstance(json_data['license'], str):
132
- if 'type' in json_data['license']:
133
- license_name = json_data['license']['type']
134
- else:
135
- license_name = json_data['license']
136
-
137
- license_name = license_name.replace(",", "")
138
-
139
- source_keys = [key for key in json_data['source']]
140
- for src_type_i in _source_type:
141
- if src_type_i in source_keys:
142
- dn_loc = json_data['source'][src_type_i]
143
- if dn_loc.endswith('.git'):
144
- dn_loc = dn_loc[:-4]
123
+ oss_name = ''
124
+ oss_version = ''
125
+ license_name = ''
126
+ dn_loc = ''
127
+ homepage = ''
128
+ try:
129
+ with open(spec_file_path, 'r', encoding='utf8') as json_file:
130
+ json_data = json.load(json_file)
131
+
132
+ oss_origin_name = json_data['name']
133
+ oss_name = f"{self.package_manager_name}:{oss_origin_name}"
134
+ oss_version = json_data['version']
135
+ homepage = f"{self.dn_url}pods/{oss_origin_name}"
136
+
137
+ if 'license' in json_data:
138
+ if not isinstance(json_data['license'], str):
139
+ if 'type' in json_data['license']:
140
+ license_name = json_data['license']['type']
141
+ else:
142
+ license_name = json_data['license']
143
+ else:
144
+ license_name = ''
145
+ license_name = license_name.replace(",", "")
146
+
147
+ source_keys = [key for key in json_data['source']]
148
+ for src_type_i in _source_type:
149
+ if src_type_i in source_keys:
150
+ dn_loc = json_data['source'][src_type_i]
151
+ if dn_loc.endswith('.git'):
152
+ dn_loc = dn_loc[:-4]
153
+ except Exception as e:
154
+ logger.warning(f"Fail to get oss info in podspec:{e}")
145
155
 
146
156
  return oss_name, oss_version, license_name, dn_loc, homepage
147
157
 
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright (c) 2023 LG Electronics Inc.
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ import os
7
+ import logging
8
+ import subprocess
9
+ import yaml
10
+ import shutil
11
+ import fosslight_util.constant as constant
12
+ import fosslight_dependency.constant as const
13
+ from fosslight_dependency._package_manager import PackageManager
14
+ from fosslight_util.download import extract_compressed_dir
15
+
16
+ logger = logging.getLogger(constant.LOGGER_NAME)
17
+
18
+
19
+ class Helm(PackageManager):
20
+ package_manager_name = const.HELM
21
+ tmp_charts_dir = 'tmp_charts'
22
+
23
+ input_file_name = const.SUPPORT_PACKAE.get(package_manager_name)
24
+
25
+ def __init__(self, input_dir, output_dir):
26
+ super().__init__(self.package_manager_name, '', input_dir, output_dir)
27
+ self.append_input_package_list_file(self.input_file_name)
28
+
29
+ def __del__(self):
30
+ if os.path.exists(self.tmp_charts_dir):
31
+ shutil.rmtree(self.tmp_charts_dir, ignore_errors=True)
32
+
33
+ def run_plugin(self):
34
+ ret = True
35
+ charts_dir = 'charts'
36
+ if os.path.isdir(charts_dir):
37
+ shutil.copytree(charts_dir, self.tmp_charts_dir)
38
+ else:
39
+ logger.info("Execute 'helm dependency build' to obtain package info.")
40
+ cmd = "helm dependency build"
41
+
42
+ ret_cmd = subprocess.call(cmd, shell=True)
43
+ if ret_cmd != 0:
44
+ logger.error(f"Failed to build helm dependency: {cmd}")
45
+ ret = False
46
+ else:
47
+ shutil.copytree(charts_dir, self.tmp_charts_dir)
48
+ shutil.rmtree(charts_dir, ignore_errors=True)
49
+
50
+ ret = extract_compressed_dir(self.tmp_charts_dir, self.tmp_charts_dir, False)
51
+ if not ret:
52
+ logger.error(f'Fail to extract compressed dir: {self.tmp_charts_dir}')
53
+ else:
54
+ logger.warning('Success to extract compressed dir')
55
+
56
+ return ret
57
+
58
+ def parse_oss_information(self, f_name):
59
+ dep_item_list = []
60
+ sheet_list = []
61
+
62
+ with open(f_name, 'r', encoding='utf8') as yaml_fp:
63
+ yaml_f = yaml.safe_load(yaml_fp)
64
+ for dep in yaml_f['dependencies']:
65
+ dep_item_list.append(dep['name'])
66
+ for dep in dep_item_list:
67
+ try:
68
+ f_path = os.path.join(self.tmp_charts_dir, dep, f_name)
69
+ with open(f_path, 'r', encoding='utf8') as yaml_fp:
70
+ yaml_f = yaml.safe_load(yaml_fp)
71
+ oss_name = f'{self.package_manager_name}:{yaml_f["name"]}'
72
+ oss_version = yaml_f.get('version', '')
73
+ if oss_version.startswith('v'):
74
+ oss_version = oss_version[1:]
75
+
76
+ homepage = yaml_f.get('home', '')
77
+ dn_loc = ''
78
+ if yaml_f.get('sources', '') != '':
79
+ dn_loc = yaml_f.get('sources', '')[0]
80
+
81
+ license_name = ''
82
+ if yaml_f.get('annotations', '') != '':
83
+ license_name = yaml_f['annotations'].get('licenses', '')
84
+
85
+ if self.direct_dep:
86
+ comment = 'direct'
87
+
88
+ except Exception as e:
89
+ logging.warning(f"Fail to parse chart info {dep}: {e}")
90
+ continue
91
+
92
+ sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
93
+ oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment])
94
+
95
+ return sheet_list
@@ -83,14 +83,14 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
83
83
 
84
84
  if output_file == "":
85
85
  if output_extension == _json_ext:
86
- output_file = f"fosslight_opossum_{_start_time}"
86
+ output_file = f"fosslight_opossum_dep_{_start_time}"
87
87
  else:
88
- output_file = f"fosslight_report_{_start_time}"
88
+ output_file = f"fosslight_report_dep_{_start_time}"
89
89
  else:
90
90
  logger.error(msg)
91
91
  sys.exit(1)
92
92
 
93
- logger, _result_log = init_log(os.path.join(output_path, "fosslight_log_" + _start_time + ".txt"),
93
+ logger, _result_log = init_log(os.path.join(output_path, "fosslight_log_dep_" + _start_time + ".txt"),
94
94
  True, logging.INFO, logging.DEBUG, _PKG_NAME)
95
95
 
96
96
  logger.info(f"Tool Info : {_result_log['Tool Info']}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight-dependency
3
- Version: 3.12.5
3
+ Version: 3.12.7
4
4
  Summary: FOSSLight Dependency Scanner
5
5
  Home-page: https://github.com/fosslight/fosslight_dependency_scanner
6
6
  Author: LG Electronics
@@ -24,6 +24,7 @@ src/fosslight_dependency/package_manager/Carthage.py
24
24
  src/fosslight_dependency/package_manager/Cocoapods.py
25
25
  src/fosslight_dependency/package_manager/Go.py
26
26
  src/fosslight_dependency/package_manager/Gradle.py
27
+ src/fosslight_dependency/package_manager/Helm.py
27
28
  src/fosslight_dependency/package_manager/Maven.py
28
29
  src/fosslight_dependency/package_manager/Npm.py
29
30
  src/fosslight_dependency/package_manager/Nuget.py