()
| 51 | let maxBodyLength = 60_000; |
| 52 | |
| 53 | async function main() { |
| 54 | console.log(preview ? "🔍 PREVIEW MODE\n" : ""); |
| 55 | |
| 56 | // Parse and validate changes |
| 57 | console.log("Validating change files..."); |
| 58 | let result = parseAllChangeFiles(); |
| 59 | |
| 60 | if (!result.valid) { |
| 61 | console.error("Validation errors found:"); |
| 62 | for (let error of result.errors) { |
| 63 | console.error(` ${error.packageDirName}/${error.file}: ${error.error}`); |
| 64 | } |
| 65 | process.exit(1); |
| 66 | } |
| 67 | |
| 68 | let { releases } = result; |
| 69 | |
| 70 | let pkgJson = readJson(getPackageFile("react-router", "package.json")); |
| 71 | let majorVersion = semver.major(releases[0]?.nextVersion ?? pkgJson.version); |
| 72 | let prBranchPrefix = baseBranch === "hotfix" ? "hotfix" : "release"; |
| 73 | let prBranch = `${prBranchPrefix}-v${majorVersion}-pr`; |
| 74 | |
| 75 | if (releases.length === 0) { |
| 76 | console.log("No pending changes to release."); |
| 77 | |
| 78 | // Check if there's a stale PR that should be closed |
| 79 | if (!preview && process.env.GITHUB_TOKEN) { |
| 80 | let existingPr = await findOpenPr(prBranch, baseBranch); |
| 81 | if (existingPr) { |
| 82 | console.log(`\nClosing stale PR #${existingPr.number}...`); |
| 83 | await closePr( |
| 84 | existingPr.number, |
| 85 | "Closing automatically — all change files have been removed or released.", |
| 86 | ); |
| 87 | console.log(`✅ Closed PR: ${existingPr.html_url}`); |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | process.exit(0); |
| 92 | } |
| 93 | |
| 94 | console.log( |
| 95 | `\nFound ${releases.length} package${releases.length === 1 ? "" : "s"} with changes:`, |
| 96 | ); |
| 97 | for (let release of releases) { |
| 98 | console.log( |
| 99 | ` • ${release.packageName}: ${release.currentVersion} → ${release.nextVersion}`, |
| 100 | ); |
| 101 | } |
| 102 | console.log(); |
| 103 | |
| 104 | // Generate content |
| 105 | let commitMessage = generateCommitMessage(releases); |
| 106 | let prTitle = `${baseBranch === "hotfix" ? "Hotfix Release" : "Release"} v${releases[0].nextVersion}`; |
| 107 | let prBody = generatePrBody(releases); |
| 108 | |
| 109 | if (preview) { |
| 110 | console.log("Would create/update PR with:"); |
no test coverage detected