version-bumper.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/usr/bin/env node
  2. const semver = require('semver');
  3. const minimist = require('minimist');
  4. const { getElectronVersion } = require('../lib/get-version');
  5. const versionUtils = require('./version-utils');
  6. function parseCommandLine () {
  7. let help;
  8. const opts = minimist(process.argv.slice(2), {
  9. string: ['bump', 'version'],
  10. boolean: ['dryRun', 'help'],
  11. alias: { version: ['v'] },
  12. unknown: () => { help = true; }
  13. });
  14. if (help || opts.help || !opts.bump) {
  15. console.log(`
  16. Bump release version number. Possible arguments:\n
  17. --bump=patch to increment patch version\n
  18. --version={version} to set version number directly\n
  19. --dryRun to print the next version without updating files
  20. Note that you can use both --bump and --stable simultaneously.
  21. `);
  22. process.exit(0);
  23. }
  24. return opts;
  25. }
  26. // run the script
  27. async function main () {
  28. const opts = parseCommandLine();
  29. const currentVersion = getElectronVersion();
  30. const version = await nextVersion(opts.bump, currentVersion);
  31. // print would-be new version and exit early
  32. if (opts.dryRun) {
  33. console.log(`new version number would be: ${version}\n`);
  34. return 0;
  35. }
  36. console.log(`Bumped to version: ${version}`);
  37. }
  38. // get next version for release based on [nightly, alpha, beta, stable]
  39. async function nextVersion (bumpType, version) {
  40. if (
  41. versionUtils.isNightly(version) ||
  42. versionUtils.isAlpha(version) ||
  43. versionUtils.isBeta(version)
  44. ) {
  45. switch (bumpType) {
  46. case 'nightly':
  47. version = await versionUtils.nextNightly(version);
  48. break;
  49. case 'alpha':
  50. version = await versionUtils.nextAlpha(version);
  51. break;
  52. case 'beta':
  53. version = await versionUtils.nextBeta(version);
  54. break;
  55. case 'stable':
  56. version = semver.valid(semver.coerce(version));
  57. break;
  58. default:
  59. throw new Error('Invalid bump type.');
  60. }
  61. } else if (versionUtils.isStable(version)) {
  62. switch (bumpType) {
  63. case 'nightly':
  64. version = versionUtils.nextNightly(version);
  65. break;
  66. case 'alpha':
  67. throw new Error('Cannot bump to alpha from stable.');
  68. case 'beta':
  69. throw new Error('Cannot bump to beta from stable.');
  70. case 'minor':
  71. version = semver.inc(version, 'minor');
  72. break;
  73. case 'stable':
  74. version = semver.inc(version, 'patch');
  75. break;
  76. default:
  77. throw new Error('Invalid bump type.');
  78. }
  79. } else {
  80. throw new Error(`Invalid current version: ${version}`);
  81. }
  82. return version;
  83. }
  84. if (require.main === module) {
  85. main().catch((error) => {
  86. console.error(error);
  87. process.exit(1);
  88. });
  89. }
  90. module.exports = { nextVersion };