| import { execSync } from "child_process";
|
| import fs from "fs";
|
| import path from "path";
|
|
|
| const REPO = "diegosouzapw/OmniRoute";
|
| const artifactsDir =
|
| process.env.ARTIFACTS_DIR ||
|
| path.join(process.cwd(), "artifacts");
|
|
|
| async function main() {
|
| try {
|
|
|
| console.log("Fetching open PR numbers...");
|
| const prNumbersOutput = execSync(
|
| `gh pr list --repo ${REPO} --state open --limit 500 --json number --jq '.[].number'`,
|
| { encoding: "utf-8" }
|
| );
|
| const prNumbers = prNumbersOutput.trim().split("\n").map(Number).filter(Boolean);
|
| console.log(`Found ${prNumbers.length} open PRs:`, prNumbers);
|
|
|
| if (!fs.existsSync(artifactsDir)) {
|
| fs.mkdirSync(artifactsDir, { recursive: true });
|
| }
|
|
|
|
|
| for (const prNum of prNumbers) {
|
| console.log(`\n--- Fetching PR #${prNum} ---`);
|
|
|
|
|
| try {
|
| const metadataCmd = `gh pr view ${prNum} --repo ${REPO} --json number,title,author,headRefName,baseRefName,body,createdAt,additions,deletions,files`;
|
| const metadataJson = execSync(metadataCmd, { encoding: "utf-8" });
|
| const metadataPath = path.join(artifactsDir, `pr_${prNum}_meta.json`);
|
| fs.writeFileSync(metadataPath, metadataJson);
|
| console.log(`Saved metadata to ${metadataPath}`);
|
| } catch (err) {
|
| console.error(`Failed to fetch metadata for PR #${prNum}:`, err.message);
|
| }
|
|
|
|
|
| try {
|
| const diffCmd = `gh pr diff ${prNum} --repo ${REPO}`;
|
| const diffText = execSync(diffCmd, { encoding: "utf-8", maxBuffer: 100 * 1024 * 1024 });
|
| const diffPath = path.join("/tmp", `pr${prNum}.diff`);
|
| fs.writeFileSync(diffPath, diffText);
|
| console.log(`Saved diff to ${diffPath} (Size: ${diffText.length} bytes)`);
|
| } catch (err) {
|
| console.error(`Failed to fetch diff for PR #${prNum}:`, err.message);
|
| }
|
| }
|
|
|
| console.log("\nAll PR data fetched successfully!");
|
| } catch (error) {
|
| console.error("Error during PR fetching:", error);
|
| }
|
| }
|
|
|
| main();
|
|
|