Skip to content

Commit

Permalink
✨ Paginate issues (fixed #118)
Browse files Browse the repository at this point in the history
  • Loading branch information
AnandChowdhary committed Sep 12, 2023
1 parent 1057bcc commit 1038a38
Showing 1 changed file with 62 additions and 58 deletions.
120 changes: 62 additions & 58 deletions src/features/update-summary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,7 @@ export const updateSummary = async (
await cosmic("bookshelf");
debug("Got config object");
} catch (error) {}
const issues = await octokit.rest.issues.listForRepo({
owner: context.issue.owner,
repo: context.issue.repo,
labels: "kind: book",
state: "all",
});
debug(`Got ${issues.data.length} issues`);

let api: (BookResult & {
state: "reading" | "completed" | "want-to-read";
issueNumber: number;
Expand All @@ -37,59 +31,69 @@ export const updateSummary = async (
timeToComplete?: number;
timeToCompleteFormatted?: string;
})[] = [];
for await (const issue of issues.data) {
const comments = await octokit.rest.issues.listComments({
owner: context.issue.owner,
repo: context.issue.repo,
issue_number: issue.number,
});
debug(`Got ${comments.data.length} comments in issue ${issue.number}`);
let json: BookResult | undefined = undefined;
try {
comments.data.forEach((comment) => {
if ((comment.body || "").includes("Book details (JSON)"))
json = JSON.parse((comment.body || "").split("```json")[1].split("```")[0]) as BookResult;
for await (const response of octokit.paginate.iterator(octokit.rest.issues.listForRepo, {
owner: context.issue.owner,
repo: context.issue.repo,
labels: "kind: book",
state: "all",
})) {
debug(`Got ${response.data.length} issues during pagination`);
for (const issue of response.data) {
const comments = await octokit.rest.issues.listComments({
owner: context.issue.owner,
repo: context.issue.repo,
issue_number: issue.number,
});
} catch (error) {
console.log("JSON parsing error", error);
debug(`Got ${comments.data.length} comments in issue ${issue.number}`);
let json: BookResult | undefined = undefined;
try {
comments.data.forEach((comment) => {
if ((comment.body || "").includes("Book details (JSON)"))
json = JSON.parse(
(comment.body || "").split("```json")[1].split("```")[0]
) as BookResult;
});
} catch (error) {
console.log("JSON parsing error", error);
}
const isWantToRead = issue.labels.find((label) =>
typeof label === "string" ? label === "want to read" : label.name === "want to read"
);
if (isWantToRead) debug(`Book is in category "want to read"`);
if (json) {
debug(`Found JSON data for ${(json as BookResult).title}`);
const currentPercentage = issue.title.match(/\(\d+\%\)/g);
const overwrites =
config("overwrites") || ({} as Record<number, { started: string; completed: string }>);
const openedAt = (overwrites[issue.number] || {}).started
? overwrites[issue.number].started
: issue.created_at;
const closedAt = (overwrites[issue.number] || {}).completed
? overwrites[issue.number].completed
: issue.closed_at;
api.push({
...(json as BookResult),
issueNumber: issue.number,
progressPercent:
currentPercentage && currentPercentage.length && !isNaN(parseInt(currentPercentage[0]))
? parseInt(currentPercentage[0])
: 0,
state: issue.state === "open" ? (isWantToRead ? "want-to-read" : "reading") : "completed",
startedAt: new Date(openedAt).toISOString(),
completedAt: issue.state === "closed" ? new Date(closedAt).toISOString() : undefined,
timeToComplete:
issue.state === "closed"
? new Date(closedAt).getTime() - new Date(openedAt).getTime()
: undefined,
timeToCompleteFormatted:
issue.state === "closed"
? humanizeDuration(new Date(closedAt).getTime() - new Date(openedAt).getTime()).split(
","
)[0]
: undefined,
});
} else debug(`Unable to find JSON data for #${issue.id}`);
}
const isWantToRead = issue.labels.find((label) =>
typeof label === "string" ? label === "want to read" : label.name === "want to read"
);
if (isWantToRead) debug(`Book is in category "want to read"`);
if (json) {
debug(`Found JSON data for ${(json as BookResult).title}`);
const currentPercentage = issue.title.match(/\(\d+\%\)/g);
const overwrites =
config("overwrites") || ({} as Record<number, { started: string; completed: string }>);
const openedAt = (overwrites[issue.number] || {}).started
? overwrites[issue.number].started
: issue.created_at;
const closedAt = (overwrites[issue.number] || {}).completed
? overwrites[issue.number].completed
: issue.closed_at;
api.push({
...(json as BookResult),
issueNumber: issue.number,
progressPercent:
currentPercentage && currentPercentage.length && !isNaN(parseInt(currentPercentage[0]))
? parseInt(currentPercentage[0])
: 0,
state: issue.state === "open" ? (isWantToRead ? "want-to-read" : "reading") : "completed",
startedAt: new Date(openedAt).toISOString(),
completedAt: issue.state === "closed" ? new Date(closedAt).toISOString() : undefined,
timeToComplete:
issue.state === "closed"
? new Date(closedAt).getTime() - new Date(openedAt).getTime()
: undefined,
timeToCompleteFormatted:
issue.state === "closed"
? humanizeDuration(new Date(closedAt).getTime() - new Date(openedAt).getTime()).split(
","
)[0]
: undefined,
});
} else debug(`Unable to find JSON data for #${issue.id}`);
}
api = api.sort((a, b) => new Date(b.startedAt).getTime() - new Date(a.startedAt).getTime());
await promises.writeFile(join(".", "api.json"), JSON.stringify(api, null, 2) + "\n");
Expand Down

0 comments on commit 1038a38

Please sign in to comment.