tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 6de050c36772b581161cee7d7ca8003a2e2b7650
parent 6e1e4fa31c44ca6005870799699332980257207a
Author: Alex Hochheiden <ahochheiden@mozilla.com>
Date:   Thu,  4 Dec 2025 17:28:43 +0000

Bug 2001450 - Make all projects use a single `assembleNimbusTools` task will only run once at the root level r=nalexander,geckoview-reviewers

This ensures that download only runs once, and that the
binary is also only extracted once to a shared location.

Differential Revision: https://phabricator.services.mozilla.com/D273498

Diffstat:
Mmobile/android/gradle/plugins/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusGradlePlugin.groovy | 42++++++++++++++++++++++++++----------------
1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/mobile/android/gradle/plugins/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusGradlePlugin.groovy b/mobile/android/gradle/plugins/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusGradlePlugin.groovy @@ -141,7 +141,8 @@ class NimbusPlugin implements Plugin<Project> { } } else { // building from an app-services artifact. - def assembleToolsTask = setupAssembleNimbusTools(project) + def applicationServicesDir = project.nimbus.applicationServicesDir + def assembleToolsTask = getOrCreateAssembleToolsTask(project.rootProject, applicationServicesDir) validateTask.configure { // Gradle tracks the dependency on the `nimbus-fml` binary that the @@ -183,29 +184,38 @@ class NimbusPlugin implements Plugin<Project> { } // Everything below here is for downloading a binary. + private def getOrCreateAssembleToolsTask(Project rootProject, Property<String> applicationServicesDir) { + def taskName = 'assembleNimbusTools' - // Setup the tasks to download the binary. - def setupAssembleNimbusTools(Project project) { - def applicationServicesDir = project.nimbus.applicationServicesDir - def asVersionProvider = getProjectVersionProvider(project) - def projectDir = project.layout.projectDirectory + // Check if task already exists, since we only want to download/extract once. + def existingTask = rootProject.tasks.findByName(taskName) + if (existingTask != null) { + return rootProject.tasks.named(taskName) + } + + def asVersionProvider = getProjectVersionProvider(rootProject) + def topsrcdir = rootProject.gradle.mozconfig.topsrcdir + def rootBuildDir = rootProject.layout.buildDirectory + def rootProjectLayout = rootProject.layout - return project.tasks.register('assembleNimbusTools', NimbusAssembleToolsTask) { task -> + return rootProject.tasks.register(taskName, NimbusAssembleToolsTask) { task -> group "Nimbus" description "Fetch the Nimbus FML tools from Application Services" - def cacheDir = asVersionProvider.map { version -> - projectDir.dir(".gradle/caches/nimbus-fml/$version") + def cacheDir = asVersionProvider.map { String version -> + def cachePath = new File(topsrcdir, ".gradle/caches/nimbus-fml/$version") + def relativePath = rootProjectLayout.projectDirectory.asFile.toPath().relativize(cachePath.toPath()).toString() + rootProjectLayout.projectDirectory.dir(relativePath) } archiveFile = cacheDir.map { it.file('nimbus-fml.zip') } hashFile = cacheDir.map { it.file('nimbus-fml.sha256') } - fmlBinary = project.layout.buildDirectory.flatMap { buildDir -> + fmlBinary = rootBuildDir.flatMap { buildDir -> asVersionProvider.zip(platform) { version, plat -> buildDir.dir("bin/nimbus/$version").file(NimbusAssembleToolsTask.getBinaryName(plat)) } } - cacheRoot = projectDir.dir(".gradle/caches/nimbus-fml").asFile + cacheRoot = new File(topsrcdir, ".gradle/caches/nimbus-fml") fetch { // Try archive.mozilla.org release first @@ -237,13 +247,13 @@ class NimbusPlugin implements Plugin<Project> { } } - Provider<String> getProjectVersionProvider(Project project) { - def topsrcdir = project.gradle.mozconfig.topsrcdir - def localPropertiesVersion = project.gradle.hasProperty("localProperties.branchBuild.application-services.version") - ? project.gradle["localProperties.branchBuild.application-services.version"] + Provider<String> getProjectVersionProvider(Project rootProject) { + def topsrcdir = rootProject.gradle.mozconfig.topsrcdir + def localPropertiesVersion = rootProject.gradle.hasProperty("localProperties.branchBuild.application-services.version") + ? rootProject.gradle["localProperties.branchBuild.application-services.version"] : null - return project.providers.of(ApplicationServicesVersionSource) { spec -> + return rootProject.providers.of(ApplicationServicesVersionSource) { spec -> spec.parameters.topsrcdir.set(topsrcdir) spec.parameters.localPropertiesVersion.set(localPropertiesVersion) }