.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / table / node_modules / ajv / scripts / get-contributors.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/table/node_modules/ajv/scripts/get-contributors.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/table/node_modules/ajv/scripts/get-contributors.js
new file mode 100644 (file)
index 0000000..be6ab58
--- /dev/null
@@ -0,0 +1,57 @@
+// Credit for the script goes to svelte:
+// https://github.com/sveltejs/svelte/blob/ce3a5791258ec6ecf8c1ea022cb871afe805a45c/site/scripts/get-contributors.js
+
+const fs = require("fs")
+const fetch = require("node-fetch")
+const Jimp = require("jimp")
+
+process.chdir(__dirname)
+
+const base = `https://api.github.com/repos/ajv-validator/ajv/contributors`
+const {GH_TOKEN_PUBLIC} = process.env
+
+const SIZE = 64
+
+async function main() {
+  const contributors = []
+  let page = 1
+
+  // eslint-disable-next-line no-constant-condition
+  while (true) {
+    const res = await fetch(`${base}?per_page=100&page=${page++}`, {
+      headers: {Authorization: `token ${GH_TOKEN_PUBLIC}`},
+    })
+    const list = await res.json()
+    if (list.length === 0) break
+    contributors.push(...list)
+  }
+
+  const bots = ["dependabot-preview[bot]", "greenkeeper[bot]", "greenkeeperio-bot"]
+
+  const authors = contributors
+    .filter((a) => !bots.includes(a.login))
+    .sort((a, b) => b.contributions - a.contributions)
+
+  const sprite = new Jimp(SIZE * authors.length, SIZE)
+
+  for (let i = 0; i < authors.length; i += 1) {
+    const author = authors[i]
+    console.log(`${i + 1} / ${authors.length}: ${author.login}`)
+    const image_data = await fetch(author.avatar_url)
+    const buffer = await image_data.arrayBuffer()
+    const image = await Jimp.read(buffer)
+    image.resize(SIZE, SIZE)
+    sprite.composite(image, i * SIZE, 0)
+  }
+
+  await sprite.quality(80).write(`../docs/.vuepress/components/Contributors/contributors.jpg`)
+
+  const str = `[\n  ${authors.map((a) => `"${a.login}"`).join(",\n  ")},\n]\n`
+
+  fs.writeFileSync(
+    `../docs/.vuepress/components/Contributors/_contributors.js`,
+    `module.exports = ${str}`
+  )
+}
+
+main()