make-new-versions-table 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/env node
  2. /**
  3. * Generate a version table from the most recent "Release" commit,
  4. * for use in changelogs.
  5. *
  6. * Usage:
  7. * $ ./bin/make-new-versions-table
  8. */
  9. const { execSync } = require('child_process')
  10. const logStdout = execSync('git log --grep \'Release$\' -1 --pretty=oneline --no-decorate')
  11. let match = /^([0-9a-f]+) .*?$/m.exec(logStdout.toString())
  12. if (!match) {
  13. console.error('Could not read Release commit')
  14. process.exit(1)
  15. }
  16. const commit = match[1]
  17. const tagStdout = execSync(`git tag --list --contains ${commit}`)
  18. const tags = tagStdout.toString()
  19. const rx = /([@\/\w-]+)@(\d+\.\d+\.\d+)(-alpha\.\d+|-beta\.\d+)?/g
  20. const versions = []
  21. let m
  22. while ((m = rx.exec(tags))) {
  23. const [, pkg, versionPrefix, versionSuffix] = m
  24. const version = `${versionPrefix}${versionSuffix || ''}`
  25. versions.push({ pkg, version })
  26. }
  27. const mid = Math.ceil(versions.length / 2)
  28. let table = [
  29. '| Package | Version | Package | Version |',
  30. '|-|-|-|-|'
  31. ]
  32. for (let i = 0; i < mid; i++) {
  33. const left = versions[i] || { pkg: '-', version: '-' }
  34. const right = versions[i + mid] || { pkg: '-', version: '-' }
  35. table.push(`| ${left.pkg} | ${left.version} | ${right.pkg} | ${right.version} |`)
  36. }
  37. console.log(table.join('\n'))