Spaces:
Running
Running
import os | |
import subprocess | |
import requests | |
from dotenv import load_dotenv | |
load_dotenv | |
# Constants | |
GITHUB_USERNAME = os.getenv("GITHUB_USERNAME") | |
REPO_NAME = os.getenv("GITHUB_REPO_NAME") | |
GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") | |
ISSUES_URL = f"https://api.github.com/repos/{GITHUB_USERNAME}/{REPO_NAME}/issues" | |
# Headers for authentication | |
headers = { | |
"Authorization": f"token {GITHUB_TOKEN}", | |
"Accept": "application/vnd.github.v3+json", | |
} | |
def run_pytest(): | |
result = subprocess.run( | |
["pytest"], capture_output=True, text=True | |
) | |
return result.stdout + result.stderr | |
def parse_pytest_output(output): | |
errors = [] | |
current_error = None | |
for line in output.split("\n"): | |
if line.startswith("_________________________"): | |
if current_error: | |
errors.append(current_error) | |
current_error = {"title": "", "body": ""} | |
elif current_error is not None: | |
if not current_error["title"]: | |
current_error["title"] = line.strip() | |
current_error["body"] += line + "\n" | |
if current_error: | |
errors.append(current_error) | |
return errors | |
def create_github_issue(title, body): | |
issue = {"title": title, "body": body} | |
response = requests.post(ISSUES_URL, headers=headers, json=issue) | |
return response.json() | |
def main(): | |
pytest_output = run_pytest() | |
errors = parse_pytest_output(pytest_output) | |
for error in errors: | |
issue_response = create_github_issue( | |
error["title"], error["body"] | |
) | |
print(f"Issue created: {issue_response.get('html_url')}") | |
if __name__ == "__main__": | |
main() | |