From ea2d6428b5ab142ab3e749955c2c62a2293902e2 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Tue, 23 Apr 2024 21:00:21 +0300 Subject: [PATCH 1/9] ContentItemXSIAM default fromversion is now 8.0.0 --- .../content_graph/interface/neo4j/queries/validations.py | 3 +-- .../commands/content_graph/objects/content_item_xsiam.py | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/demisto_sdk/commands/content_graph/interface/neo4j/queries/validations.py b/demisto_sdk/commands/content_graph/interface/neo4j/queries/validations.py index 4b630bbdda..d6caf1ab69 100644 --- a/demisto_sdk/commands/content_graph/interface/neo4j/queries/validations.py +++ b/demisto_sdk/commands/content_graph/interface/neo4j/queries/validations.py @@ -64,10 +64,9 @@ def validate_unknown_content( def validate_fromversion( tx: Transaction, file_paths: List[str], for_supported_versions: bool ): - excluded_from_version = [ContentType.TRIGGER] op = ">=" if for_supported_versions else "<" query = f"""// Returning all the USES relationships with where the target's fromversion is higher than the source's -MATCH (content_item_from:{ContentType.BASE_CONTENT}&!{"&!".join(excluded_from_version)} {{deprecated: false, is_test: false}})-[r:{RelationshipType.USES}{{mandatorily:true}}]->(n) +MATCH (content_item_from{{deprecated: false, is_test: false}})-[r:{RelationshipType.USES}{{mandatorily:true}}]->(n) WHERE {versioned('content_item_from.fromversion')} < {versioned('n.fromversion')} AND {versioned('n.fromversion')} {op} {versioned(GENERAL_DEFAULT_FROMVERSION)} AND n.fromversion <> "{DEFAULT_CONTENT_ITEM_FROM_VERSION}" // skips types with no "fromversion" diff --git a/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py b/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py index 2fa38e081d..57a26562f6 100644 --- a/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py +++ b/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py @@ -4,7 +4,7 @@ import demisto_client from packaging.version import Version -from pydantic import DirectoryPath +from pydantic import DirectoryPath, validator from demisto_sdk.commands.common.constants import MarketplaceVersions from demisto_sdk.commands.common.tools import ( @@ -20,6 +20,12 @@ class ContentItemXSIAM(ContentItem, ABC): + @validator("fromversion", always=True) + def validate_from_version(cls, v: str) -> str: + if not v or "0.0.0" == v: + return "8.0.0" + return v + def dump( self, dir: DirectoryPath, From 184e2f541c82ee9b17436e23b3c5e02f0ec76308 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Wed, 24 Apr 2024 13:07:33 +0300 Subject: [PATCH 2/9] Use constants --- .../content_graph/objects/content_item_xsiam.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py b/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py index 57a26562f6..ddbf5db799 100644 --- a/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py +++ b/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py @@ -6,7 +6,11 @@ from packaging.version import Version from pydantic import DirectoryPath, validator -from demisto_sdk.commands.common.constants import MarketplaceVersions +from demisto_sdk.commands.common.constants import ( + DEFAULT_CONTENT_ITEM_FROM_VERSION, + MINIMUM_XSOAR_SAAS_VERSION, + MarketplaceVersions, +) from demisto_sdk.commands.common.tools import ( write_dict, ) @@ -22,8 +26,8 @@ class ContentItemXSIAM(ContentItem, ABC): @validator("fromversion", always=True) def validate_from_version(cls, v: str) -> str: - if not v or "0.0.0" == v: - return "8.0.0" + if not v or DEFAULT_CONTENT_ITEM_FROM_VERSION == v: + return MINIMUM_XSOAR_SAAS_VERSION return v def dump( From e3d3f1d611ceff781346303446f087d005f36647 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Wed, 24 Apr 2024 13:18:33 +0300 Subject: [PATCH 3/9] Revert from_version query change. Add changelog. --- .changelog/4235.yml | 4 ---- .changelog/4243.yml | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 .changelog/4235.yml create mode 100644 .changelog/4243.yml diff --git a/.changelog/4235.yml b/.changelog/4235.yml deleted file mode 100644 index 761264ade8..0000000000 --- a/.changelog/4235.yml +++ /dev/null @@ -1,4 +0,0 @@ -changes: -- description: Content item of type Trigger should not have a from_version, remove it from from_version validation. - type: fix -pr_number: 4235 diff --git a/.changelog/4243.yml b/.changelog/4243.yml new file mode 100644 index 0000000000..bbef58ad67 --- /dev/null +++ b/.changelog/4243.yml @@ -0,0 +1,4 @@ +changes: +- description: Change the minimum version of ContentItemXSIAM to 8.0.0 + type: fix +pr_number: 4243 From 2661e81a1d8a35e276a5c16724ae1626f5990480 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Wed, 24 Apr 2024 20:05:13 +0300 Subject: [PATCH 4/9] fix unit tests --- .../commands/content_graph/tests/parsers_and_models_test.py | 4 ++-- demisto_sdk/commands/upload/tests/uploader_test.py | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/demisto_sdk/commands/content_graph/tests/parsers_and_models_test.py b/demisto_sdk/commands/content_graph/tests/parsers_and_models_test.py index f4699d22e8..32ecce1070 100644 --- a/demisto_sdk/commands/content_graph/tests/parsers_and_models_test.py +++ b/demisto_sdk/commands/content_graph/tests/parsers_and_models_test.py @@ -5,8 +5,8 @@ from demisto_sdk.commands.common import tools from demisto_sdk.commands.common.constants import ( - DEFAULT_CONTENT_ITEM_FROM_VERSION, DEFAULT_CONTENT_ITEM_TO_VERSION, + MINIMUM_XSOAR_SAAS_VERSION, MarketplaceVersions, ) from demisto_sdk.commands.common.legacy_git_tools import git_path @@ -379,7 +379,7 @@ def test_correlation_rule_parser(self, pack: Pack): expected_name="correlation_rule_name", expected_path=colrrelation_rule_path, expected_content_type=ContentType.CORRELATION_RULE, - expected_fromversion=DEFAULT_CONTENT_ITEM_FROM_VERSION, + expected_fromversion=MINIMUM_XSOAR_SAAS_VERSION, expected_toversion=DEFAULT_CONTENT_ITEM_TO_VERSION, ) diff --git a/demisto_sdk/commands/upload/tests/uploader_test.py b/demisto_sdk/commands/upload/tests/uploader_test.py index 06c1b04860..b6f3dcb580 100644 --- a/demisto_sdk/commands/upload/tests/uploader_test.py +++ b/demisto_sdk/commands/upload/tests/uploader_test.py @@ -897,10 +897,8 @@ def test_upload_without_skip_validate(self, mocker, path: Path, version: str): "metadata.json", "pack_metadata.json", "XSIAMDashboards/", - "XSIAMDashboards/xsiamdashboard-MyDashboard.json", "XSIAMDashboards/external-xsiamdashboard-MyDashboard.json", "Triggers/", - "Triggers/trigger-MyTrigger.json", "Triggers/external-trigger-MyTrigger.json", }, ), From 795ba7fd27a001d1a58b0215fef1088591cb9d51 Mon Sep 17 00:00:00 2001 From: ilaner <88267954+ilaner@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:45:19 +0300 Subject: [PATCH 5/9] Update .changelog/4243.yml --- .changelog/4243.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changelog/4243.yml b/.changelog/4243.yml index bbef58ad67..1dbc3c40dd 100644 --- a/.changelog/4243.yml +++ b/.changelog/4243.yml @@ -1,4 +1,4 @@ changes: -- description: Change the minimum version of ContentItemXSIAM to 8.0.0 +- description: Change the default `fromversion` of XSIAM content items to 8.0.0 type: fix pr_number: 4243 From b08f7f6707091357c36fda7389f846d5e7e97f39 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Tue, 30 Apr 2024 13:12:03 +0300 Subject: [PATCH 6/9] Explicit add of fromversion to all content items --- demisto_sdk/commands/content_graph/objects/content_item.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/demisto_sdk/commands/content_graph/objects/content_item.py b/demisto_sdk/commands/content_graph/objects/content_item.py index 53be352e4d..c175a5cc6c 100644 --- a/demisto_sdk/commands/content_graph/objects/content_item.py +++ b/demisto_sdk/commands/content_graph/objects/content_item.py @@ -246,6 +246,11 @@ def prepare_for_upload( if not self.path.exists(): raise FileNotFoundError(f"Could not find file {self.path}") data = self.data + # Explicitly add fromversion + if self.path.suffix == ".yml": + data["fromversion"] = self.fromversion + else: # json + data["fromVersion"] = self.fromversion logger.debug(f"preparing {self.path}") return MarketplaceSuffixPreparer.prepare(data, current_marketplace) From 744f6984f22b856bc1b16013c18e40c24afcac44 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Mon, 13 May 2024 15:01:14 +0300 Subject: [PATCH 7/9] set fromversion according to marketplace version in parsers --- .../commands/content_graph/parsers/json_content_item.py | 5 ++++- .../commands/content_graph/parsers/yaml_content_item.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/demisto_sdk/commands/content_graph/parsers/json_content_item.py b/demisto_sdk/commands/content_graph/parsers/json_content_item.py index d9a115bebd..4814df7349 100644 --- a/demisto_sdk/commands/content_graph/parsers/json_content_item.py +++ b/demisto_sdk/commands/content_graph/parsers/json_content_item.py @@ -5,6 +5,7 @@ from demisto_sdk.commands.common.constants import ( DEFAULT_CONTENT_ITEM_FROM_VERSION, DEFAULT_CONTENT_ITEM_TO_VERSION, + MINIMUM_XSOAR_SAAS_VERSION, MarketplaceVersions, ) from demisto_sdk.commands.common.tools import get_json, get_value @@ -75,7 +76,9 @@ def fromversion(self) -> str: return get_value( self.json_data, self.field_mapping.get("fromversion", ""), - DEFAULT_CONTENT_ITEM_FROM_VERSION, + DEFAULT_CONTENT_ITEM_FROM_VERSION + if MarketplaceVersions.XSOAR_ON_PREM in self.supported_marketplaces + else MINIMUM_XSOAR_SAAS_VERSION, ) @property diff --git a/demisto_sdk/commands/content_graph/parsers/yaml_content_item.py b/demisto_sdk/commands/content_graph/parsers/yaml_content_item.py index d81ec3cd69..34eb5a5473 100644 --- a/demisto_sdk/commands/content_graph/parsers/yaml_content_item.py +++ b/demisto_sdk/commands/content_graph/parsers/yaml_content_item.py @@ -6,6 +6,7 @@ from demisto_sdk.commands.common.constants import ( DEFAULT_CONTENT_ITEM_FROM_VERSION, DEFAULT_CONTENT_ITEM_TO_VERSION, + MINIMUM_XSOAR_SAAS_VERSION, MarketplaceVersions, ) from demisto_sdk.commands.common.tools import get_value, get_yaml @@ -88,7 +89,9 @@ def fromversion(self) -> str: return get_value( self.yml_data, self.field_mapping.get("fromversion", ""), - DEFAULT_CONTENT_ITEM_FROM_VERSION, + DEFAULT_CONTENT_ITEM_FROM_VERSION + if MarketplaceVersions.XSOAR_ON_PREM in self.supported_marketplaces + else MINIMUM_XSOAR_SAAS_VERSION, ) @property From 7d6a4d9d63a3db12ba9fb24c3ebe115a0ef36e75 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Mon, 13 May 2024 23:37:26 +0300 Subject: [PATCH 8/9] comment out explicit add of fromversion --- .../commands/content_graph/objects/content_item.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/demisto_sdk/commands/content_graph/objects/content_item.py b/demisto_sdk/commands/content_graph/objects/content_item.py index c175a5cc6c..8ee9a07dad 100644 --- a/demisto_sdk/commands/content_graph/objects/content_item.py +++ b/demisto_sdk/commands/content_graph/objects/content_item.py @@ -246,11 +246,11 @@ def prepare_for_upload( if not self.path.exists(): raise FileNotFoundError(f"Could not find file {self.path}") data = self.data - # Explicitly add fromversion - if self.path.suffix == ".yml": - data["fromversion"] = self.fromversion - else: # json - data["fromVersion"] = self.fromversion + # # Explicitly add fromversion + # if self.path.suffix == ".yml": + # data["fromversion"] = self.fromversion + # else: # json + # data["fromVersion"] = self.fromversion logger.debug(f"preparing {self.path}") return MarketplaceSuffixPreparer.prepare(data, current_marketplace) From 5366f1ba49336d49503b0ecd50a0b5f930aa8e32 Mon Sep 17 00:00:00 2001 From: Danny_Fried Date: Wed, 15 May 2024 07:29:08 +0300 Subject: [PATCH 9/9] Remove explicit fromversion addition --- demisto_sdk/commands/content_graph/objects/content_item.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/demisto_sdk/commands/content_graph/objects/content_item.py b/demisto_sdk/commands/content_graph/objects/content_item.py index 8ee9a07dad..53be352e4d 100644 --- a/demisto_sdk/commands/content_graph/objects/content_item.py +++ b/demisto_sdk/commands/content_graph/objects/content_item.py @@ -246,11 +246,6 @@ def prepare_for_upload( if not self.path.exists(): raise FileNotFoundError(f"Could not find file {self.path}") data = self.data - # # Explicitly add fromversion - # if self.path.suffix == ".yml": - # data["fromversion"] = self.fromversion - # else: # json - # data["fromVersion"] = self.fromversion logger.debug(f"preparing {self.path}") return MarketplaceSuffixPreparer.prepare(data, current_marketplace)