golangci-lint/.github/contributors/rewrite_readme.ts
2020-05-19 14:41:16 +03:00

100 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import * as fs from "fs"
import * as path from "path"
import { ContributorInfo, DataJSON } from "./info"
const main = async () => {
const readmePath = path.join(`..`, `..`, `README.md`)
const contentBuf = fs.readFileSync(readmePath)
const beginPattern = `<!-- BEGIN AUTOGENERATED CONTRIBUTORS -->\n`
const endPattern = `\n<!-- END AUTOGENERATED CONTRIBUTORS -->`
const beginIndex = contentBuf.indexOf(beginPattern)
const endIndex = contentBuf.indexOf(endPattern)
if (beginIndex < 0 || endIndex < 0 || beginIndex >= endIndex) {
throw new Error(`no valid patterns in readme: beginIndex=${beginIndex}, endIndex=${endIndex}`)
}
const contributors = buildContributorsContent()
const rewrittenContent =
contentBuf.slice(0, beginIndex + beginPattern.length).toString() + contributors + contentBuf.slice(endIndex).toString()
// it's not atomic, TODO: use rename
fs.writeFileSync(readmePath, rewrittenContent)
}
const colPerRow = 7
const rowsVisible = 5
const buildContributorsTable = (contributors: ContributorInfo[]): string => {
type Contributors = ContributorInfo[]
const rows: Contributors[] = []
for (let i = 0; i < contributors.length; i++) {
rows.push(contributors.slice(i, i + colPerRow))
i += colPerRow
}
return `<table>
${rows
.map(
(row) =>
`<tr>\n${row
.map(
(c) =>
` <td align="center"><a href="${
c.websiteUrl ? c.websiteUrl : `https://github.com/${c.login}`
}?utm_source=golangci-lint-contributors"><img src="${c.avatarUrl}" width="100px;" alt=""/><br /><sub><b>${
c.name
}</b></sub></a></td>`
)
.join(`\n`)}\n</tr>`
)
.join(`\n`)}
</table>`
}
const buildContributorsContent = (): string => {
const data: DataJSON = JSON.parse(fs.readFileSync(`contributors.json`).toString())
const visibleCount = colPerRow * rowsVisible
const hiddenCount = data.contributors.length - visibleCount
return `<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
### Core Team
<details>
<summary>About core team</summary>
The GolangCI Core Team is a group of contributors that have demonstrated a lasting enthusiasm for the project and community.
The GolangCI Core Team has GitHub admin privileges on the repo.
#### Responsibilities
The Core Team has the following responsibilities:
1. Being available to answer high-level questions about vision and future.
2. Being available to review longstanding/forgotten pull requests.
3. Occasionally check issues, offer input, and categorize with GitHub issue labels.
4. Looking out for up-and-coming members of the GolangCI community who might want to serve as Core Team members.
5. Note that the Core Team and all GolangCI contributors are open source volunteers; membership on the Core Team is expressly not an obligation. The Core Team is distinguished as leaders in the community and while they are a good group to turn to when someone needs an answer to a question, they are still volunteering their time, and may not be available to help immediately.
</details>
${buildContributorsTable(data.coreTeam)}
### Team
${buildContributorsTable(data.contributors.slice(0, visibleCount))}
<details>
<summary>And ${hiddenCount} more our team members</summary>
${buildContributorsTable(data.contributors.slice(visibleCount))}
</details>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->`
}
main()