You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							59 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							59 lines
						
					
					
						
							1.6 KiB
						
					
					
				| import os
 | |
| import subprocess
 | |
| import json
 | |
| import re
 | |
| 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()
 |