verify-release.mjs 1.7 KB

12345678910111213141516171819202122232425262728293031
  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 failures = []
  13. if (release.schemaVersion !== 1) failures.push('release.json schemaVersion 必须为 1')
  14. if (release.releaseVersion !== release.webVersion) failures.push('releaseVersion 与 webVersion 必须一致')
  15. if (release.gitTag !== `v${release.releaseVersion}`) failures.push('gitTag 必须为 v<releaseVersion>')
  16. if (pkg.version !== release.webVersion) failures.push('package.json 版本与 release.json 不一致')
  17. if (lock.version !== release.webVersion || lock.packages?.['']?.version !== release.webVersion) {
  18. failures.push('package-lock.json 版本与 release.json 不一致')
  19. }
  20. if (pluginManifest.version !== release.pluginVersion) failures.push('插件 manifest.json 版本与 release.json 不一致')
  21. if (pluginYamlVersion !== release.pluginVersion) failures.push('plugin.yaml 版本与 release.json 不一致')
  22. if (failures.length) {
  23. for (const failure of failures) process.stderr.write(`- ${failure}\n`)
  24. process.exitCode = 1
  25. } else {
  26. process.stdout.write(`发布版本校验通过:Web ${release.webVersion} + 插件 ${release.pluginVersion}\n`)
  27. }