| --- |
| layout: documentation |
| title: Updating Bazel |
| --- |
| |
| # Updating Bazel |
| |
| The Bazel project has a [backward compatibility |
| policy](https://docs.bazel.build/versions/master/backward-compatibility.html) |
| (see [guidance for rolling out incompatible |
| changes](https://www.bazel.build/maintaining/breaking-changes-guide.html) if you are the |
| author of one). That page summarizes best practices on how to test and migrate |
| your project with upcoming incompatible changes and how to provide feedback to |
| the incompatible change authors. |
| |
| ## Managing Bazel versions with Bazelisk |
| |
| The Bazel team implemented a Bazel wrapper called |
| [bazelisk](https://github.com/bazelbuild/bazelisk) that helps you manage Bazel |
| versions. |
| |
| Bazelisk can: |
| * Auto-update Bazel to the latest version |
| * Build the project with a Bazel version specified in the .bazelversion |
| file. Check in that file into your version control to ensure reproducibility |
| of your builds. |
| * Help migrate your project for incompatible changes (see above) |
| * Easily try release candidates |
| |
| ## Recommended migration process |
| |
| Bazel backwards compatibility policy is designed to avoid _upgrade cliffs_: any |
| project can be prepared for the next Bazel release without breaking |
| compatibility with the current release. |
| |
| We recommend the following process for project migration: |
| |
| |
| 1. Assume that your project already works with a given Bazel release, say 0.26, |
| and you want to prepare for the next release, say 0.27 |
| 2. Find all incompatible changes for which the migration can be started: they are marked with |
| "migration-\<release\>" label on GitHub, for example |
| "[migration-0.26](https://github.com/bazelbuild/bazel/issues?utf8=%E2%9C%93&q=label%3Amigration-0.26+)". |
| 3. Each of those issues has an associated `--incompatible_*` flag. For each of |
| them, build your project with that flag enabled, and if the build is |
| unsuccessful, fix the project according to [migration |
| recipe](https://docs.bazel.build/versions/master/backward-compatibility.html#incompatible-changes-and-migration-recipes) |
| as specified in the corresponding GitHub issue: |
| * Migration guidance is available in the associated GitHub issue. |
| * Migration is always possible in such a way that the project continues to build with and without the flag. |
| * For some of the incompatible changes migration tooling is available, for |
| example as part of |
| [buildifier](https://github.com/bazelbuild/buildtools/releases). Be sure |
| to check the GitHub issue for migration instructions. |
| * Please report any migration problems by commenting associated GitHub issue. |
| 4. After all changes are migrated, you can continue to build your project |
| without any flags: it will be ready for the next Bazel release. |
| |
| |
| ### Migrating with Bazelisk |
| |
| [Bazelisk](https://github.com/bazelbuild/bazelisk) can |
| greatly simplify the migration process described above. |
| |
| * `bazelisk --strict` will build given targets with all incompatible flags for |
| changes with appropriate migration-* labels. |
| * `bazelisk --migrate` will do even more: it will try every flag and report |
| those for which the build was unsuccessful |