Our WORKSPACE file has traditionally exposed non-trivial details of TensorFlow's external dependencies. As a result, downstream projects (projects depending on TensorFlow) broke when we made changes to TensorFlow's WORKSPACE file. In an attempt to address this problem, we restructured our WORKSPACE file to hide the details of TensorFlow's external dependencies.
Going forward, downstream projects should depend on TensorFlow by including the following block in their WORKSPACE file:
Background: bazel requires load() statements to be at the top of the file. The only exception is the WORKSPACE file. Using multiple workspace files and macros, we can fetch an external repository in workspace<N+1>.bzl and then load() a macro provided by that repository at the top of workspace<N>.bzl. As long as our repository dependency graph does not grow deeper than 4, downstream projects do not have to adjust their WORKSPACE file when we add new dependencies to TensorFlow.
We would like downstream projects to switch to the new setup by February 5th. This will allow TensorFlow to commit pending changes to its dependencies without breaking downstream projects. Soon after, we will also remove the old workspace.bzl file. An example change can be found here for the downstream serving repo.