blob: 1e271a55d89fe1005b4abce1606995cc4ad659be [file] [log] [blame] [view]
# Stardoc Maintainer's Guide
## Updating Proto and Bundled Jar
Stardoc proto definition is vendored from the Bazel source tree at
https://github.com/bazelbuild/bazel/tree/master/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
Stardoc legacy extractor's source code lives in the Bazel source tree at
https://github.com/bazelbuild/bazel/tree/master/src/main/java/com/google/devtools/build/skydoc
For simplicity of use and building, Stardoc bundles a pre-built jar for the
legacy extractor which is built from Bazel source: `stardoc_binary.jar`
(emits protobuf documentation format).
To update the proto definition and jar:
1. Update `io_bazel` repo commit in `WORKSPACE`. Update transitive deps in
`WORKSPACE` as needed.
2. run `update-release-binary.sh`
## Making a New Release
1. Verify tests. Verify that dependencies are consistent between `setup.bzl` +
`WORKSPACE` and `MODULE.bazel` (but note that `MODULE.bazel` does not
include dependencies on `io_bazel` and its transitive deps).
2. Update `CHANGELOG.md` at the top. You may want to use the following \
template:
--------------------------------------------------------------------------------
## Release $VERSION
**New Features**
- Feature
- Feature
**Incompatible Changes**
- Change
- Change
**Contributors**
Name 1, Name 2, Name 3 (alphabetically)
--------------------------------------------------------------------------------
3. Bump `version` in `version.bzl` *and* `MODULE.bazel` to the new version.
4. Ensure that the commits for steps 1-3 have been merged. All further steps
must be performed on a single, known-good git commit.
5. `bazel build //distro`
6. Copy the `stardoc-$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`):
```bash
gsutil cp bazel-bin/distro/stardoc-$VERSION.tar.gz gs://bazel-mirror/github.com/bazelbuild/stardoc/releases/download/$VERSION/stardoc-$VERSION.tar.gz
gsutil setmeta -h "Cache-Control: public, max-age=31536000" "gs://bazel-mirror/github.com/bazelbuild/stardoc/releases/download/$VERSION/stardoc-$VERSION.tar.gz"
```
7. Obtain checksum for release notes:
```bash
sha256sum bazel-bin/distro/stardoc-$VERSION.tar.gz
```
8. Draft a new release with a new tag named $VERSION in github. Attach
`stardoc-$VERSION.tar.gz` to the release. For the release notes, use the
CHANGELOG.md entry plus the following template:
--------------------------------------------------------------------------------
**WORKSPACE setup**
To use Stardoc, add the following to your `WORKSPACE` file:
```starlark
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "io_bazel_stardoc",
sha256 = "$SHA256SUM",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/stardoc/releases/download/$VERSION/stardoc-$VERSION.tar.gz",
"https://github.com/bazelbuild/stardoc/releases/download/$VERSION/stardoc-$VERSION.tar.gz",
],
)
load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories")
stardoc_repositories()
load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
rules_jvm_external_deps()
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()
load("@io_bazel_stardoc//:deps.bzl", "stardoc_external_deps")
stardoc_external_deps()
load("@stardoc_maven//:defs.bzl", stardoc_pinned_maven_install = "pinned_maven_install")
stardoc_pinned_maven_install()
```
The sequence of function calls and load statements after the `io_bazel_stardoc`
repository definition ensures that this repository's dependencies are loaded
(each function call defines additional repositories for Stardoc's dependencies,
which are then used by subsequent load statements).
Note that `WORKSPACE` files are sensitive to the order of dependencies. If,
after updating to a newer version of Stardoc, you encounter "not a valid
maven_install.json file" or other repository fetch errors (example: #186), try
moving the Stardoc dependency block above or below other dependencies in your
`WORKSPACE` file.
<!-- Uncomment after updating Stardoc in Bazel Central Registry
**MODULE.bazel setup**
```starlark
bazel_dep(name = "stardoc", version = "$VERSION")
```
For compatibility with `WORKSPACE` setup, add `repo_name = "io_bazel_stardoc"`
to the `bazel_dep` call.
-->
**Using the rules**
See [the source](https://github.com/bazelbuild/stardoc/tree/$VERSION).
--------------------------------------------------------------------------------
9. Obtain [Subresource Integrity](https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description)
format checksum for bzlmod:
```bash
echo -n sha256-; cat bazel-bin/distro/stardoc-$VERSION.tar.gz | openssl dgst -sha256 -binary | base64
```
10. Create a PR at [Bazel Central Registry](https://github.com/bazelbuild/bazel-central-registry)
to update the registry's versions of Stardoc.
Use https://github.com/bazelbuild/bazel-central-registry/pull/677 as the
model; you will need to update `modules/stardoc/metadata.json` to list the
new version in `versions`, and create new $VERSION subdirectories for the
updated module, using the latest existing version subdirectories as the
guide. Use Subresource Integrity checksums obtained above in the new
`source.json` file.
Ensure that the `MODULE.bazel` file you add in the new $VERSION
subdirectory exactly matches the `MODULE.bazel` file packaged in the
stardoc-$VERSION.tar.gz tarball - or buildkite checks will fail.
11. Once the Bazel Central Registry PR is merged, uncomment the MODULE.bazel
block in the release description.