diff --git a/config.py b/config.py index 6e9c57e..7463dda 100644 --- a/config.py +++ b/config.py @@ -14,6 +14,26 @@ from issue_generator import FeedReader, GithubReader, GithubTagReader, PIPYReade TIMEOUT import _secrets +class AlpinePackageReader(FeedReader): + '''Custom feed reader for Alpine packages''' + def __init__(self, package: str, targets: IssuePoster): + super().__init__(package, "https://gitlab.alpinelinux.org/alpine/aports/-/commits/master.atom", targets) + self.regex = r'community/([^:]+): upgrade to (.+)' + self.package = package + + def is_valid_item(self, entry) -> bool: + match = re.search(self.regex, entry.title) + return match and match.groups(1) == self.package + + def entry_get_version(self, entry: dict[str, Any]) -> tuple[str, str]: + match = re.search(self.regex, entry.title) + if match and match.groups(1) == self.package: + return (match.groups(2),) * 2 + raise RuntimeError(f"Checking version for package {self.package} in invalid entry titled: {entry.title}") + + def entry_get_link(self, entry: dict[str, Any]) -> str: + return entry.id + class UDSClientReader(FeedReader): '''Custom feed reader for UDSClient, whose version number appears in a .js file.''' @@ -111,6 +131,17 @@ FEED_READERS = [ NCAppReader(app = "vigil-local", project = "valeriansaliou/vigil-local"), # yourls GHReleases YOURLS/YOURLS archpkgs/yourls NCAppReader(app = "yourls", project = "YOURLS/YOURLS"), + +################################ Critical software in servers ################################ +# zfs + GithubReader(name = "zfs-dkms", project = "openzfs/zfs", + targets = CGJForgejoPoster("kauron/solaris-packages")), +# yay GHReleases Jguer/yay aur? + GithubReader(name = "yay", project = "Jguer/yay", + targets = CGJForgejoPoster("kauron/solaris-packages")), +# qbittorrent-alpine + AlpinePackageReader(package = "qbittorrent", + targets = CGJForgejoPoster("kauron/solaris-packages")), ] ## PENDING: diff --git a/issue_generator.py b/issue_generator.py index e44e272..f70e73d 100644 --- a/issue_generator.py +++ b/issue_generator.py @@ -166,6 +166,10 @@ class FeedReader: self.etag_file = CONFIG_DIR + self.name + ".etag" self.beta_strings = [ "nightly", "beta", "alpha", "rc", "pr" ] + def is_valid_item(self, entry) -> bool: + version = self.entry_get_version(entry)[0] + return all([beta not in version for beta in self.beta_strings]) + def first_item(self) -> dict[str, Any] | None | int: '''Get the first item of the feed (newest)''' if os.path.isfile(self.etag_file): @@ -183,12 +187,7 @@ class FeedReader: if len(feed.entries) == 0: return None for entry in feed.entries: - skip = False - for beta in self.beta_strings: - if beta in self.entry_get_version(entry)[0]: - skip = True - break - if not skip: + if self.is_valid_item(entry): return entry return None