From e02616d4a1712186a825e83888c96d5a8491e37f Mon Sep 17 00:00:00 2001 From: naftali-hershler Date: Thu, 28 Nov 2024 12:47:42 +0200 Subject: [PATCH 1/3] CM-42089 add ruby restore support --- .../cli/files_collector/sca/ruby/__init__.py | 0 .../sca/ruby/restore_ruby_dependencies.py | 29 +++++++++++++++++++ .../files_collector/sca/sca_code_scanner.py | 2 ++ 3 files changed, 31 insertions(+) create mode 100644 cycode/cli/files_collector/sca/ruby/__init__.py create mode 100644 cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py diff --git a/cycode/cli/files_collector/sca/ruby/__init__.py b/cycode/cli/files_collector/sca/ruby/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py b/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py new file mode 100644 index 00000000..c647ca9a --- /dev/null +++ b/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py @@ -0,0 +1,29 @@ +import os +from typing import List, Optional + +import click + +from cycode.cli.files_collector.sca.base_restore_dependencies import BaseRestoreDependencies +from cycode.cli.models import Document + +RUBY_PROJECT_FILE_EXTENSIONS = ['Gemfile'] +RUBY_LOCK_FILE_NAME = 'Gemfile.lock' + +class RestoreRubyDependencies(BaseRestoreDependencies): + def __init__(self, context: click.Context, is_git_diff: bool, command_timeout: int) -> None: + super().__init__(context, is_git_diff, command_timeout) + + def is_project(self, document: Document) -> bool: + return any(document.path.endswith(ext) for ext in RUBY_PROJECT_FILE_EXTENSIONS) + + def get_commands(self, manifest_file_path: str) -> List[List[str]]: + return [['/opt/homebrew/opt/ruby/bin/bundle', '--quiet']] + + def get_lock_file_name(self) -> str: + return RUBY_LOCK_FILE_NAME + + def verify_restore_file_already_exist(self, restore_file_path: str) -> bool: + return os.path.isfile(restore_file_path) + + def get_working_directory(self, document: Document) -> Optional[str]: + return os.path.dirname(document.absolute_path) diff --git a/cycode/cli/files_collector/sca/sca_code_scanner.py b/cycode/cli/files_collector/sca/sca_code_scanner.py index d13d486c..c988f6cf 100644 --- a/cycode/cli/files_collector/sca/sca_code_scanner.py +++ b/cycode/cli/files_collector/sca/sca_code_scanner.py @@ -10,6 +10,7 @@ from cycode.cli.files_collector.sca.maven.restore_maven_dependencies import RestoreMavenDependencies from cycode.cli.files_collector.sca.npm.restore_npm_dependencies import RestoreNpmDependencies from cycode.cli.files_collector.sca.nuget.restore_nuget_dependencies import RestoreNugetDependencies +from cycode.cli.files_collector.sca.ruby.restore_ruby_dependencies import RestoreRubyDependencies from cycode.cli.files_collector.sca.sbt.restore_sbt_dependencies import RestoreSbtDependencies from cycode.cli.models import Document from cycode.cli.utils.git_proxy import git_proxy @@ -138,6 +139,7 @@ def restore_handlers(context: click.Context, is_git_diff: bool) -> List[BaseRest RestoreGoDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT), RestoreNugetDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT), RestoreNpmDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT), + RestoreRubyDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT) ] From ce2c1615d63b1c814ec7a3822c55eeb73a6a6df7 Mon Sep 17 00:00:00 2001 From: naftali-hershler Date: Thu, 28 Nov 2024 12:47:42 +0200 Subject: [PATCH 2/3] CM-42089 add ruby restore support --- .../cli/files_collector/sca/ruby/restore_ruby_dependencies.py | 1 + cycode/cli/files_collector/sca/sca_code_scanner.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py b/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py index c647ca9a..cadf1b99 100644 --- a/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +++ b/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py @@ -9,6 +9,7 @@ RUBY_PROJECT_FILE_EXTENSIONS = ['Gemfile'] RUBY_LOCK_FILE_NAME = 'Gemfile.lock' + class RestoreRubyDependencies(BaseRestoreDependencies): def __init__(self, context: click.Context, is_git_diff: bool, command_timeout: int) -> None: super().__init__(context, is_git_diff, command_timeout) diff --git a/cycode/cli/files_collector/sca/sca_code_scanner.py b/cycode/cli/files_collector/sca/sca_code_scanner.py index c988f6cf..ca6908b6 100644 --- a/cycode/cli/files_collector/sca/sca_code_scanner.py +++ b/cycode/cli/files_collector/sca/sca_code_scanner.py @@ -139,7 +139,7 @@ def restore_handlers(context: click.Context, is_git_diff: bool) -> List[BaseRest RestoreGoDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT), RestoreNugetDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT), RestoreNpmDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT), - RestoreRubyDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT) + RestoreRubyDependencies(context, is_git_diff, BUILD_DEP_TREE_TIMEOUT), ] From c8baa5af66b762d4b74ad7536338dad3bbe53a92 Mon Sep 17 00:00:00 2001 From: naftali-hershler Date: Wed, 4 Dec 2024 11:53:15 +0200 Subject: [PATCH 3/3] CM-42089 fix ruff --- .../files_collector/sca/ruby/restore_ruby_dependencies.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py b/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py index cadf1b99..3dfc4a16 100644 --- a/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +++ b/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py @@ -1,8 +1,6 @@ import os from typing import List, Optional -import click - from cycode.cli.files_collector.sca.base_restore_dependencies import BaseRestoreDependencies from cycode.cli.models import Document @@ -11,14 +9,11 @@ class RestoreRubyDependencies(BaseRestoreDependencies): - def __init__(self, context: click.Context, is_git_diff: bool, command_timeout: int) -> None: - super().__init__(context, is_git_diff, command_timeout) - def is_project(self, document: Document) -> bool: return any(document.path.endswith(ext) for ext in RUBY_PROJECT_FILE_EXTENSIONS) def get_commands(self, manifest_file_path: str) -> List[List[str]]: - return [['/opt/homebrew/opt/ruby/bin/bundle', '--quiet']] + return [['bundle', '--quiet']] def get_lock_file_name(self) -> str: return RUBY_LOCK_FILE_NAME