version.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. // 1. 找到最新的正式版(不带 pre-release 的)
  7. const arr = Array.isArray(versionSet) ? versionSet : [...versionSet];
  8. const validVersions = arr.filter(v => semver.valid(v));
  9. validVersions.sort(semver.rcompare);
  10. const latestStable = validVersions.find(v => !semver.prerelease(v));
  11. // 2. 计算下一个 minor 的 alpha.0
  12. const nextMinor = semver.inc(latestStable, 'minor');
  13. let nextAlpha = `${nextMinor}-alpha.0`;
  14. // 3. 如果已存在,则递增 alpha 号
  15. while (versionSet.has(nextAlpha)) {
  16. // 取当前 alpha 号,递增
  17. nextAlpha = semver.inc(nextAlpha, 'prerelease', 'alpha');
  18. }
  19. return nextAlpha;
  20. };
  21. const getBetaVersion = (versionSet) => {
  22. const latestVersion = findLatestVersion(versionSet);
  23. let nextVersion = semver.inc(latestVersion, 'preminor', 'beta');
  24. while (versionSet.has(nextVersion)) {
  25. nextVersion = semver.inc(nextVersion, 'prerelease', 'beta');
  26. }
  27. return nextVersion;
  28. };
  29. const getHotfixVersion = (versionSet) => {
  30. const latestVersion = findLatestVersion(versionSet);
  31. let nextVersion = semver.inc(latestVersion, 'prepatch', 'beta');
  32. while (versionSet.has(nextVersion)) {
  33. nextVersion = semver.inc(nextVersion, 'prerelease', 'beta');
  34. }
  35. return nextVersion;
  36. };
  37. const getMinorVersion = (versionSet) => {
  38. const latestVersion = findLatestVersion(versionSet);
  39. const nextVersion = semver.inc(latestVersion, 'minor');
  40. return nextVersion;
  41. };
  42. const getPatchVersion = (versionSet) => {
  43. const latestVersion = findLatestVersion(versionSet);
  44. const nextVersion = semver.inc(latestVersion, 'patch');
  45. return nextVersion;
  46. };
  47. const generateVersions = (versionSet, releaseType) => {
  48. switch (releaseType) {
  49. case "minor":
  50. return getMinorVersion(versionSet);
  51. case "patch":
  52. return getPatchVersion(versionSet);
  53. case "alpha":
  54. return getAlphaVersion(versionSet);
  55. case "beta":
  56. return getBetaVersion(versionSet);
  57. case "hotfix":
  58. return getHotfixVersion(versionSet);
  59. default:
  60. return '';
  61. }
  62. };
  63. function main() {
  64. const versionList = JSON.parse(process.env.VERSION_LIST);
  65. const releaseType = process.env.RELEASE_TYPE;
  66. const sortedVersionList = versionList.sort(semver.rcompare);
  67. const sortedVersionSet = new Set(sortedVersionList);
  68. return generateVersions(sortedVersionSet, releaseType);
  69. }
  70. console.log(main());