import requests
import os
import re
import sys
import json
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
REPO = os.getenv('GITHUB_REPOSITORY')
PR_NUMBER = os.getenv('PR_NUMBER')
REPO_OWNER, REPO_NAME = REPO.split('/')
def create_markdown_table(results):
results = sorted(results, key=lambda x: x['name'])
header = "| Benchmark | Base | PR |\n|-----------|------|----|"
rows = []
for result in results:
name = result['name']
base = result['base'].replace('\n', '
')
pr = result['pr'].replace('\n', '
')
row = f"| `{name}` |
{base}|
{pr}|" rows.append(row) return f"{header}\n" + "\n".join(rows) def get_pr_details(repo_owner, repo_name, pr_number): url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/pulls/{pr_number}" headers = {'Authorization': f'token {GITHUB_TOKEN}'} response = requests.get(url, headers=headers) response.raise_for_status() return response.json() def update_pr_description(repo_owner, repo_name, pr_number, body): url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/pulls/{pr_number}" headers = {'Authorization': f'token {GITHUB_TOKEN}'} data = {'body': body} response = requests.patch(url, headers=headers, json=data) response.raise_for_status() return response.json() def collect_benchmark_results(base_folder, pr_folder): results = [] results_index = {} for file in os.listdir(base_folder): print('base file:', file) if not file.endswith('.bench'): continue with open(f"{base_folder}/{file}") as f: result = f.read().strip() results.append({'base': result, 'pr': None, 'name': os.path.splitext(file)[0]}) results_index[file] = len(results) - 1 for file in os.listdir(pr_folder): print('pr file:', file) if not file.endswith('.bench'): continue with open(f"{pr_folder}/{file}") as f: result = f.read().strip() if file in results_index: results[results_index[file]]['pr'] = result else: results.append({'base': None, 'pr': result, 'name': os.path.splitext(file)[0]}) return results def main(): if len(sys.argv) != 3: print("Usage: python post_benchmark_results.py