From 62473e5e86f609616979781bce85be9d4a04c6d9 Mon Sep 17 00:00:00 2001 From: Mitchell Hentges Date: Mon, 3 Jun 2019 16:32:38 +0200 Subject: [PATCH] Migrates "raptor" build type to work for chrome-perf-testing, too (#2926) --- app/build.gradle | 56 +++++++++---------- app/src/main/java/org/mozilla/fenix/Config.kt | 11 ++-- automation/taskcluster/decision_task.py | 4 +- automation/taskcluster/lib/tasks.py | 34 +++++++++-- 4 files changed, 63 insertions(+), 42 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 272cc94ff..df3f796ba 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,8 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments clearPackageData: 'true' manifestPlaceholders.isRaptorEnabled = "false" - resValue "bool", "IS_DEBUG", "true" + resValue "bool", "IS_DEBUG", "false" + buildConfigField "boolean", "USE_RELEASE_VERSIONING", "false" } def releaseTemplate = { @@ -37,17 +38,19 @@ android { minifyEnabled false applicationIdSuffix ".debug" manifestPlaceholders.isRaptorEnabled = "true" + resValue "bool", "IS_DEBUG", "true" } - raptor releaseTemplate >> { // the ">>" concatenates the raptor-specific options with the template + forPerformanceTest releaseTemplate >> { // the ">>" concatenates the raptor-specific options with the template manifestPlaceholders.isRaptorEnabled = "true" - applicationIdSuffix ".raptor" + applicationIdSuffix ".performancetest" + debuggable true } nightly releaseTemplate >> { - resValue "bool", "IS_DEBUG", "false" + buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" } beta releaseTemplate >> { applicationIdSuffix ".beta" - resValue "bool", "IS_DEBUG", "false" + buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" } } @@ -125,10 +128,10 @@ android.applicationVariants.all { variant -> def buildType = variant.buildType.name def versionCode = null - def releaseChannels = ["nightly", "beta", "release"] - def isReleased = releaseChannels.contains(buildType) + def isDebug = variant.buildType.resValues['IS_DEBUG']?.value ?: false + def useReleaseVersioning = variant.buildType.buildConfigFields['USE_RELEASE_VERSIONING']?.value ?: false - if (isReleased) { + if (useReleaseVersioning) { versionCode = generatedVersionCode // The Google Play Store does not allow multiple APKs for the same app that all have the @@ -171,32 +174,29 @@ android.applicationVariants.all { variant -> } println("----------------------------------------------") - println("Variant name: " + variant.name) - println("Build type: " + variant.buildType.name) - println("Flavor: " + variant.flavorName) - println("Version code: " + (versionCode ?: variant.mergedFlavor.versionCode)) + println("Variant name: " + variant.name) + println("Build type: " + variant.buildType.name) + println("Flavor: " + variant.flavorName) + println("Version code: " + (versionCode ?: variant.mergedFlavor.versionCode)) + println("Telemetry enabled: " + !isDebug) // ------------------------------------------------------------------------------------------------- // BuildConfig: Set variables for Sentry, Crash Reporting, and Telemetry // ------------------------------------------------------------------------------------------------- - // Reading sentry token from local file (if it exists). In a release task on taskcluster it will be available. - try { - def token = new File("${rootDir}/.sentry_token").text.trim() - buildConfigField 'String', 'SENTRY_TOKEN', '"' + token + '"' - } catch (FileNotFoundException ignored) { - buildConfigField 'String', 'SENTRY_TOKEN', 'null' - } - - // Activating crash reporting only if command line parameter was provided (in automation) - if (project.hasProperty("crashReports") && project.property("crashReports") == "true") { + buildConfigField 'String', 'SENTRY_TOKEN', 'null' + if (!isDebug) { buildConfigField 'boolean', 'CRASH_REPORTING', 'true' + // Reading sentry token from local file (if it exists). In a release task on taskcluster it will be available. + try { + def token = new File("${rootDir}/.sentry_token").text.trim() + buildConfigField 'String', 'SENTRY_TOKEN', '"' + token + '"' + } catch (FileNotFoundException ignored) {} } else { buildConfigField 'boolean', 'CRASH_REPORTING', 'false' } - // Activating telemetry only if command line parameter was provided (in automation) - if (project.hasProperty("telemetry") && project.property("telemetry") == "true") { + if (!isDebug) { buildConfigField 'boolean', 'TELEMETRY', 'true' } else { buildConfigField 'boolean', 'TELEMETRY', 'false' @@ -213,7 +213,7 @@ android.applicationVariants.all { variant -> print("Adjust token: ") - if (isReleased) { + if (!isDebug) { try { def token = new File("${rootDir}/.adjust_token").text.trim() buildConfigField 'String', 'ADJUST_TOKEN', '"' + token + '"' @@ -249,7 +249,7 @@ android.applicationVariants.all { variant -> // ------------------------------------------------------------------------------------------------- // Feature build flags // ------------------------------------------------------------------------------------------------- - buildConfigField 'Boolean', 'SEND_TAB_ENABLED', (buildType == "nightly" || !isReleased).toString() + buildConfigField 'Boolean', 'SEND_TAB_ENABLED', (buildType == "nightly" || isDebug).toString() } androidExtensions { @@ -395,10 +395,6 @@ dependencies { releaseImplementation Deps.flipper_noop } -if (project.hasProperty("raptor")) { - android.defaultConfig.manifestPlaceholders.isRaptorEnabled = "true" -} - // ------------------------------------------------------------------------------------------------- // Task for printing all build variants to build variants in parallel in automation // ------------------------------------------------------------------------------------------------- diff --git a/app/src/main/java/org/mozilla/fenix/Config.kt b/app/src/main/java/org/mozilla/fenix/Config.kt index cc65a4439..01d965642 100644 --- a/app/src/main/java/org/mozilla/fenix/Config.kt +++ b/app/src/main/java/org/mozilla/fenix/Config.kt @@ -5,20 +5,21 @@ package org.mozilla.fenix enum class ReleaseChannel { - Debug, Nightly, Beta, Release; + Debug, Nightly, Beta, Production; val isReleased: Boolean get() = when (this) { - Release, Beta, Nightly -> true - else -> false + Debug -> false + else -> true } } object Config { val channel = when (BuildConfig.BUILD_TYPE) { - "release" -> ReleaseChannel.Release + "production" -> ReleaseChannel.Production "beta" -> ReleaseChannel.Beta "nightly" -> ReleaseChannel.Nightly - else -> ReleaseChannel.Debug + "debug" -> ReleaseChannel.Debug + else -> ReleaseChannel.Production // Performance-test builds should test production behaviour } } diff --git a/automation/taskcluster/decision_task.py b/automation/taskcluster/decision_task.py index ca0b10388..799732164 100644 --- a/automation/taskcluster/decision_task.py +++ b/automation/taskcluster/decision_task.py @@ -89,9 +89,9 @@ def raptor(is_staging): mozharness_task_id = fetch_mozharness_task_id(geckoview_nightly_version) gecko_revision = taskcluster.Queue().task(mozharness_task_id)['payload']['env']['GECKO_HEAD_REV'] - for variant in [Variant.from_values(abi, False, 'raptor') for abi in ('aarch64', 'arm')]: + for variant in [Variant.from_values(abi, False, 'forPerformanceTest') for abi in ('aarch64', 'arm')]: assemble_task_id = taskcluster.slugId() - build_tasks[assemble_task_id] = BUILDER.craft_assemble_task(variant) + build_tasks[assemble_task_id] = BUILDER.craft_assemble_raptor_task(variant) signing_task_id = taskcluster.slugId() signing_tasks[signing_task_id] = BUILDER.craft_raptor_signing_task(assemble_task_id, variant, is_staging) diff --git a/automation/taskcluster/lib/tasks.py b/automation/taskcluster/lib/tasks.py index 822443a3f..1865af7cc 100644 --- a/automation/taskcluster/lib/tasks.py +++ b/automation/taskcluster/lib/tasks.py @@ -77,7 +77,7 @@ class TaskBuilder(object): capitalized_track = upper_case_first_letter(track) gradle_commands = ( - './gradlew --no-daemon -PcrashReports=true -Ptelemetry=true -PversionName={} clean test assemble{}'.format( + './gradlew --no-daemon -PversionName={} clean test assemble{}'.format( version_name, capitalized_track), ) @@ -111,6 +111,30 @@ class TaskBuilder(object): }, ) + def craft_assemble_raptor_task(self, variant): + command = ' && '.join(( + 'echo "https://fake@sentry.prod.mozaws.net/368" > .sentry_token', + 'echo "--" > .adjust_token', + 'echo "-:-" > .leanplum_token', + './gradlew --no-daemon clean assemble{}'.format(variant.for_gradle_command), + )) + + return self._craft_build_ish_task( + name='assemble: {}'.format(variant.raw), + description='Building and testing variant {}'.format(variant.raw), + command=command, + artifacts=_craft_artifacts_from_variant(variant), + treeherder={ + 'groupSymbol': variant.build_type, + 'jobKind': 'build', + 'machine': { + 'platform': variant.platform, + }, + 'symbol': 'A', + 'tier': 1, + }, + ) + def craft_assemble_task(self, variant): return self._craft_clean_gradle_task( name='assemble: {}'.format(variant.raw), @@ -379,13 +403,13 @@ class TaskBuilder(object): ): staging_prefix = '.staging' if is_staging else '' routes = [ - "index.project.mobile.fenix.v2{}.raptor.{}.{}.{}.latest.{}".format( + "index.project.mobile.fenix.v2{}.performance-test.{}.{}.{}.latest.{}".format( staging_prefix, self.date.year, self.date.month, self.date.day, variant.abi ), - "index.project.mobile.fenix.v2{}.raptor.{}.{}.{}.revision.{}.{}".format( + "index.project.mobile.fenix.v2{}.performance-test.{}.{}.{}.revision.{}.{}".format( staging_prefix, self.date.year, self.date.month, self.date.day, self.commit, variant.abi ), - "index.project.mobile.fenix.v2{}.raptor.latest.{}".format(staging_prefix, variant.abi), + "index.project.mobile.fenix.v2{}.performance-test.latest.{}".format(staging_prefix, variant.abi), ] return self._craft_signing_task( @@ -549,7 +573,7 @@ class TaskBuilder(object): "--cfg=mozharness/configs/raptor/android_hw_config.py", "--test={}".format(test_name), "--app=fenix", - "--binary=org.mozilla.fenix.raptor", + "--binary=org.mozilla.fenix.performancetest", "--activity=org.mozilla.fenix.browser.BrowserPerformanceTestActivity", "--download-symbols=ondemand", ]],