update-contributors.mjs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env node
  2. import fetchContrib from 'github-contributors-list/lib/contributors.js'
  3. import layoutStrategy from 'github-contributors-list/lib/strategies/layout_strategies/json.js'
  4. import sortStrategy from 'github-contributors-list/lib/strategies/sort_strategies/sort_desc.js'
  5. import filterStrategy from 'github-contributors-list/lib/strategies/filter_strategies/login.js'
  6. import { Buffer } from 'node:buffer'
  7. import fs from 'node:fs/promises'
  8. import process from 'node:process'
  9. const README_FILE_NAME = new URL('../README.md', import.meta.url)
  10. const readme = await fs.open(README_FILE_NAME, 'r+')
  11. const readmeContent = await readme.readFile()
  12. // Detect start of contributors section.
  13. const START_TAG = Buffer.from('<table id="contributors_table">\n')
  14. const START_TAG_POSITION =
  15. readmeContent.indexOf(START_TAG) + START_TAG.byteLength
  16. const args = {
  17. owner: 'transloadit',
  18. repository: 'uppy',
  19. cols: 6,
  20. format: 'json',
  21. sortBy: 'contributions',
  22. sortOrder: 'desc',
  23. filter: [],
  24. layoutStrategy,
  25. sortStrategy,
  26. filterStrategy,
  27. }
  28. const { contributors } = await fetchContrib(args).loadAll(
  29. args.owner,
  30. args.repository,
  31. args.authToken || process.env.GITHUB_API_TOKEN,
  32. args.fromDate,
  33. )
  34. let cursor = START_TAG_POSITION
  35. for (const line of contributors) {
  36. let row = '<tr>'
  37. for (const { html_url, login, avatar_url } of line) {
  38. row += `<td><a href=${html_url}><img width="117" alt=${JSON.stringify(login)} src=${JSON.stringify(avatar_url)}></a></td>`
  39. }
  40. row += '</tr>\n'
  41. const { bytesWritten } = await readme.write(row, cursor, 'utf-8')
  42. cursor += bytesWritten
  43. }
  44. if (cursor === START_TAG_POSITION) {
  45. console.log('Empty response from githubcontrib. GitHub’s rate limit?')
  46. await readme.close()
  47. process.exit(1)
  48. }
  49. await readme.truncate(cursor)
  50. // Write the end of the file.
  51. await readme.write(
  52. readmeContent,
  53. readmeContent.indexOf('<!--/contributors-->'),
  54. undefined,
  55. cursor,
  56. )
  57. await readme.close()