diff --git a/README.md b/README.md index fdf4dc23..5fe080f7 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ In this user guide, you can see how to install the FOSSLight Dependency Scanner - Javascript + Javascript Npm package.json O @@ -44,6 +44,13 @@ In this user guide, you can see how to install the FOSSLight Dependency Scanner O O O + + + Yarn + package.json + O + O + O Java diff --git a/src/fosslight_dependency/_analyze_dependency.py b/src/fosslight_dependency/_analyze_dependency.py index c1cafdec..64bd1028 100644 --- a/src/fosslight_dependency/_analyze_dependency.py +++ b/src/fosslight_dependency/_analyze_dependency.py @@ -35,7 +35,7 @@ def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate if package_manager_name == const.PYPI: package_manager = Pypi(input_dir, output_dir, pip_activate_cmd, pip_deactivate_cmd) - elif package_manager_name == const.NPM: + elif package_manager_name == const.NPM or package_manager_name == const.YARN: package_manager = Npm(input_dir, output_dir) elif package_manager_name == const.MAVEN: package_manager = Maven(input_dir, output_dir, output_custom_dir) diff --git a/src/fosslight_dependency/_help.py b/src/fosslight_dependency/_help.py index 6ec2f789..37e9fc33 100644 --- a/src/fosslight_dependency/_help.py +++ b/src/fosslight_dependency/_help.py @@ -16,6 +16,7 @@ Maven (Java) NPM (Node.js) PNPM (Node.js) + Yarn (Node.js) PIP (Python) Pub (Dart with flutter) Cocoapods (Swift/Obj-C) @@ -33,7 +34,7 @@ -v\t\t\t\t Print the version of the script. -m \t Enter the package manager. \t(npm, maven, gradle, pypi, pub, cocoapods, android, swift, carthage, - \t go, nuget, helm, unity, cargo, pnpm) + \t go, nuget, helm, unity, cargo, pnpm, yarn) -p \t\t Enter the path where the script will be run. -e \t\t Enter the path where the analysis will not be performed. -o \t\t Output path diff --git a/src/fosslight_dependency/constant.py b/src/fosslight_dependency/constant.py index ede861b5..e0e1b1b4 100644 --- a/src/fosslight_dependency/constant.py +++ b/src/fosslight_dependency/constant.py @@ -25,6 +25,7 @@ UNITY = 'unity' CARGO = 'cargo' PNPM = 'pnpm' +YARN = 'yarn' # Supported package name and manifest file SUPPORT_PACKAE = { diff --git a/src/fosslight_dependency/package_manager/Npm.py b/src/fosslight_dependency/package_manager/Npm.py index 8e33214f..60b60a60 100644 --- a/src/fosslight_dependency/package_manager/Npm.py +++ b/src/fosslight_dependency/package_manager/Npm.py @@ -53,8 +53,14 @@ def start_license_checker(self): self.flag_tmp_node_modules = True cmd_ret = subprocess.call(npm_install_cmd, shell=True) if cmd_ret != 0: - logger.error(f"{npm_install_cmd} returns an error") - return False + logger.warning(f"{npm_install_cmd} returns an error. Trying yarn as fallback...") + yarn_install_cmd = 'yarn install --production --ignore-scripts' + cmd_ret = subprocess.call(yarn_install_cmd, shell=True) + if cmd_ret != 0: + logger.error(f"Both {npm_install_cmd} and {yarn_install_cmd} failed") + return False + else: + logger.info(f"Successfully executed {yarn_install_cmd}") # customized json file for obtaining specific items with license-checker self.make_custom_json(self.tmp_custom_json) diff --git a/src/fosslight_dependency/run_dependency_scanner.py b/src/fosslight_dependency/run_dependency_scanner.py index 028791d7..762bedd7 100755 --- a/src/fosslight_dependency/run_dependency_scanner.py +++ b/src/fosslight_dependency/run_dependency_scanner.py @@ -207,6 +207,9 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='', autodetect = True found_package_manager = {} if package_manager: + scan_item.set_cover_comment(f"Manual detect mode (-m {package_manager})") + if package_manager == const.YARN: + package_manager = const.NPM autodetect = False support_packagemanager = list(const.SUPPORT_PACKAE.keys()) @@ -221,7 +224,6 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='', manifest_file_name.extend(value) else: manifest_file_name.append(value) - scan_item.set_cover_comment(f"Manual detect mode (-m {package_manager})") else: manifest_file_name = []