| --- | |
| title: "Docs contribution workflow" | |
| --- | |
| This page guides you through contributing to the Bazel | |
| documentation, from a one-line typo fix to adding a new page. For style | |
| guidance, see the [Bazel docs style guide](/contribute/docs-style-guide). | |
| ## Bazel docs structure {#structure} | |
| The source of truth for Bazel documentation is `bazelbuild/bazel`, where docs | |
| live alongside the code. `bazel-contrib/bazel-docs` is the hosting and pipeline | |
| layer: it syncs content from `bazelbuild/bazel`, generates PR previews, and | |
| holds Mintlify configuration. **Content changes always go to `bazelbuild/bazel`.** | |
| | Repository | What it contains | | |
| | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | |
| | [`bazelbuild/bazel`](https://github.com/bazelbuild/bazel) | All doc content (`docs/` folder). This is where you make changes. | | |
| | [`bazel-contrib/bazel-docs`](https://github.com/bazel-contrib/bazel-docs) | Hosting pipeline. Syncs from `bazelbuild/bazel`, generates PR previews, and deploys to [preview.bazel.build](https://preview.bazel.build). | | |
| {/* TODO: Update preview.bazel.build to bazel.build once the domain cutover happens. Tracked in https://github.com/bazel-contrib/bazel-docs/issues/453 */} | |
| Bazel docs use [MDX format](https://mdxjs.com/), Markdown with a YAML | |
| frontmatter block at the top. Every page must start with: | |
| ``` | |
| --- | |
| title: 'Your Page Title' | |
| --- | |
| ``` | |
| ## Prerequisites {#prerequisites} | |
| Before you start, you need: | |
| - A [GitHub account](https://github.com) | |
| - A fork of [`bazelbuild/bazel`](https://github.com/bazelbuild/bazel) | |
| - [Git](https://git-scm.com/) | |
| - The [Mintlify CLI](https://www.mintlify.com/docs/cli/install) for local preview. | |
| ## Make a minor change {#quick-fix} | |
| For small isolated changes, such as a typo, broken link, phrasing tweaks, you can edit directly in the GitHub web UI without | |
| cloning anything. | |
| 1. Find the file in | |
| [`bazelbuild/bazel/docs/`](https://github.com/bazelbuild/bazel/tree/master/docs) | |
| on GitHub. | |
| 2. To edit the file, click the **pencil icon** in the top-right corner. | |
| 3. Make your edit. | |
| 4. Click **Commit changes...**, provide a commit message, and click **Propose changes"**. | |
| 5. GitHub prompts you to open a pull request. Set the base branch to | |
| **`master`** and click **Create pull request** it. | |
| ## Update existing content {#updating-content} | |
| Use this workflow for anything larger than a typo, such as rewording a section, | |
| correcting outdated information, or adding a paragraph to an existing page. | |
| ### Set up locally | |
| Fork [`bazelbuild/bazel`](https://github.com/bazelbuild/bazel) on GitHub first, then clone the repo and add the upstream remote: | |
| ```bash | |
| git clone https://github.com/YOUR_USERNAME/bazel.git | |
| cd bazel | |
| git remote add upstream https://github.com/bazelbuild/bazel.git | |
| ``` | |
| ### Make and preview your changes | |
| Check out a new branch off of `master`. | |
| ```bash | |
| git fetch upstream | |
| git checkout -b my-doc-fix upstream/master | |
| ``` | |
| Edit the file in `docs/`, for example, `docs/concepts/labels.mdx`. | |
| To preview locally, you need a local copy of `bazel-contrib/bazel-docs`: | |
| ```bash | |
| # One-time setup | |
| git clone https://github.com/bazel-contrib/bazel-docs.git | |
| cd bazel-docs | |
| ``` | |
| Copy your changed file(s) into the local `bazel-docs` mirror to preview them: | |
| ```bash | |
| cp ~/path/to/bazel/docs/concepts/labels.mdx concepts/labels.mdx | |
| # Start the local dev server | |
| mintlify dev | |
| ``` | |
| Open [http://localhost:3000](http://localhost:3000) to render your changes. | |
| ### Commit and open a PR | |
| Add, commit, and push your changes: | |
| ```bash | |
| git add --all # stage all changes | |
| git commit -m "docs: your commit msg here" | |
| git push origin my-doc-fix # push to GitHub | |
| ``` | |
| Open a pull request on GitHub from your fork to **`bazelbuild/bazel` master**. | |
| ## Add a new section to an existing page {#new-section} | |
| Follow the same workflow as [Update existing content](#updating-content). A few things to keep in mind: | |
| **Add a heading anchor ID.** Every heading should have an explicit `{#id}` so | |
| URLs to that section stay stable even if the heading text changes: | |
| ```md | |
| ## My new section {#my-new-section} | |
| ``` | |
| **Use sentence case for headings.** Write "Getting started" not | |
| "Getting Started". | |
| **Keep the heading hierarchy consistent.** Pages use H2 (`##`) for top-level | |
| sections and H3 (`###`) for subsections. Don't skip levels. | |
| **Update the page if there's a table of contents or "On this page" intro.** | |
| Some pages have an introductory list of topics. Add your section there too. | |
| ## Add a new page {#new-page} | |
| 1. Create the MDX file in the appropriate `docs/` subdirectory. | |
| Every file must start with frontmatter: | |
| ``` | |
| --- | |
| title: 'Your Page Title' | |
| --- | |
| ``` | |
| 2. Add your page to the sidebar navigation. This requires a separate change | |
| in `bazel-contrib/bazel-docs`. See | |
| [Update the docs navigation](/contribute/docs-navigation) for instructions. | |
| For an initial PR, you can skip this and ask a maintainer to help. | |
| 3. Follow the same branch, commit, and PR steps as [Update existing content](#updating-content). | |
| ## MDX basics for doc contributors {#mdx-basics} | |
| MDX is mostly standard Markdown with a few differences. | |
| ### Self-closing HTML tags {#self-closing-tags} | |
| JSX requires void elements to be self-closing. Use `<img ... />` and | |
| `<br />`, not `<img ...>` or `<br>`. | |
| ### Links {#links} | |
| Use root-relative paths for internal links. Don't include the `.mdx` extension in the links: | |
| ```md | |
| [labels](/concepts/labels) | |
| [style guide](/contribute/docs-style-guide) | |
| ``` | |
| ### Code blocks {#code-blocks} | |
| Always specify a language for syntax highlighting: | |
| ````md | |
| ```bash | |
| bazel build //my/example:app | |
| ``` | |
| ```` | |
| Common languages used in Bazel docs: `bash`, `python`, `starlark`, `json`, | |
| `posix-terminal`. | |
| ### Images {#images} | |
| Place images in the `images/` subdirectory alongside your MDX file and | |
| reference them with a root-relative path: | |
| ```md | |
|  | |
| ``` | |
| Use self-closing syntax: Markdown image syntax does not require the trailing `/>`, | |
| but `<img>` tags must self-close when you use them directly: | |
| ```md | |
| <img src="/contribute/images/my-diagram.png" alt="Alt text" width="400" /> | |
| ``` | |
| ### Notes and callouts {#callouts} | |
| Mintlify supports callout components. Use them for important warnings or tips: | |
| ```md | |
| <Note> | |
| This is a note. | |
| </Note> | |
| <Warning> | |
| This is a warning. | |
| </Warning> | |
| ``` | |
| For a full list of Mintlify formatting components (tabs, accordions, cards, | |
| and more), see the [Mintlify text formatting docs](https://mintlify.com/docs/create/text). | |
| ## What to expect after submitting {#after-submitting} | |
| - The Google CLA bot checks that you've signed the | |
| [Contributor License Agreement](https://cla.developers.google.com/). You | |
| only need to do this once. | |
| - CI runs a docs validation check. | |
| - A maintainer reviews your PR and might request edits. Response times vary. | |
| - Once approved, a maintainer merges your changes to `master`. They appear on | |
| the live site after the next sync. | |
| <Tip> | |
| If your new page does not appear in the sidebar of the PR preview, use the | |
| black file-changes icon in the preview to navigate directly to it. New pages | |
| do not appear in the sidebar until you update the navigation in | |
| `bazel-contrib/bazel-docs`. | |
| </Tip> | |
| ## Get help {#getting-help} | |
| - Join the [Bazel community Slack](https://slack.bazel.build) and ask in the | |
| `#documentation` channel. This is the best place for quick questions about | |
| the docs platform or contribution process. | |
| - File an issue in [`bazelbuild/bazel`](https://github.com/bazelbuild/bazel/issues) | |
| with the label `type: documentation`. | |
| - For questions about the docs platform, open an | |
| issue in [`bazel-contrib/bazel-docs`](https://github.com/bazel-contrib/bazel-docs/issues). |