aboutsummaryrefslogtreecommitdiff
path: root/docs/maintainers_guide.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/maintainers_guide.md')
-rw-r--r--docs/maintainers_guide.md121
1 files changed, 100 insertions, 21 deletions
diff --git a/docs/maintainers_guide.md b/docs/maintainers_guide.md
index 8a009c2..f5408ce 100644
--- a/docs/maintainers_guide.md
+++ b/docs/maintainers_guide.md
@@ -25,7 +25,7 @@ widespread pain, and shouldn't be done lightly. Therefore:
1. In the first place, avoid adding insufficiently thought out, insufficiently
tested features which will later need to be replaced in a
backwards-incompatible manner. See the criteria in README.md.
-2. Given a choice between breaking backwards compatibilty and keeping it, try
+2. Given a choice between breaking backwards compatibility and keeping it, try
to keep backwards compatibility. For example, if adding a new argument to a
function, add it to the end of the argument list, so that existing callers'
positional arguments continue to work.
@@ -40,11 +40,13 @@ widespread pain, and shouldn't be done lightly. Therefore:
In addition, make sure that new code is documented and tested.
-If a PR adds or changes any docstrings, check that Markdown docs in `docs`
-directory are updated; if not, ask the PR author to run
-`./docs/regenerate_docs.sh`. (See
-https://github.com/bazelbuild/bazel-skylib/pull/321 for the proposal to automate
-this.)
+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`).
## Making a New Release
@@ -70,24 +72,33 @@ Name 1, Name 2, Name 3 (alphabetically from `git log`)
--------------------------------------------------------------------------------
-2. Bump `version` in version.bzl to the new version.
+2. Bump `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.
3. Ensure that the commits for steps 1 and 2 have been merged. All further
steps must be performed on a single, known-good git commit.
-4. `bazel build //distribution:bazel-skylib-$VERSION.tar.gz`
-5. Copy the `bazel-skylib-$VERSION.tar.gz` tarball 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/distro/bazel-skylib-$VERSION.tar.gz gs://bazel-mirror/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-$VERSION.tar.gz
-gsutil setmeta -h "Cache-Control: public, max-age=31536000" "gs://bazel-mirror/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-$VERSION.tar.gz"
+4. `bazel build //distribution`
+5. Copy the `bazel-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`):
+
+```bash
+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
```
-6. Run `sha256sum bazel-bin/distro/bazel-skylib-$VERSION.tar.gz`; you'll need
- the checksum for the release notes.
+6. Obtain checksums for release notes:
+
+```bash
+sha256sum bazel-bin/distribution/bazel-skylib-$VERSION.tar.gz
+sha256sum bazel-bin/distribution/bazel-skylib-gazelle-plugin-$VERSION.tar.gz
+````
+
7. Draft a new release with a new tag named $VERSION in github. Attach
- `bazel-skylib-$VERSION.tar.gz` to the release. For the release notes, use
- the CHANGELOG.md entry plus the following template:
+ `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:
--------------------------------------------------------------------------------
@@ -95,20 +106,88 @@ gsutil setmeta -h "Cache-Control: public, max-age=31536000" "gs://bazel-mirror/g
```
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",
],
- sha256 = "$SHA256SUM",
)
+
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
+
bazel_skylib_workspace()
```
+***Additional WORKSPACE setup for the Gazelle plugin***
+
+```starlark
+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](https://github.com/bazelbuild/bazel-skylib/tree/$VERSION).
--------------------------------------------------------------------------------- \ No newline at end of file
+--------------------------------------------------------------------------------
+
+8. Obtain [Subresource Integrity](https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description)
+ format checksums for bzlmod:
+
+```bash
+echo -n sha256-; cat bazel-bin/distribution/bazel-skylib-$VERSION.tar.gz | openssl dgst -sha256 -binary | base64
+echo -n sha256-; cat bazel-bin/distribution/bazel-skylib-gazelle-plugin-$VERSION.tar.gz | openssl dgst -sha256 -binary | base64
+```
+
+9. Create a PR at [Bazel Central Registry](https://github.com/bazelbuild/bazel-central-registry)
+ to update the registry's versions of bazel_skylib and
+ bazel_skylib_gazelle_plugin.
+
+ Use https://github.com/bazelbuild/bazel-central-registry/pull/403 as the
+ model; you will need to update `modules/bazel_skylib/metadata.json` and
+ `modules/bazel_skylib_gazelle_plugin/metadata.json` to list the new version
+ in `versions`, and create new $VERSION subdirectories for the updated
+ modules, using the latest existing version subdirectories as the guide. Use
+ Subresource Integrity checksums obtained above in the new `source.json`
+ files.
+
+ Ensure that the MODULE.bazel files you add in the new $VERSION
+ subdirectories exactly match the MODULE.bazel file packaged in
+ bazel-skylib-$VERSION.tar.gz and bazel-skylib-gazelle-plugin-$VERSION.tar.gz
+ tarballs - or buildkite checks will fail.
+
+10. Once the Bazel Central Registry PR is merged, insert in the release
+ description after the WORKSPACE setup section:
+
+--------------------------------------------------------------------------------
+
+**MODULE.bazel setup**
+
+```starlark
+bazel_dep(name = "bazel_skylib", version = "$VERSION")
+```
+
+And for the Gazelle plugin:
+
+```starlark
+bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "$VERSION", dev_dependency = True)
+```
+
+--------------------------------------------------------------------------------