const { copyFileSync, mkdirSync, readFileSync, writeFileSync } = require('node:fs') const { createHash } = require('node:crypto') const { basename, resolve } = require('node:path') const repoRoot = resolve(__dirname, '..') const mobileRoot = resolve(repoRoot, 'mobile-app') const variant = process.argv.includes('--oem') ? 'oem' : 'standard' const packageJson = JSON.parse(readFileSync(resolve(mobileRoot, 'package.json'), 'utf8')) const displayVersion = packageJson.version.replace(/^(\d+\.\d+\.\d+)-(\d+)$/, '$1.$2') const gradle = readFileSync(resolve(mobileRoot, 'android-capacitor', 'app', 'build.gradle'), 'utf8') const versionCode = Number(gradle.match(/\bversionCode\s+(\d+)/)?.[1] || 0) if (!versionCode) throw new Error('Unable to read Android versionCode from app/build.gradle') const sourceName = `Mini7-One-Pad-${displayVersion}-${variant}-debug.apk` const sourceApk = resolve(mobileRoot, 'dist', sourceName) const publicName = `Mini7-One-Pad-${displayVersion}-${variant}.apk` const outputDir = resolve(mobileRoot, 'dist', 'update', variant) const outputApk = resolve(outputDir, publicName) mkdirSync(outputDir, { recursive: true }) copyFileSync(sourceApk, outputApk) const sha256 = createHash('sha256').update(readFileSync(outputApk)).digest('hex') const manifest = { version: displayVersion, versionCode, url: publicName, sha256, notes: process.env.MINI7_UPDATE_NOTES || '', mandatory: process.env.MINI7_UPDATE_MANDATORY === 'true' } writeFileSync(resolve(outputDir, 'latest.json'), `${JSON.stringify(manifest, null, 2)}\n`) writeFileSync(resolve(outputDir, `${basename(outputApk)}.sha256`), `${sha256} ${publicName}\n`) console.log(`[Pad Update] Upload everything in: ${outputDir}`) console.log(`[Pad Update] Version: ${displayVersion} (${versionCode}), variant: ${variant}`)