620 karma · joined October 9, 2013
I work on the Bazel build system at Google.
(I work on Bazel.)
This is accurate. A few of the biggest breaking change themes are:
1) Converting functionality linked within the Bazel binary into the extensibility mechanism implemented in Starlark. An example includes converting the native Java, C++, Android, Python, Protobuf, Obj-C and packaging rules into rules_java, rules_cc, etc. Many languages now are already implemented exclusively in Starlark. See rules_scala, rules_rust, rules_go and rules_haskell.
2) Starlark and Build API cleanups that accumulated over organic growth and development within Google for the past decade.
3) New build system features to support seamless integration with other build systems and package managers.
[1] https://www.microsoft.com/en-us/research/uploads/prod/2018/0...
There are also community created solutions like https://github.com/johnynek/bazel-deps, and https://github.com/square/bazel_maven_repository.
Disclosure: I maintain rules_jvm_external.
(disclaimer: I'm an engineer on the Bazel team)
[1] https://docs.bazel.build/versions/master/remote-execution.ht...
(Disclaimer: I'm a engineer on the Bazel team)
Bazel does ecosystem and language agnostic distributed builds with both GCP and self-hosted solutions.
Here's a demonstration of building the Angular project remotely: https://youtu.be/lDyIc2Abkwg?t=593
Tangentially related to package manager integration: Bazel can now build with CMake in-tree [2].
[0] https://github.com/bazelbuild/rules_nixpkgs/
The front end tech is also pretty interesting: it's built with Ur/Web. [2]
[1] http://bazqux.com [2] https://github.com/bazqux/bazqux-urweb
However by deriving from first principles, yes, there is no reason to re-query the transitive closure of unchanged targets' reverse deps, so caching can happen here.
Yes, Google runs hosted Jenkins internally.
[Video] https://www.youtube.com/watch?v=rJXmGGu1kf8
[Slides] https://www.cloudbees.com/sites/default/files/2016-jenkins-w...
$ bazel query 'rdeps(//foo/my:target, //...)'
Of course, this query in the monorepo will take a long time or not work, because the target universe of "//..." is far too large. This is where other systems come in.
[0] https://docs.bazel.build/versions/master/query.html#rdeps
[0] https://wphomes.soic.indiana.edu/jsiek/what-is-gradual-typin... [1] https://github.com/samth/gradual-typing-bib