forked from mirrors/gecko-dev
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
114 lines
5.5 KiB
Groovy
114 lines
5.5 KiB
Groovy
/* 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
|
|
}
|