jevstrudel.git / warm.js
warm.jsannotatedwarm.jssource30 lines · 1.2 KB · raw
1// this script loads all merged PRs within the given page range
2// it can be used to update the CHANGELOG.md file in a semi-automated way
3// the problem: codeberg doesn't support loading merged PRs, so we have to filter them in memory
4// luckily, we can sort after "recentupdate", which means we can do incremental changelog generation
5// todo: support setting a "last_updated" date, so the script would automatically check how far it has to go
6
7async function main() {
8  let pageStart = 1;
9  let pageEnd = 1;
10  let prs = [];
11  for (let p = pageStart; p <= pageEnd; p++) {
12    console.log(`load page ${p}/${pageEnd}`);
13    const res = await fetch(
14      `https://codeberg.org/api/v1/repos/uzu/strudel/pulls?state=closed&sort=recentupdate&page=${p}`,
15    );
16    const pulls = await res.json();
17    const merged = pulls.filter((pull) => pull.merged);
18    prs = prs.concat(merged);
19  }
20  const output = prs
21    .sort((a, b) => new Date(b.closed_at) - new Date(a.closed_at))
22    .map(
23      (pull) => `- ${pull.closed_at} ${pull.title} by @${pull.user.login || '?'} in: [#${pull.number}](${pull.url}) `,
24    )
25    .join('\n');
26  console.log('-------------');
27  console.log(output);
28}
29
30main();