Skip to content

Commit

Permalink
build,tools: automate enforcement of emeritus criteria
Browse files Browse the repository at this point in the history
PR-URL: #41155
Reviewed-By: Michaël Zasso <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Ruben Bridgewater <[email protected]>
Reviewed-By: Antoine du Hamel <[email protected]>
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Tobias Nießen <[email protected]>
Reviewed-By: Myles Borins <[email protected]>
Reviewed-By: Filip Skokan <[email protected]>
Reviewed-By: Stewart X Addison <[email protected]>
Reviewed-By: Luigi Pinca <[email protected]>
Reviewed-By: Danielle Adams <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Michael Dawson <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
Reviewed-By: Gus Caplan <[email protected]>
  • Loading branch information
Trott authored and danielleadams committed Feb 1, 2022
1 parent f8c6055 commit bfbb7fc
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 15 deletions.
5 changes: 2 additions & 3 deletions .github/workflows/find-inactive-collaborators.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ on:

env:
NODE_VERSION: lts/*
NUM_COMMITS: 5000

jobs:
find:
Expand All @@ -19,7 +18,7 @@ jobs:
steps:
- uses: actions/checkout@v2
with:
fetch-depth: ${{ env.NUM_COMMITS }}
fetch-depth: 0
persist-credentials: false

- name: Use Node.js ${{ env.NODE_VERSION }}
Expand All @@ -28,7 +27,7 @@ jobs:
node-version: ${{ env.NODE_VERSION }}

- name: Find inactive collaborators
run: tools/find-inactive-collaborators.mjs ${{ env.NUM_COMMITS }}
run: tools/find-inactive-collaborators.mjs

- name: Open pull request
uses: gr2m/create-or-update-pull-request-action@v1
Expand Down
16 changes: 4 additions & 12 deletions tools/find-inactive-collaborators.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import cp from 'node:child_process';
import fs from 'node:fs';
import readline from 'node:readline';

const SINCE = +process.argv[2] || 5000;
const SINCE = process.argv[2] || '18 months ago';

async function runGitCommand(cmd, mapFn) {
const childProcess = cp.spawn('/bin/sh', ['-c', cmd], {
Expand Down Expand Up @@ -42,19 +42,13 @@ async function runGitCommand(cmd, mapFn) {

// Get all commit authors during the time period.
const authors = await runGitCommand(
`git shortlog -n -s --email --max-count="${SINCE}" HEAD`,
(line) => line.trim().split('\t', 2)[1]
);

// Get all commit landers during the time period.
const landers = await runGitCommand(
`git shortlog -n -s -c --email --max-count="${SINCE}" HEAD`,
`git shortlog -n -s --email --since="${SINCE}" HEAD`,
(line) => line.trim().split('\t', 2)[1]
);

// Get all approving reviewers of landed commits during the time period.
const approvingReviewers = await runGitCommand(
`git log --max-count="${SINCE}" | egrep "^ Reviewed-By: "`,
`git log --since="${SINCE}" | egrep "^ Reviewed-By: "`,
(line) => /^ Reviewed-By: ([^<]+)/.exec(line)[1].trim()
);

Expand Down Expand Up @@ -182,15 +176,13 @@ async function moveCollaboratorToEmeritus(peopleToMove) {
// Get list of current collaborators from README.md.
const collaborators = await getCollaboratorsFromReadme();

console.log(`In the last ${SINCE} commits:\n`);
console.log(`Since ${SINCE}:\n`);
console.log(`* ${authors.size.toLocaleString()} authors have made commits.`);
console.log(`* ${landers.size.toLocaleString()} landers have landed commits.`);
console.log(`* ${approvingReviewers.size.toLocaleString()} reviewers have approved landed commits.`);
console.log(`* ${collaborators.length.toLocaleString()} collaborators currently in the project.`);

const inactive = collaborators.filter((collaborator) =>
!authors.has(collaborator.mailmap) &&
!landers.has(collaborator.mailmap) &&
!approvingReviewers.has(collaborator.name)
);

Expand Down

0 comments on commit bfbb7fc

Please sign in to comment.