From d8595dae0561097700513767a60933f1221166ec Mon Sep 17 00:00:00 2001 From: "Jon Michael Aanes (aider)" Date: Sun, 13 Apr 2025 17:56:39 +0200 Subject: [PATCH] feat: add daemon mode with configurable interval for continuous issue processing --- aider_gitea/__main__.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/aider_gitea/__main__.py b/aider_gitea/__main__.py index 0f05aff..cc2eb15 100644 --- a/aider_gitea/__main__.py +++ b/aider_gitea/__main__.py @@ -13,6 +13,7 @@ import dataclasses import tempfile import subprocess import os +import time import re from . import secrets @@ -127,6 +128,8 @@ def parse_args(): parser.add_argument("--owner", required=True, help="Owner of the repository") 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("--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() 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) push_changes(tmpdirname, branch_name, issue_number, issue_title, issue_description, args.base_branch) -def main(): - logging.basicConfig(level='INFO') - args = parse_args() - - seen_issues_db = SeenIssuesDB() - client = GiteaClient(args.gitea_url, secrets.gitea_token()) - +def handle_issues(args, client, seen_issues_db): + """Process all open issues with the 'aider' label.""" try: issues = client.get_issues(args.owner, args.repo) except Exception: @@ -195,5 +193,26 @@ def main(): 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__": main()