import os import json import argparse from git import Repo from pyforgejo import AuthenticatedClient from dotenv import load_dotenv from pyforgejo.api.issue import issue_list_issues from pyforgejo.api.repository import repo_create_branch, repo_create_pull_request from pyforgejo.models import CreateBranchRepoOption, CreatePullRequestOption load_dotenv() parser = argparse.ArgumentParser(description="") parser.add_argument("-i", "--issue") args = parser.parse_args() FORJEGO_ACCESS_TOKEN = os.getenv("FORJEGO_ACCESS_TOKEN") OWNER = os.getenv("OWNER") USER = os.getenv("USER") REPO = os.getenv("REPO") client = AuthenticatedClient( base_url="https://git.n39.eu/api/v1/", token=FORJEGO_ACCESS_TOKEN ) issues = json.loads(issue_list_issues.sync_detailed(OWNER, REPO, client=client).content) def filterIssues(issue): return args.issue in issue["title"] issues = list(filter(filterIssues, issues)) branchName = issues[0]["title"].replace(" ", "-") if len(issues) > 1: raise ValueError("found more than one ticket") if len(issues) == 0: raise ValueError("found more than one ticket") else: repo_create_branch.sync_detailed( OWNER, REPO, body=CreateBranchRepoOption(branchName, "main"), client=client ) res = json.loads( repo_create_pull_request.sync_detailed( OWNER, REPO, body=CreatePullRequestOption( base="main", head=branchName, title="merge-" + branchName ), client=client, ).content ) print(res)