fix(workflow): eslint and NOROUTE [skip ci]

This commit is contained in:
NeverBehave
2022-05-15 02:58:44 -07:00
parent 49c0265e18
commit d080c6c59e
3 changed files with 88 additions and 92 deletions

View File

@@ -13,7 +13,7 @@ body:
id: routes id: routes
attributes: attributes:
label: Routes label: Routes
description: The involved route, without any parameters, copied directly from the docs "route" field, one link per line. description: The involved route, without any parameters, copied directly from the docs "route" field, one link per line. Use `NOROUTE` if it is not route related.
placeholder: /rsshub/someroute/:type? placeholder: /rsshub/someroute/:type?
render: routes render: routes
validations: validations:

View File

@@ -13,7 +13,7 @@ body:
id: routes id: routes
attributes: attributes:
label: 路由地址 label: 路由地址
description: 不包含参数,复制文档路由参数,一行一个,不要重复 description: 不包含参数,复制文档路由参数,一行一个,不要重复。如果和路由没有关系,请写`NOROUTE`
placeholder: /rsshub/someroute/:type? placeholder: /rsshub/someroute/:type?
render: routes render: routes
validations: validations:

View File

@@ -1,162 +1,158 @@
const unified = require('unified') const unified = require('unified');
const parse = require('remark-parse') const parse = require('remark-parse');
const got = require('got') const got = require('got');
// @TODO maybe we could use label or better way to separate bug/feature stuff // @TODO maybe we could use label or better way to separate bug/feature stuff
const matchTitle = ["路由地址", "Routes"] const matchTitle = ['路由地址', 'Routes'];
const maintainerURL = "https://raw.githubusercontent.com/DIYgod/RSSHub/gh-pages/build/maintainer.json"; const maintainerURL = 'https://raw.githubusercontent.com/DIYgod/RSSHub/gh-pages/build/maintainer.json';
const successTag = 'Bug Ping: Pinged'; const successTag = 'Bug Ping: Pinged';
const parseFailure = 'Bug Ping: Parse Failure' const parseFailure = 'Bug Ping: Parse Failure';
const failTag = 'Bug Ping: Not Found' const failTag = 'Bug Ping: Not Found';
const ignoreUsername = new Set([]); // Wrap user who don't want to be pinged. const ignoreUsername = new Set([]); // Wrap user who don't want to be pinged.
async function parseBodyRoutes(body, core) { async function parseBodyRoutes(body, core) {
const ast = await unified().use(parse).parse(body) const ast = await unified().use(parse).parse(body);
// Is this a bug report? // Is this a bug report?
const title = ast.children[0].children[0].value.trim() const title = ast.children[0].children[0].value.trim();
core.debug(`title: ${title}`); core.debug(`title: ${title}`);
if (!matchTitle.some((ele) => ele.localeCompare(title) === 0)) { if (!matchTitle.some((ele) => ele.localeCompare(title) === 0)) {
return null return null;
} }
const routes = ast.children[1].value const routes = ast.children[1].value.trim();
core.debug(`routes: ${JSON.stringify(routes)}`); core.debug(`routes: ${JSON.stringify(routes)}`);
if (routes.localeCompare('NOROUTE') === 0) {
return null;
}
if (routes) { if (routes) {
const dedup = [...new Set(routes.trim().split(/\r?\n/).filter(n => n))] const dedup = [...new Set(routes.split(/\r?\n/).filter((n) => n))];
if (dedup.length !== routes.length) { if (dedup.length !== routes.length) {
core.warning("Duplicate Detected.") core.warning('Duplicate Detected.');
} }
core.debug(dedup) core.debug(dedup);
return dedup return dedup;
} }
throw "unable to parse body: routes does not exist" throw 'unable to parse body: routes does not exist';
} }
async function getMaintainersByRoutes(routes, core) { async function getMaintainersByRoutes(routes, core) {
const maintainers = await got(maintainerURL).json() const maintainers = await got(maintainerURL).json();
return routes.map(e => { return routes.map((e) => {
const m = maintainers[e] const m = maintainers[e];
if (m !== undefined) { if (m === undefined) {
return m core.warning(`Route ${e} does not match any maintainer`);
} }
core.warning(`Route ${e} does not match any maintainer`)
}) return m;
});
} }
module.exports = async ({ github, context, core }) => { module.exports = async ({ github, context, core }) => {
const body = context.payload.issue.body const body = context.payload.issue.body;
const issue_facts = { const issue_facts = {
issue_number: context.issue.number, issue_number: context.issue.number,
owner: context.repo.owner, owner: context.repo.owner,
repo: context.repo.repo, repo: context.repo.repo,
}; };
const routes = await parseBodyRoutes(body, core).catch(e => { const routes = await parseBodyRoutes(body, core).catch((e) => {
core.warning(e) core.warning(e);
}) });
if (routes === null) { if (routes === null) {
return // Not a bug return; // Not a bug, or skipped
} }
if (routes === undefined) { if (routes === undefined) {
await github.rest.issues await github.rest.issues
.addLabels({ .addLabels({
...issue_facts, ...issue_facts,
labels: [ labels: [parseFailure],
parseFailure
],
}) })
.catch((e) => { .catch((e) => {
core.warning(e); core.warning(e);
}); });
return return;
} }
const maintainers = await getMaintainersByRoutes(routes, core) const maintainers = await getMaintainersByRoutes(routes, core);
let successCount = 0 let successCount = 0;
let comments = "##### Trying to find maintainers: \n\n" let comments = '##### Trying to find maintainers: \n\n';
for (let i = 0; i < routes.length; i++) { for (let i = 0; i < routes.length; i++) {
const route = routes[i] const route = routes[i];
const main = maintainers[i] const main = maintainers[i];
if (main === undefined) { if (main === undefined) {
comments += `- \`${route}\`: **Not found in list**\n` comments += `- \`${route}\`: **Not found in list**\n`;
continue continue;
} }
if (main.length === 0) { if (main.length === 0) {
comments += `- \`${route}\`: No maintainer listed, possibly v1 route or misconfigure\n` comments += `- \`${route}\`: No maintainer listed, possibly v1 route or misconfigure\n`;
successCount += 1 successCount += 1;
continue continue;
} }
if (main.length > 0) { if (main.length > 0) {
const pingStr = main.map(e => { const pingStr = main
if (e in ignoreUsername) { .map((e) => {
return `\`@${e}\`` // Wrap with code so no mention will be sent if (e in ignoreUsername) {
} return `\`@${e}\``; // Wrap with code so no mention will be sent
return `@${e}` }
}).join(" ") return `@${e}`;
comments += `- \`${route}\`: ${pingStr}\n` })
successCount += 1 .join(' ');
comments += `- \`${route}\`: ${pingStr}\n`;
successCount += 1;
} }
} }
// Send out notification // Send out notification
await github.rest.issues await github.rest.issues
.createComment({ .createComment({
...issue_facts, ...issue_facts,
body: `${comments} body: `${comments}
> Maintainers: if you do not want to be notified, add your name in scripts/test-issue/find-maintainer.js so your name will be wrapped when tagged. > Maintainers: if you do not want to be notified, add your name in scripts/test-issue/find-maintainer.js so your name will be wrapped when tagged.
`, `,
}) })
.catch((e) => { .catch((e) => {
core.warning(e); core.warning(e);
}); });
if (successCount === routes.length) { if (successCount === routes.length) {
await github.rest.issues await github.rest.issues
.addLabels({ .addLabels({
...issue_facts, ...issue_facts,
labels: [ labels: [successTag],
successTag })
], .catch((e) => {
}) core.warning(e);
.catch((e) => { });
core.warning(e);
});
} else { } else {
await github.rest.issues await github.rest.issues
.addLabels({ .addLabels({
...issue_facts, ...issue_facts,
labels: [ labels: [failTag],
failTag })
], .catch((e) => {
}) core.warning(e);
.catch((e) => { });
core.warning(e);
});
} }
// Write Affected Route Count // Write Affected Route Count
await github.rest.issues await github.rest.issues
.addLabels({ .addLabels({
...issue_facts, ...issue_facts,
labels: [ labels: [`Count: ${successCount}/${routes.length}`],
`Count: ${successCount}/${routes.length}` })
], .catch((e) => {
}) core.warning(e);
.catch((e) => { });
core.warning(e); };
});
};