Bug 1258760 - Pre: Document how to produce Android Gradle dependencies. r=gps
authorNick Alexander <nalexander@mozilla.com>
Mon, 21 Mar 2016 21:07:41 -0700
changeset 289767 8ae2e73a7d903b1ba90cb5c77ad89a852ab7f733
parent 289766 1b70e9fe9db0c1829208283251e8edc308eee5f3
child 289768 8725d09652fb8c960b651acfc31496dad64425ed
push id18309
push usernalexander@mozilla.com
push dateTue, 22 Mar 2016 17:27:53 +0000
treeherderfx-team@45e593e317fb [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
Bug 1258760 - Pre: Document how to produce Android Gradle dependencies. r=gps MozReview-Commit-ID: 8hwuQWG98DE
--- a/build/docs/toolchains.rst
+++ b/build/docs/toolchains.rst
@@ -46,8 +46,63 @@ 2. Select ``Programming Languages`` -> `
 3. Under ``Windows and Web Development`` uncheck everything except
    ``Universal Windows App Development Tools`` and the items under it
    (should be ``Tools (1.2)...`` and the ``Windows 10 SDK``).
 Once Visual Studio 2015 Community has been installed, from a checkout
 of mozilla-central, run the following to produce a ZIP archive::
    $ ./mach python build/windows_toolchain.py create-zip vs2015.zip
+Firefox for Android with Gradle
+To build Firefox for Android with Gradle in automation, archives
+containing both the Gradle executable and a Maven repository
+comprising the exact build dependencies are produced and uploaded to
+an internal Mozilla server.  The build automation will download,
+verify, and extract these archive before building.  These archives
+provide a self-contained Gradle and Maven repository so that machines
+don't need to fetch additional Maven dependencies at build time.
+(Gradle and the downloaded Maven dependencies can be both
+redistributed publicly.)
+Archiving the Gradle executable is straight-forward, but archiving a
+local Maven repository is not.  Therefore a special Task Cluster
+Docker image and job exist for producing the required archives.  The
+Docker image definition is rooted in
+``taskcluster/docker/android-gradle-build``.  The Task Cluster job
+definition is in
+The job runs in a container based on the custom Docker image and
+spawns a Sonatype Nexus proxying Maven repository process in the
+background.  The job builds Firefox for Android using Gradle and the
+in-tree Gradle configuration rooted at ``build.gradle``.  The spawned
+proxying Maven repository downloads external dependencies and collects
+them.  After the Gradle build completes, the job archives the Gradle
+version used to build, and the downloaded Maven repository, and
+exposes them as Task Cluster artifacts.
+Here is `an example try job fetching these dependencies
+The resulting task produced a `Gradle archive
+and a `Maven repository archive
+These archives were then uploaded (manually) to Mozilla automation
+using tooltool for consumption in Gradle builds.
+To update the version of Gradle in the archive produced, update
+``gradle/wrapper/gradle-wrapper.properties``.  Be sure to also update
+the SHA256 checksum to prevent poisoning the build machines!
+To update the versions of Gradle dependencies used, update
+``dependencies`` sections in the in-tree Gradle configuration rooted
+at ``build.gradle``.  Once you are confident your changes build
+locally, push a fresh try build with an invocation like::
+   $ hg push-to-try -m "try: -b o -p android-api-15-gradle-dependencies"
+Then `upload your archives to tooltool
+update the in-tree manifests in
+``mobile/android/config/tooltool-manifests``, and push a fresh try