import { execSync } from "child_process"; import fs from "fs"; import path from "path"; const appJsonPath = path.resolve("../app.json"); // detect flags const args = process.argv.slice(2); const shouldBumpMin = args.includes("--bump"); try { // šŸ“– read file const raw = fs.readFileSync(appJsonPath, "utf-8"); const json = JSON.parse(raw); const expo = json.expo ?? json; // supports both formats if (!expo.android) { throw new Error("No android config found in app.json"); } // šŸ”¢ current values const currentVersionCode = expo.android.versionCode ?? 1; const currentMin = expo.android.minSupportedVersionCode ?? 1; // šŸš€ increment version const newVersionCode = currentVersionCode + 1; expo.android.versionCode = newVersionCode; if (shouldBumpMin) { expo.android.minSupportedVersionCode = newVersionCode; } else { // keep existing min if not bumping expo.android.minSupportedVersionCode = currentMin; } // šŸ’¾ write back fs.writeFileSync(appJsonPath, JSON.stringify(json, null, 2)); console.log("āœ… app.json updated:"); console.log(" versionCode:", newVersionCode); console.log( " minSupportedVersionCode:", expo.android.minSupportedVersionCode, ); // šŸ— run build console.log("\n🚧 Running build:apk...\n"); execSync("npm run build:apk", { stdio: "inherit" }); console.log("\nšŸŽ‰ Build complete!"); } catch (err) { console.error("āŒ Build script failed:"); console.error(err); process.exit(1); }