verify-release.mjs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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 updaterBuildPackages = [
  10. '@vitejs/plugin-vue',
  11. '@vue/tsconfig',
  12. 'typescript',
  13. 'vite',
  14. 'vue-tsc',
  15. ]
  16. const failures = []
  17. if (release.schemaVersion !== 1) failures.push('release.json schemaVersion 必须为 1')
  18. if (release.releaseVersion !== release.webVersion) failures.push('releaseVersion 与 webVersion 必须一致')
  19. if (release.gitTag !== `v${release.releaseVersion}`) failures.push('gitTag 必须为 v<releaseVersion>')
  20. if (pkg.version !== release.webVersion) failures.push('package.json 版本与 release.json 不一致')
  21. if (lock.version !== release.webVersion || lock.packages?.['']?.version !== release.webVersion) {
  22. failures.push('package-lock.json 版本与 release.json 不一致')
  23. }
  24. for (const dependency of updaterBuildPackages) {
  25. if (typeof pkg.dependencies?.[dependency] !== 'string') {
  26. failures.push(`升级构建依赖 ${dependency} 必须位于 dependencies,以兼容旧版后台升级器`)
  27. }
  28. }
  29. if (failures.length) {
  30. for (const failure of failures) process.stderr.write(`- ${failure}\n`)
  31. process.exitCode = 1
  32. } else {
  33. process.stdout.write(`发布版本校验通过:Web ${release.webVersion}\n`)
  34. }