#!/usr/bin/env python3 """ This script downloads issues from a given Gitea repository and produces a pull request for each issue. It assumes that the default branch (default "main") exists and that you have a valid API token if authentication is required. """ import argparse import logging import re import subprocess import sys import tempfile import time from pathlib import Path import requests from . import secrets, handle_issues from .gitea_client import GiteaClient from .seen_issues_db import SeenIssuesDB logger = logging.getLogger(__name__) def parse_args(): parser = argparse.ArgumentParser( description='Download issues and create pull requests for a Gitea repository.', ) parser.add_argument( '--gitea-url', required=True, help='Base URL for the Gitea instance, e.g., https://gitfub.space/api/v1', ) 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 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.exception('Daemon stopped by user') else: # One-off run handle_issues(args, client, seen_issues_db) if __name__ == '__main__': main()