Deamon mode to continuously monitor a specific repository for new issues. #25

Merged
Jmaa merged 1 commits from jmaa/issue-19-deamon-mode-to-continuously-monitor-a-specific-repository-for-new-issues into main 2025-04-13 16:00:29 +00:00

View File

@ -13,6 +13,7 @@ import dataclasses
import tempfile import tempfile
import subprocess import subprocess
import os import os
import time
import re import re
from . import secrets from . import secrets
@ -127,6 +128,8 @@ def parse_args():
parser.add_argument("--owner", required=True, help="Owner of the repository") parser.add_argument("--owner", required=True, help="Owner of the repository")
parser.add_argument("--repo", required=True, help="Repository name") parser.add_argument("--repo", required=True, help="Repository name")
parser.add_argument("--base-branch", default="main", help="Base branch to use for new branches (default: main)") parser.add_argument("--base-branch", default="main", help="Base branch to use for new branches (default: main)")
parser.add_argument("--daemon", action="store_true", help="Run in daemon mode to continuously monitor for new issues")
parser.add_argument("--interval", type=int, default=300, help="Interval in seconds between checks in daemon mode (default: 300)")
return parser.parse_args() return parser.parse_args()
def push_changes(cwd: Path, branch_name: str, issue_number: str, issue_title: str, issue_description: str, base_branch: str) -> None: def push_changes(cwd: Path, branch_name: str, issue_number: str, issue_title: str, issue_description: str, base_branch: str) -> None:
@ -159,13 +162,8 @@ def process_issue(args, tmpdirname: Path, branch_name: str, issue_title: str, is
run_cmd(["git", "add", "."], tmpdirname) run_cmd(["git", "add", "."], tmpdirname)
push_changes(tmpdirname, branch_name, issue_number, issue_title, issue_description, args.base_branch) push_changes(tmpdirname, branch_name, issue_number, issue_title, issue_description, args.base_branch)
def main(): def handle_issues(args, client, seen_issues_db):
logging.basicConfig(level='INFO') """Process all open issues with the 'aider' label."""
args = parse_args()
seen_issues_db = SeenIssuesDB()
client = GiteaClient(args.gitea_url, secrets.gitea_token())
try: try:
issues = client.get_issues(args.owner, args.repo) issues = client.get_issues(args.owner, args.repo)
except Exception: except Exception:
@ -195,5 +193,26 @@ def main():
seen_issues_db.mark_as_seen(issue_text) seen_issues_db.mark_as_seen(issue_text)
def main():
logging.basicConfig(level='INFO')
args = parse_args()
seen_issues_db = SeenIssuesDB()
client = GiteaClient(args.gitea_url, secrets.gitea_token())
if args.daemon:
logger.info(f"Starting daemon mode, checking for new issues every {args.interval} seconds")
try:
while True:
logger.info("Checking for new issues...")
handle_issues(args, client, seen_issues_db)
logger.info(f"Sleeping for {args.interval} seconds...")
time.sleep(args.interval)
except KeyboardInterrupt:
logger.info("Daemon stopped by user")
else:
# One-off run
handle_issues(args, client, seen_issues_db)
if __name__ == "__main__": if __name__ == "__main__":
main() main()