Deamon mode to continuously monitor a specific repository for new issues. #25
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user