version.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const semver = require('semver');
  2. const findLatestVersion = (versionSet) => {
  3. return [...versionSet].find(v => v === semver.coerce(v).raw);
  4. };
  5. const getAlphaVersion = (versionSet) => {
  6. let latestVersion = findLatestVersion(versionSet);
  7. const nextBetaVersion = semver.inc(latestVersion, 'preminor', 'beta');
  8. // 如果已经有beta版本了,那么就得发下个版本的alpla版
  9. if (versionSet.has(nextBetaVersion)) {
  10. latestVersion = semver.inc(latestVersion, 'minor');
  11. }
  12. let nextVersion = semver.inc(latestVersion, 'preminor', 'alpha');
  13. while (versionSet.has(nextVersion)) {
  14. nextVersion = semver.inc(nextVersion, 'prerelease', 'alpha');
  15. }
  16. return nextVersion;
  17. };
  18. const getBetaVersion = (versionSet) => {
  19. const latestVersion = findLatestVersion(versionSet);
  20. let nextVersion = semver.inc(latestVersion, 'preminor', 'beta');
  21. while (versionSet.has(nextVersion)) {
  22. nextVersion = semver.inc(nextVersion, 'prerelease', 'beta');
  23. }
  24. return nextVersion;
  25. };
  26. const getHotfixVersion = (versionSet) => {
  27. const latestVersion = findLatestVersion(versionSet);
  28. let nextVersion = semver.inc(latestVersion, 'prepatch', 'beta');
  29. while (versionSet.has(nextVersion)) {
  30. nextVersion = semver.inc(nextVersion, 'prerelease', 'beta');
  31. }
  32. return nextVersion;
  33. };
  34. const getMinorVersion = (versionSet) => {
  35. const latestVersion = findLatestVersion(versionSet);
  36. const nextVersion = semver.inc(latestVersion, 'minor');
  37. return nextVersion;
  38. };
  39. const getPatchVersion = (versionSet) => {
  40. const latestVersion = findLatestVersion(versionSet);
  41. const nextVersion = semver.inc(latestVersion, 'patch');
  42. return nextVersion;
  43. };
  44. const generateVersions = (versionSet, releaseType) => {
  45. switch (releaseType) {
  46. case "minor":
  47. return getMinorVersion(versionSet);
  48. case "patch":
  49. return getPatchVersion(versionSet);
  50. case "alpha":
  51. return getAlphaVersion(versionSet);
  52. case "beta":
  53. return getBetaVersion(versionSet);
  54. case "hotfix":
  55. return getHotfixVersion(versionSet);
  56. default:
  57. return '';
  58. }
  59. };
  60. function main() {
  61. const versionList = JSON.parse(process.env.VERSION_LIST);
  62. const releaseType = process.env.RELEASE_TYPE;
  63. const sortedVersionList = versionList.sort(semver.rcompare);
  64. const sortedVersionSet = new Set(sortedVersionList);
  65. return generateVersions(sortedVersionSet, releaseType);
  66. }
  67. console.log(main());