| #!/usr/bin/env bun |
|
|
| |
| |
|
|
| import { lifecycle } from "./issue-lifecycle.ts"; |
|
|
| const DRY_RUN = process.argv.includes("--dry-run"); |
| const token = process.env.GITHUB_TOKEN; |
| const repo = process.env.GITHUB_REPOSITORY; |
| const label = process.env.LABEL; |
| const issueNumber = process.env.ISSUE_NUMBER; |
|
|
| if (!DRY_RUN && !token) throw new Error("GITHUB_TOKEN required"); |
| if (!repo) throw new Error("GITHUB_REPOSITORY required"); |
| if (!label) throw new Error("LABEL required"); |
| if (!issueNumber) throw new Error("ISSUE_NUMBER required"); |
|
|
| const entry = lifecycle.find((l) => l.label === label); |
| if (!entry) { |
| console.log(`No lifecycle entry for label "${label}", skipping`); |
| process.exit(0); |
| } |
|
|
| const body = `${entry.nudge} This issue will be closed automatically if there's no activity within ${entry.days} days.`; |
|
|
| |
|
|
| if (DRY_RUN) { |
| console.log(`Would comment on #${issueNumber} for label "${label}":\n\n${body}`); |
| process.exit(0); |
| } |
|
|
| const response = await fetch( |
| `https://api.github.com/repos/${repo}/issues/${issueNumber}/comments`, |
| { |
| method: "POST", |
| headers: { |
| Authorization: `Bearer ${token}`, |
| Accept: "application/vnd.github.v3+json", |
| "Content-Type": "application/json", |
| "User-Agent": "lifecycle-comment", |
| }, |
| body: JSON.stringify({ body }), |
| } |
| ); |
|
|
| if (!response.ok) { |
| const text = await response.text(); |
| throw new Error(`GitHub API ${response.status}: ${text}`); |
| } |
|
|
| console.log(`Commented on #${issueNumber} for label "${label}"`); |
|
|