release-apk.mjs 1.4 KB

1234567891011121314151617181920212223242526272829303132
  1. #!/usr/bin/env node
  2. // 把 apps/mobile 打好的 APK 整理为发布目录 dist-mobile:agent-<版本>.apk 与 index.json,由服务在 /app 下载页提供。
  3. // 用法:先 pnpm apk 打包,再执行本脚本;deploy/release-apk.sh 会依次完成并发布到服务目录
  4. import crypto from 'node:crypto'
  5. import fs from 'node:fs'
  6. import path from 'node:path'
  7. import { fileURLToPath } from 'node:url'
  8. const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
  9. const apk = path.join(root, 'apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk')
  10. const out = path.join(root, 'dist-mobile')
  11. const { version } = JSON.parse(fs.readFileSync(path.join(root, 'apps/mobile/package.json'), 'utf8'))
  12. if (!fs.existsSync(apk)) {
  13. console.error(`没有找到安装包:${apk},请先执行 pnpm apk`)
  14. process.exit(1)
  15. }
  16. fs.rmSync(out, { recursive: true, force: true })
  17. fs.mkdirSync(out, { recursive: true })
  18. const file = `agent-${version}.apk`
  19. fs.copyFileSync(apk, path.join(out, file))
  20. const data = fs.readFileSync(path.join(out, file))
  21. const release = {
  22. version,
  23. file,
  24. size: data.length,
  25. sha256: crypto.createHash('sha256').update(data).digest('hex'),
  26. publishedAt: new Date().toISOString(),
  27. }
  28. fs.writeFileSync(path.join(out, 'index.json'), `${JSON.stringify(release, null, 2)}\n`)
  29. console.log(`dist-mobile/${file}(${(data.length / 1048576).toFixed(1)} MB)`)