# Copyright OpenSearch Contributors # SPDX-License-Identifier: Apache-2.0 # # The OpenSearch Contributors require contributions made to # this file be licensed under the Apache-2.0 license or a # compatible open source license. import os from abc import abstractmethod from manifests.input_manifest import InputComponentFromSource class ReleaseNotesComponent: def __init__(self, component: InputComponentFromSource, build_version: str, root: str) -> None: self.component = component self.build_version = build_version self.root = root @property @abstractmethod def filename(self) -> str: pass @property def path(self) -> str: return os.path.join(self.root, "release-notes") def path_exists(self) -> bool: return os.path.exists(self.path) def exists(self) -> bool: return self.path_exists() and any(fname.endswith(self.filename) for fname in os.listdir(self.path)) class ReleaseNotesOpenSearch(ReleaseNotesComponent): @property def filename(self) -> str: return f'.release-notes-{self.build_version}.md' class ReleaseNotesOpenSearchPlugin(ReleaseNotesComponent): @property def filename(self) -> str: return f'.release-notes-{self.build_version}.0.md' class ReleaseNotesComponents: @classmethod def from_component(self, component: InputComponentFromSource, build_version: str, root: str) -> ReleaseNotesComponent: if component.name == 'OpenSearch' or component.name == 'OpenSearch-Dashboards': return ReleaseNotesOpenSearch(component, build_version, root) else: return ReleaseNotesOpenSearchPlugin(component, build_version, root)