# Updating protobuf


1) Fetch the desired protobuf version and copy it in a folder `new_proto` under
`third_party/protobuf`.
2) Bazel uses upstream protobuf from source, except for java, as we currently don't
build protobuf java when bootstrapping bazel. So instead we use pre-built jars.
So build the java proto library from source and in case you cloned an upstream version
of protobuf, remove the .git folders:
```
cd new_proto
bazel build :protobuf_java :protobuf_java_util
cp bazel-bin/libprotobuf_java.jar .
cp bazel-bin/libprotobuf_java_util.jar .
bazel clean --expunge
rm -rf .git .gitignore .gitmodules
```
3) Modify protobuf's `BUILD` file to not build java from source, but to use
   the jars instead. To do that, in the BUILD file delete the rules listed
   under `Java support`. Then, from the `third_party/protobuf/<old_proto>/BUILD file`
   copy the rules under "Modifications made by bazel" to the new BUILD file.
   The java rules in there should have the same names as the ones you just deleted under "Java support".
   You might need to update the names of the jars in the rules sources to the ones you just build.
4) Copy `third_party/protobuf/<old_proto>/com_google_protobuf_java.BUILD` to the new
   directory.
5) Copy the `licenses` declaration and the `srcs` filegroup from
   `third_party/protobuf/<old_proto>/util/python/BUILD` and
   `third_party/protobuf/<old_proto>/examples/BUILD` to the corresponding
   file in the new directory.
6) Name the `new\_proto` directory according to the protobuf version number.
7) In `third\_party/protobuf/BUILD` update `PROTOBUF\_VERSION` to the name of the
directory you just created.
8) In the root `WORKSPACE` file update relative paths of protobuf to point to
the new version.
9) Update version number in `src/main/protobuf/BUILD` and `src/test/shell/testenv.sh`.
10) Delete the `third_party/protobuf/<old_proto>` directory.
11) Update this file if you found the :instructions to be wrong or incomplete.

# Current protobuf version

The current version of protobuf is [3.6.0](https://github.com/google/protobuf/releases/tag/v3.6.0).
