123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // @ts-check
- import { Octokit } from '@octokit/action';
- import { readFileSync, writeFileSync } from 'node:fs';
- const octokit = new Octokit();
- const owner = 'snowpackjs';
- const repo = 'astro';
- // Relevant IDs captured via: https://docs.github.com/en/graphql/overview/explorer
- // query {
- // repository(name:"astro", owner:"snowpackjs") {
- // project(number: 3) {
- // columns(first: 100) {
- // nodes {
- // id
- // databaseId
- // name
- // }
- // }
- // }
- // }
- // }
- const COLUMN_ID_BUGS_NEEDS_TRIAGE = 14724521;
- const COLUMN_ID_BUGS_ACCEPTED = 14724515;
- const COLUMN_ID_BUGS_PRIORITIZED = 14946516;
- // const COLUMN_ID_RFCS_IN_PROGRESS = 14946333;
- // const COLUMN_ID_RFCS_ACCEPTED = 14946335;
- // const COLUMN_ID_RFCS_PRIORITIZED = 14946454;
- // CREATE LOCAL COPIES OF DATA (Useful for debugging locally)
- // Command:
- // GITHUB_ACTION=test GITHUB_TOKEN=XXXXXXXXX node scripts/stats/index.js
- // Code:
- // writeFileSync('pulls.json', JSON.stringify(await octokit.paginate("GET /repos/{owner}/{repo}/pulls", {
- // owner,
- // repo,
- // })));
- // writeFileSync('issues.json', JSON.stringify(await octokit.paginate("GET /repos/{owner}/{repo}/issues", {
- // owner,
- // repo,
- // })));
- // const issues = JSON.parse(readFileSync('issues.json').toString());
- // const pulls = JSON.parse(readFileSync('pulls.json').toString());
- async function countCards(column_id) {
- return octokit.paginate('GET /projects/columns/{column_id}/cards', {
- column_id,
- mediaType: {
- previews: ['inertia'],
- },
- });
- }
- async function countCommits(since) {
- return octokit.paginate('GET /repos/{owner}/{repo}/commits', {
- owner,
- repo,
- since: since.toISOString(),
- });
- }
- export async function run() {
- const twentyFourHoursAgo = new Date();
- twentyFourHoursAgo.setDate(twentyFourHoursAgo.getDate() - 1);
- const allOpenIssues = await octokit.paginate('GET /repos/{owner}/{repo}/issues', {
- owner,
- repo,
- });
- const openIssues = allOpenIssues.filter((iss) => !iss.pull_request);
- const openPulls = allOpenIssues.filter((iss) => iss.pull_request);
- const allIssuesLastTwentyFourHours = await octokit.paginate('GET /repos/{owner}/{repo}/issues', {
- owner,
- repo,
- state: 'all',
- per_page: 100,
- since: twentyFourHoursAgo.toISOString(),
- });
- const issuesLastTwentyFourHours = allIssuesLastTwentyFourHours.filter(
- (iss) => new Date(iss.created_at) > twentyFourHoursAgo && !iss.pull_request
- );
- const pullsLastTwentyFourHours = allIssuesLastTwentyFourHours.filter(
- (iss) => new Date(iss.created_at) > twentyFourHoursAgo && iss.pull_request
- );
- const entry = [
- // Date (Human Readable)
- `"${new Date().toLocaleDateString('en-US', {
- weekday: 'long',
- year: 'numeric',
- month: 'long',
- day: 'numeric',
- })}"`,
- // Commits in last 24 hours
- (await countCommits(twentyFourHoursAgo)).length,
- // New Issues(All) in last 24 hours
- issuesLastTwentyFourHours.length,
- // New Issues(Bugs) in last 24 hours
- issuesLastTwentyFourHours.filter((iss) => iss.title.startsWith('🐛 BUG:')).length,
- // New Issues(RFC) in last 24 hours
- issuesLastTwentyFourHours.filter((iss) => iss.title.startsWith('💡 RFC:')).length,
- // New Issues(Docs) in last 24 hours
- issuesLastTwentyFourHours.filter((iss) => iss.title.startsWith('📘 DOC:')).length,
- // New Pull Requests in last 24 hours
- pullsLastTwentyFourHours.length,
- // Pull requests
- openPulls.length,
- // Open Issues
- openIssues.length,
- // Bugs: Needs Triage
- (await countCards(COLUMN_ID_BUGS_NEEDS_TRIAGE)).length,
- // Bugs: Accepted
- (await countCards(COLUMN_ID_BUGS_ACCEPTED)).length +
- (await countCards(COLUMN_ID_BUGS_PRIORITIZED)).length,
- // RFC: In Progress
- 0, // (await countCards(COLUMN_ID_RFCS_IN_PROGRESS)).length,
- // RFC: Accepted
- 0, // (await countCards(COLUMN_ID_RFCS_ACCEPTED)).length + (await countCards(COLUMN_ID_RFCS_PRIORITIZED)).length,
- // Date (ISO)
- `"${new Date().toISOString()}"`,
- ].join(',');
- const statCsv = readFileSync('scripts/stats/stats.csv', { encoding: 'utf-8' });
- const [statHeader, ...statItems] = statCsv.split('\n');
- const updatedStatCsv = [statHeader, entry, ...statItems].join('\n');
- writeFileSync('scripts/stats/stats.csv', updatedStatCsv);
- }
- run();
|