mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
tools: add a linter for README lists
PR-URL: https://github.com/nodejs/node/pull/52476 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
This commit is contained in:
parent
8b4c4e825c
commit
7182503d90
7
.github/workflows/linters.yml
vendored
7
.github/workflows/linters.yml
vendored
@ -179,3 +179,10 @@ jobs:
|
||||
persist-credentials: false
|
||||
# GH Actions squashes all PR commits, HEAD^ refers to the base branch.
|
||||
- run: git diff HEAD^ HEAD -G"pr-url:" -- "*.md" | ./tools/lint-pr-url.mjs ${{ github.event.pull_request.html_url }}
|
||||
lint-readme:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- run: tools/lint-readme-lists.mjs
|
||||
|
20
README.md
20
README.md
@ -343,10 +343,10 @@ For information about the governance of the Node.js project, see
|
||||
**Erick Wendel** <<erick.workspace@gmail.com>> (he/him)
|
||||
* [Ethan-Arrowood](https://github.com/Ethan-Arrowood) -
|
||||
**Ethan Arrowood** <<ethan@arrowood.dev>> (he/him)
|
||||
* [fhinkel](https://github.com/fhinkel) -
|
||||
**Franziska Hinkelmann** <<franziska.hinkelmann@gmail.com>> (she/her)
|
||||
* [F3n67u](https://github.com/F3n67u) -
|
||||
**Feng Yu** <<F3n67u@outlook.com>> (he/him)
|
||||
* [fhinkel](https://github.com/fhinkel) -
|
||||
**Franziska Hinkelmann** <<franziska.hinkelmann@gmail.com>> (she/her)
|
||||
* [Flarna](https://github.com/Flarna) -
|
||||
**Gerhard Stöbich** <<deb2001-github@yahoo.de>> (he/they)
|
||||
* [gabrielschulhof](https://github.com/gabrielschulhof) -
|
||||
@ -429,12 +429,12 @@ For information about the governance of the Node.js project, see
|
||||
**Stephen Belanger** <<admin@stephenbelanger.com>> (he/him)
|
||||
* [RafaelGSS](https://github.com/RafaelGSS) -
|
||||
**Rafael Gonzaga** <<rafael.nunu@hotmail.com>> (he/him)
|
||||
* [rluvaton](https://github.com/rluvaton) -
|
||||
**Raz Luvaton** <<rluvaton@gmail.com>> (he/him)
|
||||
* [richardlau](https://github.com/richardlau) -
|
||||
**Richard Lau** <<rlau@redhat.com>>
|
||||
* [rickyes](https://github.com/rickyes) -
|
||||
**Ricky Zhou** <<0x19951125@gmail.com>> (he/him)
|
||||
* [rluvaton](https://github.com/rluvaton) -
|
||||
**Raz Luvaton** <<rluvaton@gmail.com>> (he/him)
|
||||
* [ronag](https://github.com/ronag) -
|
||||
**Robert Nagy** <<ronagy@icloud.com>>
|
||||
* [ruyadorno](https://github.com/ruyadorno) -
|
||||
@ -477,10 +477,10 @@ For information about the governance of the Node.js project, see
|
||||
**Khaidi Chu** <<i@2333.moe>> (he/him)
|
||||
* [yashLadha](https://github.com/yashLadha) -
|
||||
**Yash Ladha** <<yash@yashladha.in>> (he/him)
|
||||
* [ZYSzys](https://github.com/ZYSzys) -
|
||||
**Yongsheng Zhang** <<zyszys98@gmail.com>> (he/him)
|
||||
* [zcbenz](https://github.com/zcbenz) -
|
||||
**Cheng Zhao** <<zcbenz@gmail.com>> (he/him)
|
||||
* [ZYSzys](https://github.com/ZYSzys) -
|
||||
**Yongsheng Zhang** <<zyszys98@gmail.com>> (he/him)
|
||||
|
||||
<details>
|
||||
|
||||
@ -495,10 +495,10 @@ For information about the governance of the Node.js project, see
|
||||
**Aleksei Koziatinskii** <<ak239spb@gmail.com>>
|
||||
* [andrasq](https://github.com/andrasq) -
|
||||
**Andras** <<andras@kinvey.com>>
|
||||
* [AnnaMag](https://github.com/AnnaMag) -
|
||||
**Anna M. Kedzierska** <<anna.m.kedzierska@gmail.com>>
|
||||
* [AndreasMadsen](https://github.com/AndreasMadsen) -
|
||||
**Andreas Madsen** <<amwebdk@gmail.com>> (he/him)
|
||||
* [AnnaMag](https://github.com/AnnaMag) -
|
||||
**Anna M. Kedzierska** <<anna.m.kedzierska@gmail.com>>
|
||||
* [aqrln](https://github.com/aqrln) -
|
||||
**Alexey Orlenko** <<eaglexrlnk@gmail.com>> (he/him)
|
||||
* [bcoe](https://github.com/bcoe) -
|
||||
@ -741,10 +741,10 @@ maintaining the Node.js project.
|
||||
**Mert Can Altin** <<mertgold60@gmail.com>>
|
||||
* [Mesteery](https://github.com/Mesteery) -
|
||||
**Mestery** <<mestery@protonmail.com>> (he/him)
|
||||
* [preveen-stack](https://github.com/preveen-stack) -
|
||||
**Preveen Padmanabhan** <<wide4head@gmail.com>> (he/him)
|
||||
* [PoojaDurgad](https://github.com/PoojaDurgad) -
|
||||
**Pooja Durgad** <<Pooja.D.P@ibm.com>>
|
||||
* [preveen-stack](https://github.com/preveen-stack) -
|
||||
**Preveen Padmanabhan** <<wide4head@gmail.com>> (he/him)
|
||||
* [VoltrexKeyva](https://github.com/VoltrexKeyva) -
|
||||
**Mohammed Keyvanzadeh** <<mohammadkeyvanzade94@gmail.com>> (he/him)
|
||||
|
||||
|
48
tools/lint-readme-lists.mjs
Executable file
48
tools/lint-readme-lists.mjs
Executable file
@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// Validates the list in the README are in the correct order.
|
||||
|
||||
import { open } from 'node:fs/promises';
|
||||
|
||||
const lists = [
|
||||
'TSC voting members',
|
||||
'TSC regular members',
|
||||
'TSC emeriti members',
|
||||
'Collaborators',
|
||||
'Collaborator emeriti',
|
||||
'Triagers',
|
||||
];
|
||||
const tscMembers = new Set();
|
||||
|
||||
const readme = await open(new URL('../README.md', import.meta.url), 'r');
|
||||
|
||||
let currentList = null;
|
||||
let previousGithubHandle;
|
||||
let lineNumber = 0;
|
||||
|
||||
for await (const line of readme.readLines()) {
|
||||
lineNumber++;
|
||||
if (line.startsWith('### ')) {
|
||||
currentList = lists[lists.indexOf(line.slice(4))];
|
||||
previousGithubHandle = null;
|
||||
} else if (line.startsWith('#### ')) {
|
||||
currentList = lists[lists.indexOf(line.slice(5))];
|
||||
previousGithubHandle = null;
|
||||
} else if (currentList && line.startsWith('* [')) {
|
||||
const currentGithubHandle = line.slice(3, line.indexOf(']')).toLowerCase();
|
||||
if (previousGithubHandle && previousGithubHandle >= currentGithubHandle) {
|
||||
throw new Error(`${currentGithubHandle} should be listed before ${previousGithubHandle} in the ${currentList} list (README.md:${lineNumber})`);
|
||||
}
|
||||
|
||||
if (currentList === 'TSC voting members' || currentList === 'TSC regular members') {
|
||||
tscMembers.add(currentGithubHandle);
|
||||
} else if (currentList === 'Collaborators') {
|
||||
tscMembers.delete(currentGithubHandle);
|
||||
}
|
||||
previousGithubHandle = currentGithubHandle;
|
||||
}
|
||||
}
|
||||
|
||||
if (tscMembers.size !== 0) {
|
||||
throw new Error(`Some TSC members are not listed as Collaborators: ${Array.from(tscMembers)}`);
|
||||
}
|
Loading…
Reference in New Issue
Block a user