verify-release.mjs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/env node
  2. import { readFile } from 'node:fs/promises'
  3. import { resolve } from 'node:path'
  4. const root = resolve(import.meta.dirname, '..')
  5. const json = async path => JSON.parse(await readFile(resolve(root, path), 'utf8'))
  6. const release = await json('release.json')
  7. const pkg = await json('package.json')
  8. const lock = await json('package-lock.json')
  9. const pluginManifest = await json('hermes-plugins/yaoyao/dashboard/manifest.json')
  10. const pluginYaml = await readFile(resolve(root, 'hermes-plugins/yaoyao/plugin.yaml'), 'utf8')
  11. const pluginYamlVersion = pluginYaml.match(/^version:\s*["']?([^"'\s]+)["']?\s*$/m)?.[1]
  12. const updaterBuildPackages = [
  13. '@vitejs/plugin-vue',
  14. '@vue/tsconfig',
  15. 'typescript',
  16. 'vite',
  17. 'vue-tsc',
  18. ]
  19. const failures = []
  20. if (release.schemaVersion !== 1) failures.push('release.json schemaVersion 必须为 1')
  21. if (release.releaseVersion !== release.webVersion) failures.push('releaseVersion 与 webVersion 必须一致')
  22. if (release.gitTag !== `v${release.releaseVersion}`) failures.push('gitTag 必须为 v<releaseVersion>')
  23. if (pkg.version !== release.webVersion) failures.push('package.json 版本与 release.json 不一致')
  24. if (lock.version !== release.webVersion || lock.packages?.['']?.version !== release.webVersion) {
  25. failures.push('package-lock.json 版本与 release.json 不一致')
  26. }
  27. if (pluginManifest.version !== release.pluginVersion) failures.push('插件 manifest.json 版本与 release.json 不一致')
  28. if (pluginYamlVersion !== release.pluginVersion) failures.push('plugin.yaml 版本与 release.json 不一致')
  29. for (const dependency of updaterBuildPackages) {
  30. if (typeof pkg.dependencies?.[dependency] !== 'string') {
  31. failures.push(`升级构建依赖 ${dependency} 必须位于 dependencies,以兼容旧版后台升级器`)
  32. }
  33. }
  34. if (failures.length) {
  35. for (const failure of failures) process.stderr.write(`- ${failure}\n`)
  36. process.exitCode = 1
  37. } else {
  38. process.stdout.write(`发布版本校验通过:Web ${release.webVersion} + 插件 ${release.pluginVersion}\n`)
  39. }