forked from mirrors/gecko-dev
Bug 1895781 - Move the App Services and Glean auto-publish logic to its own settings file. r=nalexander
This commit factors out the logic into its own settings file, adds docs, and only imports the settings file into applications that consume App Services and Glean via Maven (i.e., not GeckoView). Differential Revision: https://phabricator.services.mozilla.com/D209897
This commit is contained in:
parent
a0c36ffb32
commit
3a17ce396e
6 changed files with 118 additions and 94 deletions
|
|
@ -27,6 +27,7 @@ plugins {
|
|||
ext.topsrcdir = rootProject.projectDir.absolutePath.minus("mobile/android/android-components")
|
||||
|
||||
apply from: file('../shared-settings.gradle')
|
||||
apply from: file('../autopublish-settings.gradle')
|
||||
|
||||
buildCache {
|
||||
local {
|
||||
|
|
|
|||
114
mobile/android/autopublish-settings.gradle
Normal file
114
mobile/android/autopublish-settings.gradle
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
// This settings file configures an Android project for substituting a
|
||||
// local Application Services and/or Glean.
|
||||
//
|
||||
// For convenience, this file reads the `autoPublish.*` properties from
|
||||
// `$topsrcdir/local.properties`, so that you only need to set them once
|
||||
// for all Android projects.
|
||||
//
|
||||
// You can also set or override these properties on a per-project basis,
|
||||
// by setting them in `$topsrcdir/mobile/android/{project}/local.properties`,
|
||||
// if you want to only substitute App Services or Glean for a specific project,
|
||||
// or to substitute different versions for different projects.
|
||||
//
|
||||
// This settings file configures the build to automatically publish the
|
||||
// contents of your Application Services and Glean checkouts to the
|
||||
// Maven local repository. Any dependencies are then substituted to use
|
||||
// the locally published versions.
|
||||
|
||||
def rootLocalProperties = new File(gradle.mozconfig.topsrcdir, "local.properties").with { localPropertiesFile ->
|
||||
def localProperties = new Properties()
|
||||
if (localPropertiesFile.canRead()) {
|
||||
localPropertiesFile.withInputStream { localProperties.load(it) }
|
||||
}
|
||||
localProperties
|
||||
}
|
||||
|
||||
[
|
||||
"autoPublish.application-services.dir",
|
||||
"autoPublish.glean.dir",
|
||||
].each { key ->
|
||||
def relativeOrAbsolutePath = rootLocalProperties."$key"
|
||||
if (relativeOrAbsolutePath != null) {
|
||||
def autoPublishDir = new File(gradle.mozconfig.topsrcdir).toPath().resolve(relativeOrAbsolutePath)
|
||||
gradle.ext."localProperties.$key" = autoPublishDir.toString()
|
||||
}
|
||||
}
|
||||
|
||||
gradle.settingsEvaluated {
|
||||
if (gradle.hasProperty("localProperties.autoPublish.application-services.dir")) {
|
||||
// The project that we're configuring now might have overridden
|
||||
// the path from `$topsrcdir/local.properties`, so we need to
|
||||
// resolve it again.
|
||||
def appServicesLocalPath = gradle."localProperties.autoPublish.application-services.dir".with { relativeOrAbsolutePath ->
|
||||
def absolutePath = rootDir.toPath().resolve(relativeOrAbsolutePath).toString()
|
||||
gradle."localProperties.autoPublish.application-services.dir" = absolutePath
|
||||
absolutePath
|
||||
}
|
||||
|
||||
logger.lifecycle("settings.gradle> Enabling automatic publication of application-services from: $appServicesLocalPath")
|
||||
// Windows can't execute .py files directly, so we assume a "manually installed" python,
|
||||
// which comes with a "py" launcher and respects the shebang line to specify the version.
|
||||
def publishAppServicesCmd = [];
|
||||
if (System.properties["os.name"].toLowerCase().contains("windows")) {
|
||||
publishAppServicesCmd << "py";
|
||||
}
|
||||
publishAppServicesCmd << "./automation/publish_to_maven_local_if_modified.py";
|
||||
runCmd(publishAppServicesCmd, appServicesLocalPath, "Published application-services for local development.", false)
|
||||
} else {
|
||||
logger.lifecycle("settings.gradle> Disabled auto-publication of application-services. Enable it by settings 'autoPublish.application-services.dir' in local.properties")
|
||||
}
|
||||
|
||||
if (gradle.hasProperty("localProperties.autoPublish.glean.dir")) {
|
||||
// As above, absolutize the path.
|
||||
def gleanLocalPath = gradle."localProperties.autoPublish.glean.dir".with { relativeOrAbsolutePath ->
|
||||
def absolutePath = rootDir.toPath().resolve(relativeOrAbsolutePath).toString()
|
||||
gradle."localProperties.autoPublish.glean.dir" = absolutePath
|
||||
absolutePath
|
||||
}
|
||||
|
||||
logger.lifecycle("settings.gradle> Enabling automatic publication of Glean from: $gleanLocalPath")
|
||||
// As above, hacks to execute .py files on Windows.
|
||||
def publishGleanCmd = [];
|
||||
if (System.properties["os.name"].toLowerCase().contains("windows")) {
|
||||
publishGleanCmd << "py";
|
||||
}
|
||||
publishGleanCmd << "./build-scripts/publish_to_maven_local_if_modified.py";
|
||||
runCmd(publishGleanCmd, gleanLocalPath, "Published Glean for local development.", false)
|
||||
} else {
|
||||
logger.lifecycle("settings.gradle> Disabled auto-publication of Glean. Enable it by settings 'autoPublish.glean.dir' in local.properties")
|
||||
}
|
||||
}
|
||||
|
||||
gradle.projectsLoaded { ->
|
||||
gradle.rootProject.allprojects {
|
||||
// Allow local appservices substitution in each project.
|
||||
if (gradle.hasProperty("localProperties.autoPublish.application-services.dir")) {
|
||||
def appServicesSrcDir = gradle."localProperties.autoPublish.application-services.dir"
|
||||
apply from: "${appServicesSrcDir}/build-scripts/substitute-local-appservices.gradle"
|
||||
}
|
||||
|
||||
// Allow local Glean substitution in each project.
|
||||
if (gradle.hasProperty('localProperties.autoPublish.glean.dir')) {
|
||||
def gleanSrcDir = gradle."localProperties.autoPublish.glean.dir"
|
||||
apply from: "${gleanSrcDir}/build-scripts/substitute-local-glean.gradle"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def runCmd(cmd, workingDir, successMessage, captureStdout = true) {
|
||||
def proc = cmd.execute(null, new File(workingDir))
|
||||
def standardOutput = captureStdout ? new ByteArrayOutputStream() : System.out
|
||||
proc.consumeProcessOutput(standardOutput, System.err)
|
||||
proc.waitFor()
|
||||
|
||||
if (proc.exitValue() != 0) {
|
||||
throw new GradleException("Process '${cmd}' finished with non-zero exit value ${proc.exitValue()}");
|
||||
} else {
|
||||
logger.lifecycle("settings.gradle> ${successMessage}")
|
||||
}
|
||||
return captureStdout ? standardOutput : null
|
||||
}
|
||||
|
|
@ -33,6 +33,7 @@ plugins {
|
|||
ext.topsrcdir = rootProject.projectDir.absolutePath.minus("mobile/android/fenix")
|
||||
|
||||
apply from: file('../shared-settings.gradle')
|
||||
apply from: file('../autopublish-settings.gradle')
|
||||
|
||||
include ':app'
|
||||
include ':mozilla-detekt-rules'
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ plugins {
|
|||
ext.topsrcdir = rootProject.projectDir.absolutePath.minus("mobile/android/focus-android")
|
||||
|
||||
apply from: file('../shared-settings.gradle')
|
||||
apply from: file('../autopublish-settings.gradle')
|
||||
|
||||
include ':app'
|
||||
|
||||
|
|
|
|||
|
|
@ -168,99 +168,5 @@ gradle.projectsLoaded { ->
|
|||
expand(values)
|
||||
}
|
||||
}
|
||||
|
||||
// Allow local appservices substitution in each project.
|
||||
if (gradle.hasProperty("localProperties.autoPublish.application-services.dir")) {
|
||||
def appServicesSrcDir = gradle."localProperties.autoPublish.application-services.dir"
|
||||
apply from: "${appServicesSrcDir}/build-scripts/substitute-local-appservices.gradle"
|
||||
}
|
||||
|
||||
// Allow local Glean substitution in each project.
|
||||
if (gradle.hasProperty('localProperties.autoPublish.glean.dir')) {
|
||||
def gleanSrcDir = gradle."localProperties.autoPublish.glean.dir"
|
||||
apply from: "${gleanSrcDir}/build-scripts/substitute-local-glean.gradle"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def runCmd(cmd, workingDir, successMessage, captureStdout = true) {
|
||||
def proc = cmd.execute(null, new File(workingDir))
|
||||
def standardOutput = captureStdout ? new ByteArrayOutputStream() : System.out
|
||||
proc.consumeProcessOutput(standardOutput, System.err)
|
||||
proc.waitFor()
|
||||
|
||||
if (proc.exitValue() != 0) {
|
||||
throw new GradleException("Process '${cmd}' finished with non-zero exit value ${proc.exitValue()}");
|
||||
} else {
|
||||
logger.lifecycle("settings.gradle> ${successMessage}")
|
||||
}
|
||||
return captureStdout ? standardOutput : null
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Local Development overrides
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
def rootLocalProperties = new File(gradle.mozconfig.topsrcdir, "local.properties").with { localPropertiesFile ->
|
||||
def localProperties = new Properties()
|
||||
if (localPropertiesFile.canRead()) {
|
||||
localPropertiesFile.withInputStream { localProperties.load(it) }
|
||||
}
|
||||
localProperties
|
||||
}
|
||||
|
||||
[
|
||||
"autoPublish.application-services.dir",
|
||||
"autoPublish.glean.dir",
|
||||
].each { key ->
|
||||
def relativeOrAbsolutePath = rootLocalProperties."$key"
|
||||
if (relativeOrAbsolutePath != null) {
|
||||
def autoPublishDir = new File(gradle.mozconfig.topsrcdir).toPath().resolve(relativeOrAbsolutePath)
|
||||
gradle.ext."localProperties.$key" = autoPublishDir.toString()
|
||||
}
|
||||
}
|
||||
|
||||
gradle.settingsEvaluated {
|
||||
if (gradle.hasProperty("localProperties.autoPublish.application-services.dir")) {
|
||||
// The project that we're configuring now might have overridden
|
||||
// the path from `$topsrcdir/local.properties`, so we need to
|
||||
// resolve it again.
|
||||
def appServicesLocalPath = gradle."localProperties.autoPublish.application-services.dir".with { relativeOrAbsolutePath ->
|
||||
def absolutePath = rootDir.toPath().resolve(relativeOrAbsolutePath).toString()
|
||||
gradle."localProperties.autoPublish.application-services.dir" = absolutePath
|
||||
absolutePath
|
||||
}
|
||||
|
||||
logger.lifecycle("settings.gradle> Enabling automatic publication of application-services from: $appServicesLocalPath")
|
||||
// Windows can't execute .py files directly, so we assume a "manually installed" python,
|
||||
// which comes with a "py" launcher and respects the shebang line to specify the version.
|
||||
def publishAppServicesCmd = [];
|
||||
if (System.properties["os.name"].toLowerCase().contains("windows")) {
|
||||
publishAppServicesCmd << "py";
|
||||
}
|
||||
publishAppServicesCmd << "./automation/publish_to_maven_local_if_modified.py";
|
||||
runCmd(publishAppServicesCmd, appServicesLocalPath, "Published application-services for local development.", false)
|
||||
} else {
|
||||
logger.lifecycle("settings.gradle> Disabled auto-publication of application-services. Enable it by settings 'autoPublish.application-services.dir' in local.properties")
|
||||
}
|
||||
|
||||
if (gradle.hasProperty("localProperties.autoPublish.glean.dir")) {
|
||||
// As above, absolutize the path.
|
||||
def gleanLocalPath = gradle."localProperties.autoPublish.glean.dir".with { relativeOrAbsolutePath ->
|
||||
def absolutePath = rootDir.toPath().resolve(relativeOrAbsolutePath).toString()
|
||||
gradle."localProperties.autoPublish.glean.dir" = absolutePath
|
||||
absolutePath
|
||||
}
|
||||
|
||||
logger.lifecycle("settings.gradle> Enabling automatic publication of Glean from: $gleanLocalPath")
|
||||
// As above, hacks to execute .py files on Windows.
|
||||
def publishGleanCmd = [];
|
||||
if (System.properties["os.name"].toLowerCase().contains("windows")) {
|
||||
publishGleanCmd << "py";
|
||||
}
|
||||
publishGleanCmd << "./build-scripts/publish_to_maven_local_if_modified.py";
|
||||
runCmd(publishGleanCmd, gleanLocalPath, "Published Glean for local development.", false)
|
||||
} else {
|
||||
logger.lifecycle("settings.gradle> Disabled auto-publication of Glean. Enable it by settings 'autoPublish.glean.dir' in local.properties")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ plugins {
|
|||
ext.topsrcdir = rootProject.projectDir.absolutePath
|
||||
|
||||
apply from: "${topsrcdir}/mobile/android/shared-settings.gradle"
|
||||
apply from: "${topsrcdir}/mobile/android/autopublish-settings.gradle"
|
||||
|
||||
// Set the Android SDK location. This is the *least specific* mechanism, which
|
||||
// is unfortunate: we'd prefer to use the *most specific* mechanism. That is,
|
||||
|
|
|
|||
Loading…
Reference in a new issue