Skip to content

Commit

Permalink
generate report
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinslin committed Sep 12, 2023
1 parent b45a980 commit b39c660
Showing 1 changed file with 113 additions and 73 deletions.
186 changes: 113 additions & 73 deletions .github/workflows/generate-weekly-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ jobs:
get_issues:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/github-script@v6
id: get-issues
with:
Expand Down Expand Up @@ -54,7 +55,7 @@ jobs:
}
async function getNewIssues(github) {
const { sevenDaysAgo, midnightYesterday} = genLookbackDates();
const { sevenDaysAgo, midnightYesterday } = genLookbackDates();
const queryParams = {
owner: 'open-telemetry',
repo: 'opentelemetry-collector-contrib',
Expand Down Expand Up @@ -92,78 +93,117 @@ jobs:
}
}
const targetLabels = {
"needs triage": {
filterPrs: true,
alias: "issuesTriage",
},
"ready to merge": {
filterPrs: false,
alias: "issuesReadyToMerge",
},
"Sponsor Needed": {
filterPrs: true,
alias: "issuesSponsorNeeded",
},
};
const issuesNew = await getNewIssues(github.rest);
const issuesWithLabels = {};
for (const lbl of Object.keys(targetLabels)) {
const filterPrs = targetLabels[lbl].filterPrs;
const resp = await getTargetLabelIssues(github.rest, lbl, filterPrs);
issuesWithLabels[lbl] = resp;
async function getIssuesData(github) {
const targetLabels = {
"needs triage": {
filterPrs: true,
alias: "issuesTriage",
},
"ready to merge": {
filterPrs: false,
alias: "issuesReadyToMerge",
},
"Sponsor Needed": {
filterPrs: true,
alias: "issuesSponsorNeeded",
},
};
const issuesNew = await getNewIssues(github.rest);
const issuesWithLabels = {};
for (const lbl of Object.keys(targetLabels)) {
const filterPrs = targetLabels[lbl].filterPrs;
const resp = await getTargetLabelIssues(github.rest, lbl, filterPrs);
issuesWithLabels[lbl] = resp;
}
// tally results
const stats = {
issuesNew: {
title: "New issues",
count: 0,
data: []
},
issuesTriage: {
title: "Issues needing triage",
count: 0,
data: []
},
issuesReadyToMerge: {
title: "Issues ready to merge",
count: 0,
data: []
},
issuesSponsorNeeded: {
title: "Issues needing sponsorship",
count: 0,
data: []
},
issuesNewSponsorNeeded: {
title: "New issues needing sponsorship",
count: 0,
data: []
},
}
// add new issues
issuesNew.forEach(issue => {
stats.issuesNew.count++;
const { url, title, number } = issue;
stats.issuesNew.data.push({ url, title, number });
});
// add issues with labels
for (const lbl of Object.keys(targetLabels)) {
const alias = targetLabels[lbl].alias;
stats[alias].count = issuesWithLabels[lbl].length;
stats[alias].data = issuesWithLabels[lbl].map(issue => {
const { url, title, number } = issue;
return { url, title, number };
})
}
// add new issues with sponsor needed label
const { sevenDaysAgo, midnightYesterday } = genLookbackDates();
const sponsorNeededIssues = issuesWithLabels["Sponsor Needed"].filter(issue => filterOnDateRange({ issue, sevenDaysAgo, midnightYesterday }));
sponsorNeededIssues.forEach(issue => {
stats.issuesNewSponsorNeeded.count++;
const { url, title, number } = issue;
stats.issuesNewSponsorNeeded.data.push({ url, title, number });
});
return stats
}
// tally results
const stats = {
issuesNew: {
count: 0,
data: []
},
issuesTriage: {
count: 0,
data: []
},
issuesReadyToMerge: {
count: 0,
data: []
},
issuesSponsorNeeded: {
count: 0,
data: []
},
issuesNewSponsorNeeded: {
count: 0,
data: []
},
function generateReport({issuesData}) {
const out = ['<ul>'];
for (const lbl of Object.keys(issuesData)) {
const section = [];
const title = lbl;
const {count, data} = issuesData[lbl];
section.push(`<li> ${title}: ${count}`);
section.push(`<details>
<summary> Issues </summary>
<ul>
${data.map((issue) => {
const {url, title, number} = issue;
return `<li><a href="${url}">#${number}</a> ${title}</li>`;
}).join('\n')}
</ul>
</details>`);
section.push('</li>');
out.push(section.join('\n'));
}
out.push('</ul>');
const report = out.join('\n');
return report;
}
// add new issues
issuesNew.forEach(issue => {
stats.issuesNew.count++;
const { url, title, number } = issue;
stats.issuesNew.data.push({ url, title, number });
});
// add issues with labels
for (const lbl of Object.keys(targetLabels)) {
const alias = targetLabels[lbl].alias;
stats[alias].count = issuesWithLabels[lbl].length;
stats[alias].data = issuesWithLabels[lbl].map(issue => {
const { url, title, number } = issue;
return { url, title, number };
})
async function main({ github, context }) {
const issuesData = await getIssuesData(github)
const report = generateReport({issuesData})
console.log(report)
}
// add new issues with sponsor needed label
const {sevenDaysAgo, midnightYesterday} = genLookbackDates();
const sponsorNeededIssues = issuesWithLabels["Sponsor Needed"].filter(issue => filterOnDateRange({ issue, sevenDaysAgo, midnightYesterday }));
sponsorNeededIssues.forEach(issue => {
stats.issuesNewSponsorNeeded.count++;
const { url, title, number } = issue;
stats.issuesNewSponsorNeeded.data.push({ url, title, number });
});
return stats;
- name: Get result
run: echo "${{steps.get-issues.outputs.result}}"
await main({github, context})

0 comments on commit b39c660

Please sign in to comment.