bzl_library.bzl - used by almost all rule sets, and thus requiring especial attention to maintaining backwards compatibility. Ideally, it ought to be moved out of Skylib and and into Bazel's bundled @bazel_tools repo (see https://github.com/bazelbuild/bazel-skylib/issues/127).rules/analysis_test.bzl, rules/build_test.bzl, lib/unittest.bzl; these are under more active development than the rest of Skylib, because we want to provide rule authors with a good testing story. Ideally, these ought to be moved out of Skylib and evolved at a faster pace.Because Skylib is so widely used, breaking backwards compatibility can cause widespread pain, and shouldn't be done lightly. Therefore:
native.foobar() method which was introduced in the latest Bazel pre-release or is gated behind an --incompatible flag, use an if hasattr(native, "foobar") check to keep the rest of your module (which doesn't need native.foobar()) working even when native.foobar() is not available.In addition, make sure that new code is documented and tested.
If a PR changes any docstring in an existing module, the corresponding stardoc_with_diff_test in docs will fail. To fix the test, ask the PR author to run bazel run //docs:update.
If a PR adds a new module, make sure that the PR also adds a corresponding stardoc_with_diff_test target in docs/BUILD and a corresponding *doc.md file under docs (generated by bazel run //docs:update).
# Release $VERSION **New Features** - Feature - Feature **Incompatible Changes** - Change - Change **Contributors** Name 1, Name 2, Name 3 (alphabetically from `git log`)
version in version.bzl, MODULE.bazel, and gazelle/MODULE.bazel to the new version. TODO(#386): add a test to make sure all the versions are in sync.bazel build //distributionbazel-skylib-$VERSION.tar.gz and bazel-skylib-gazelle-plugin-$VERSION.tar.gz tarballs to the mirror (you'll need Bazel developer gcloud credentials; assuming you are a Bazel developer, you can obtain them via gcloud init):gsutil cp bazel-bin/distribution/bazel-skylib{,-gazelle-plugin}-$VERSION.tar.gz gs://bazel-mirror/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/ gsutil setmeta -h "Cache-Control: public, max-age=31536000" gs://bazel-mirror/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib{,-gazelle-plugin}-$VERSION.tar.gz
sha256sum bazel-bin/distribution/bazel-skylib-$VERSION.tar.gz sha256sum bazel-bin/distribution/bazel-skylib-gazelle-plugin-$VERSION.tar.gz
bazel-skylib-$VERSION.tar.gz and bazel-skylib-gazelle-plugin-$VERSION.tar.gz to the release. For the release notes, use the CHANGELOG.md entry plus the following template:WORKSPACE setup
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "bazel_skylib",
sha256 = "$SHA256SUM",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-$VERSION.tar.gz",
"https://github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-$VERSION.tar.gz",
],
)
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
bazel_skylib_workspace()
Additional WORKSPACE setup for the Gazelle plugin
http_archive( name = "bazel_skylib_gazelle_plugin", sha256 = "$SHA256SUM_GAZELLE_PLUGIN", urls = [ "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-gazelle-plugin-$VERSION.tar.gz", "https://github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-gazelle-plugin-$VERSION.tar.gz", ], ) load("@bazel_skylib_gazelle_plugin//:workspace.bzl", "bazel_skylib_gazelle_plugin_workspace") bazel_skylib_gazelle_plugin_workspace() load("@bazel_skylib_gazelle_plugin//:setup.bzl", "bazel_skylib_gazelle_plugin_setup") bazel_skylib_gazelle_plugin_setup()
Using the rules
See the source.
Review a PR at Bazel Central Registry created by Publish-to-BCR plugin.
Use https://github.com/bazelbuild/bazel-central-registry/pull/403 as the model.
Once the Bazel Central Registry PR is merged, insert in the release description after the WORKSPACE setup section:
MODULE.bazel setup
bazel_dep(name = "bazel_skylib", version = "$VERSION")
And for the Gazelle plugin:
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "$VERSION", dev_dependency = True)