tutanota/android.js

103 lines
2.9 KiB
JavaScript
Raw Normal View History

/**
* Build script for android app.
*
* Besides options below this script may require signing parameters passed as environment variables:
* 'APK_SIGN_ALIAS'
* 'APK_SIGN_STORE_PASS'
* 'APK_SIGN_KEY_PASS'
* 'APK_SIGN_STORE'
* 'ANDROID_HOME'
*/
2022-04-28 14:36:24 +02:00
import {Argument, Option, program} from "commander"
import {runDevBuild} from "./buildSrc/DevBuild.js"
import {prepareMobileBuild} from "./buildSrc/prepareMobileBuild.js"
import {buildWebapp} from "./buildSrc/buildWebapp.js"
import {getTutanotaAppVersion, measure} from "./buildSrc/buildUtils.js"
import path from "path"
import {$, cd} from 'zx'
2021-01-29 10:38:21 +01:00
const log = (...messages) => console.log(chalk.green("\nBUILD:"), ...messages, "\n")
2022-04-28 14:36:24 +02:00
await program
.usage('[options] [test|prod|local|host <url>] ')
2022-04-28 14:36:24 +02:00
.addArgument(new Argument("stage")
.choices(["test", "prod", "local", "host"])
.default("prod")
.argOptional())
.addArgument(new Argument("host").argOptional())
.addOption(new Option('-b, --buildtype <type>', 'gradle build type')
.choices(["debugDist", "debug", "release", "releaseTest"])
2022-05-17 16:05:58 +02:00
.default("release"))
.addOption(new Option('-i, --install', "call adb install after build"))
2022-04-28 14:36:24 +02:00
.addOption(new Option('-w --webclient <client>', 'choose web client build')
.choices(["make", "dist"])
.default("dist"))
.action(async (stage, host, {webclient, buildtype}) => {
2022-04-28 14:36:24 +02:00
if (stage === "host" && host == null || stage !== "host" && host != null) {
program.outputHelp()
process.exit(1)
}
const apk = await buildAndroid({
stage: stage ?? 'prod',
host: host,
webClient: webclient,
buildType: buildtype,
})
if (options.install) {
await $`adb install ${apk}`
// would be cool, but needs to figure out the correct app to start:
// await $`adb shell am start -n de.tutao.tutanota/de.tutao.tutanota.MainActivity`
}
})
2022-04-28 14:36:24 +02:00
.parseAsync(process.argv)
2019-02-01 11:42:51 +01:00
async function buildAndroid({stage, host, buildType, webClient}) {
2022-04-28 14:36:24 +02:00
log(`Starting ${stage} build with build type: ${buildType}, webclient: ${webClient}, host: ${host}`)
2018-12-11 14:55:06 +01:00
if (webClient === "make") {
await runDevBuild({
stage,
host,
desktop: false,
clean: false,
watch: false,
serve: false
})
} else {
const version = getTutanotaAppVersion()
await buildWebapp(
{
version,
stage,
host,
minify: true,
projectDir: path.resolve("."),
measure
}
)
}
2018-12-11 14:55:06 +01:00
await prepareMobileBuild(webClient)
2018-12-11 14:55:06 +01:00
try {
await $`rm -r build/app-android`
} catch (e) {
// Ignoring the error if the folder is not there
2018-12-11 14:55:06 +01:00
}
const {version} = JSON.parse(await $`cat package.json`.quiet())
const apkName = `tutanota-tutao-${buildType}-${version}.apk`
const apkPath = `app-android/app/build/outputs/apk/tutao/${buildType}/${apkName}`
const outPath = `./build/app-android/${apkName}`
cd("./app-android")
await $`./gradlew assembleTutao${buildType}`
cd("..")
await $`mkdir -p build/app-android`
await $`mv ${apkPath} ${outPath}`
log(`Build complete. The APK is located at: ${outPath}`)
return outPath
}