From b5e46e611d60951318622887e6a3016543d8ba17 Mon Sep 17 00:00:00 2001 From: Mark Hammond Date: Fri, 12 Jun 2020 17:47:45 +1000 Subject: [PATCH] Allow the automatic local publication workflows to work on Windows. The end result is that Android Studio can be used in Windows to build Fenix when using the "local publish" workflow managed by settings.gradle - android-components publishes automatically, although it's necessary to manually public application-services because it doesn't build on native Windows, only via WSL. So instead of trying to build it, it just prints a message indicating the manual build is necessary. --- settings.gradle | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/settings.gradle b/settings.gradle index ccbec8163..493215ab8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -46,7 +46,21 @@ if (localProperties != null) { if (appServicesLocalPath != null) { log("Enabling automatic publication of application-services from: $appServicesLocalPath") def publishAppServicesCmd = ["./automation/publish_to_maven_local_if_modified.py"] - runCmd(publishAppServicesCmd, appServicesLocalPath, "Published application-services for local development.", false) + // Application-services doesn't build on native Windows. However, it still makes sense to + // enable these workflows on Windows, even if it isn't quote as automatic as elsewhere - + // specifically, you must run the build command on WSL, but after that you can happily build + // and debug directly from within Android Studio on native Windows - but only after following + // https://github.com/mozilla/application-services/blob/master/docs/howtos/setup-android-build-environment.md#using-windows + // So rather than fail we make noise... + if (System.properties['os.name'].toLowerCase().contains('windows')) { + log('NOTE: The autoPublish workflows do not work on native windows.'); + log('You must manually ensure that the following command has completed successfully in WSL:'); + log("> $publishAppServicesCmd"); + log("(from the '$appServicesLocalPath' directory)"); + log('Then restart the build'); + } else { + runCmd(publishAppServicesCmd, appServicesLocalPath, "Published application-services for local development.", false) + } } else { log("Disabled auto-publication of application-services. Enable it by settings '$settingAppServicesPath' in local.properties") } @@ -54,8 +68,15 @@ if (localProperties != null) { String androidComponentsLocalPath = localProperties.getProperty(settingAndroidComponentsPath) if (androidComponentsLocalPath != null) { + // android-components does build on native windows, so it doesn't get the special Windows treatment above. + // But it doesn't like executing .py files directly. We assume a "manually installed" python, + // which comes with a "py" launcher and respects the shebang line to specify the version. log("Enabling automatic publication of android-components from: $androidComponentsLocalPath") - def publishAcCmd = ["./automation/publish_to_maven_local_if_modified.py"] + def publishAcCmd = []; + if (System.properties['os.name'].toLowerCase().contains('windows')) { + publishAcCmd << "py"; + } + publishAcCmd << "./automation/publish_to_maven_local_if_modified.py"; runCmd(publishAcCmd, androidComponentsLocalPath, "Published android-components for local development.", false) } else { log("Disabled auto-publication of android-components. Enable it by settings '$settingAndroidComponentsPath' in local.properties")