diff options
Diffstat (limited to 'scripts/link-readme.js')
-rw-r--r-- | scripts/link-readme.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/scripts/link-readme.js b/scripts/link-readme.js new file mode 100644 index 000000000..1e47cddf8 --- /dev/null +++ b/scripts/link-readme.js | |||
@@ -0,0 +1,63 @@ | |||
1 | /** | ||
2 | * Script that automatically creates links to issues and users inside README.md | ||
3 | * | ||
4 | * e.g. "#123" => "[#123](https://github.com/getferdi/ferdi/issues/123)" | ||
5 | * and "franz/#123" => "[franz#123](https://github.com/meetfranz/franz/issues/123)" | ||
6 | * and "@abc" => "[@abc](https://github.com/abc)" | ||
7 | */ | ||
8 | |||
9 | const fs = require('fs-extra'); | ||
10 | const path = require('path'); | ||
11 | |||
12 | console.log('Linking issues and PRs in README.md'); | ||
13 | |||
14 | const readmepath = path.join(__dirname, '..', '..', 'README.md'); | ||
15 | |||
16 | // Read README.md | ||
17 | let readme = fs.readFileSync(readmepath, 'utf-8'); | ||
18 | |||
19 | let replacements = 0; | ||
20 | |||
21 | // Replace Franz issues | ||
22 | // Regex matches strings that don't begin with a "[", i.e. are not already linked | ||
23 | // followed by a "franz#" and digits to indicate | ||
24 | // a GitHub issue, and not ending with a "]" | ||
25 | readme = readme.replace(/(?<!\[)franz#\d{1,}(?![\]\d])/gi, (match) => { | ||
26 | const issueNr = match.replace('franz#', ''); | ||
27 | replacements += 1; | ||
28 | return `[franz#${issueNr}](https://github.com/meetfranz/franz/issues/${issueNr})`; | ||
29 | }); | ||
30 | |||
31 | // Replace external issues | ||
32 | // Regex matches strings that don't begin with a "[", followed a repo name in the format "user/repo" | ||
33 | // followed by a "#" and digits to indicate a GitHub issue, and not ending with a "]" | ||
34 | readme = readme.replace(/(?<!\[)\w+\/\w+#\d{1,}(?![\]\d])/gi, (match) => { | ||
35 | const issueNr = match.replace(/\D/g, ''); | ||
36 | const repo = match.replace(/#\d+/g, ''); | ||
37 | replacements += 1; | ||
38 | return `[${repo}#${issueNr}](https://github.com/${repo}/issues/${issueNr})`; | ||
39 | }); | ||
40 | |||
41 | // Replace Ferdi issues | ||
42 | // Regex matches strings that don't begin with a "[", i.e. are not already linked and | ||
43 | // don't begin with "franz", i.e. are not Franz issues, followed by a "#" and digits to indicate | ||
44 | // a GitHub issue, and not ending with a "]" | ||
45 | readme = readme.replace(/(?<!\[|franz)#\d{1,}(?![\]\d])/gi, (match) => { | ||
46 | const issueNr = match.replace('#', ''); | ||
47 | replacements += 1; | ||
48 | return `[#${issueNr}](https://github.com/getferdi/ferdi/issues/${issueNr})`; | ||
49 | }); | ||
50 | |||
51 | // Link GitHub users | ||
52 | // Regex matches strings that don't begin with a "[", i.e. are not already linked | ||
53 | // followed by a "@" and at least one word character and not ending with a "]" | ||
54 | readme = readme.replace(/(?<!\[)@\w+(?!\])/gi, (match) => { | ||
55 | const username = match.replace('@', ''); | ||
56 | replacements += 1; | ||
57 | return `[@${username}](https://github.com/${username})`; | ||
58 | }); | ||
59 | |||
60 | // Write to file | ||
61 | fs.writeFileSync(readmepath, readme); | ||
62 | |||
63 | console.log(`Added ${replacements} strings`); | ||