diff --git a/.changelog/4243.yml b/.changelog/4243.yml new file mode 100644 index 0000000000..1dbc3c40dd --- /dev/null +++ b/.changelog/4243.yml @@ -0,0 +1,4 @@ +changes: +- description: Change the default `fromversion` of XSIAM content items to 8.0.0 + type: fix +pr_number: 4243 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..ddbf5db799 100644 --- a/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py +++ b/demisto_sdk/commands/content_graph/objects/content_item_xsiam.py @@ -4,9 +4,13 @@ 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.constants import ( + DEFAULT_CONTENT_ITEM_FROM_VERSION, + MINIMUM_XSOAR_SAAS_VERSION, + MarketplaceVersions, +) from demisto_sdk.commands.common.tools import ( write_dict, ) @@ -20,6 +24,12 @@ class ContentItemXSIAM(ContentItem, ABC): + @validator("fromversion", always=True) + def validate_from_version(cls, v: str) -> str: + if not v or DEFAULT_CONTENT_ITEM_FROM_VERSION == v: + return MINIMUM_XSOAR_SAAS_VERSION + return v + def dump( self, dir: DirectoryPath, 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 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", }, ),