getVersion.mjs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import dayjs from 'dayjs'
  2. import { exec } from 'child_process'
  3. import { readFileSync, writeFileSync } from 'fs'
  4. const versionFile = './sagoo-iot/versionInfo.json'
  5. main()
  6. /**
  7. * 写入json文件
  8. * @param {*} version
  9. * @param {*} fileDirName
  10. */
  11. function writeJson(version, fileDirName) {
  12. try {
  13. writeFileSync(fileDirName, JSON.stringify(version, null, 2), { flag: 'w+', encoding: 'utf-8' })
  14. console.log(`-> 写入 ${fileDirName} 成功`)
  15. } catch (err) {
  16. console.error(`-> 写入 ${fileDirName} 失败: `)
  17. console.error(err)
  18. throw err
  19. }
  20. }
  21. /**
  22. * 获取最新的版本号
  23. * @returns
  24. */
  25. function getLatestVersion() {
  26. return new Promise((resolve) => {
  27. exec('git describe --abbrev=0 --tags', (err, version) => {
  28. if (err) {
  29. resolve({ version: '获取失败', hash: '获取失败' })
  30. } else {
  31. if (!version) return resolve({ version: '获取失败', hash: '获取失败' })
  32. exec('git rev-parse HEAD', (err, hash) => {
  33. if (err) {
  34. resolve({ version: version.trim(), hash: '获取失败' })
  35. } else {
  36. resolve({ version: version.trim(), hash: hash.trim() })
  37. }
  38. })
  39. }
  40. })
  41. })
  42. }
  43. // 主函数
  44. function main() {
  45. getLatestVersion()
  46. .then(({ version, hash }) => {
  47. const content = readFileSync(versionFile, 'utf-8')
  48. const packageInfo = JSON.parse(content)
  49. packageInfo.version = version
  50. packageInfo.hash = hash
  51. packageInfo.updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
  52. writeJson(packageInfo, versionFile)
  53. })
  54. .catch(() => {})
  55. }