feat(membership): add inactive member detection#1061
feat(membership): add inactive member detection#1061avivkeller wants to merge 2 commits intonodejs:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Adds an automated “inactive member” monitor for the org by running a scheduled GitHub Actions workflow that scans org membership/team data and posts (or updates) a report issue in this repository.
Changes:
- Added a new Node.js script to fetch org members/teams, check recent activity, and render a Markdown report.
- Added a daily scheduled GitHub Actions workflow to run the script using a user token.
- Updated the access-token registry documentation to include the new secret entry.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 10 comments.
| File | Description |
|---|---|
tools/get-inactive-members.mjs |
Implements org member/team fetch, activity classification, report rendering, and issue upsert logic. |
.github/workflows/get-inactive-members.yml |
Schedules and runs the new script via actions/github-script using GH_USER_TOKEN. |
request-an-access-token.md |
Documents the new GH_USER_TOKEN usage/registry entry for nodejs/admin. |
Comments suppressed due to low confidence (1)
tools/get-inactive-members.mjs:513
- The report issue is only created/updated when
inactive.length > 0. This means (1) the rendered “No inactive members found” state is never posted, and (2) an existing report issue won’t be updated if the org becomes fully active—leaving stale results in the issue body. Upsert the issue unconditionally so the report always reflects the latest scan.
core.info(`Report available at: ${html_url}`);
}
}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Thanks Aviv! I was gonna write out the details tomorrow with a couple options. Are you familiar with the consensus reached? |
I am not, I've been away, can you summarize? |
|
Yeah, I shall do tomorrow 🙂 |
|
I think the "no activity" criteria should be adjusted:
The rest is a wishlist. What is here now is a good With the new team-based setup for Core, that will need some special handling because there are 1–2 repos that need to be checked ( It would ideally also check meeting minutes for attendees; facilitating that check may require meeting minutes to adhere to a partially prescribed/standard format, and them to be stored in a standard place (eg For the report, it would ideally break down to which team(s) the member is inactive, as well as call out when the member is completely inactive across the whole org. The reports would ideally also specify how long each member has been inactive (in a human-friendly way, like I think it would be good to open:
|
2a2fbfc to
43bc15c
Compare
|
@JakobJingleheimer Right now, I have it stored at https://github.com/avivkeller/organization-auditor/ due to the complexity, but it: Considers a user as organization-inactive if they haven't committed to a single repository in 3 months |
|
We'll need to add a "team map" to this repository first, so it knows where to open the issue for individual team inactivity, i.e. |
|
Sweet, thanks! Looks pretty good :) A couple questions:
I wonder if there's a more dynamic way to handle this 🤔 What if team repos and team names always matched? Would the web team (and others) mind if their name was changed from Multiple sources of truth is perhaps also a small concern: |
@JakobJingleheimer mentioned that during the collaborator's summit, it was discussed that we should be more wary of the size of the organization. This adds a daily workflow to keep a constant "activity monitor" issue open.
It requires that a
public_repo,read:orgtoken be made for this repository.An example issue that this workflow generates is below (Note: In a real issue, these users would be pinged):
Workflow Output