mapcomplete/scripts/generateContributors.ts

63 lines
1.9 KiB
TypeScript
Raw Normal View History

2022-09-08 21:40:48 +02:00
import { exec } from "child_process"
2023-03-29 17:21:20 +02:00
import { writeFileSync } from "fs"
2022-02-14 19:41:55 +01:00
interface Contributor {
/**
* The name of the contributor
*/
contributor: string
/**
* The number of commits
*/
commits: number
}
interface ContributorList {
contributors: Contributor[]
}
function asList(hist: Map<string, number>): ContributorList {
const ls: Contributor[] = []
2022-02-14 19:41:55 +01:00
hist.forEach((commits, contributor) => {
2022-09-08 21:40:48 +02:00
ls.push({ commits, contributor })
2022-02-14 19:41:55 +01:00
})
2022-09-08 21:40:48 +02:00
ls.sort((a, b) => b.commits - a.commits)
return { contributors: ls }
2022-02-14 19:41:55 +01:00
}
function main() {
2022-09-08 21:40:48 +02:00
exec("git log --pretty='%aN %%!%% %s' ", (error, stdout, stderr) => {
const entries = stdout.split("\n").filter((str) => str !== "")
2022-02-14 19:41:55 +01:00
const codeContributors = new Map<string, number>()
const translationContributors = new Map<string, number>()
for (const entry of entries) {
console.log(entry)
2022-09-08 21:40:48 +02:00
let [author, message] = entry.split("%!%").map((s) => s.trim())
if (author === "Weblate") {
2022-02-14 19:53:23 +01:00
continue
}
2022-02-14 19:41:55 +01:00
if (author === "pietervdvn") {
author = "Pieter Vander Vennet"
}
2022-09-08 21:40:48 +02:00
let hist = codeContributors
if (
message.startsWith("Translated using Weblate") ||
message.startsWith("Translated using Hosted Weblate")
) {
2022-02-14 19:41:55 +01:00
hist = translationContributors
}
hist.set(author, 1 + (hist.get(author) ?? 0))
}
2022-09-08 21:40:48 +02:00
2022-02-14 19:41:55 +01:00
const codeContributorsTarget = "assets/contributors.json"
2022-04-09 17:48:22 +02:00
writeFileSync(codeContributorsTarget, JSON.stringify(asList(codeContributors), null, " "))
2022-02-14 19:41:55 +01:00
const translatorsTarget = "assets/translators.json"
2022-09-08 21:40:48 +02:00
writeFileSync(
translatorsTarget,
JSON.stringify(asList(translationContributors), null, " ")
)
})
2022-02-14 19:41:55 +01:00
}
2022-09-08 21:40:48 +02:00
main()