prepare-pad-update.cjs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. const { copyFileSync, mkdirSync, readFileSync, writeFileSync } = require('node:fs')
  2. const { createHash } = require('node:crypto')
  3. const { basename, resolve } = require('node:path')
  4. const repoRoot = resolve(__dirname, '..')
  5. const mobileRoot = resolve(repoRoot, 'mobile-app')
  6. const variant = process.argv.includes('--oem') ? 'oem' : 'standard'
  7. const packageJson = JSON.parse(readFileSync(resolve(mobileRoot, 'package.json'), 'utf8'))
  8. const displayVersion = packageJson.version.replace(/^(\d+\.\d+\.\d+)-(\d+)$/, '$1.$2')
  9. const gradle = readFileSync(resolve(mobileRoot, 'android-capacitor', 'app', 'build.gradle'), 'utf8')
  10. const versionCode = Number(gradle.match(/\bversionCode\s+(\d+)/)?.[1] || 0)
  11. if (!versionCode) throw new Error('Unable to read Android versionCode from app/build.gradle')
  12. const sourceName = `Mini7-One-Pad-${displayVersion}-${variant}-debug.apk`
  13. const sourceApk = resolve(mobileRoot, 'dist', sourceName)
  14. const publicName = `Mini7-One-Pad-${displayVersion}-${variant}.apk`
  15. const outputDir = resolve(mobileRoot, 'dist', 'update', variant)
  16. const outputApk = resolve(outputDir, publicName)
  17. mkdirSync(outputDir, { recursive: true })
  18. copyFileSync(sourceApk, outputApk)
  19. const sha256 = createHash('sha256').update(readFileSync(outputApk)).digest('hex')
  20. const manifest = {
  21. version: displayVersion,
  22. versionCode,
  23. url: publicName,
  24. sha256,
  25. notes: process.env.MINI7_UPDATE_NOTES || '',
  26. mandatory: process.env.MINI7_UPDATE_MANDATORY === 'true'
  27. }
  28. writeFileSync(resolve(outputDir, 'latest.json'), `${JSON.stringify(manifest, null, 2)}\n`)
  29. writeFileSync(resolve(outputDir, `${basename(outputApk)}.sha256`), `${sha256} ${publicName}\n`)
  30. console.log(`[Pad Update] Upload everything in: ${outputDir}`)
  31. console.log(`[Pad Update] Version: ${displayVersion} (${versionCode}), variant: ${variant}`)