blob: 8ab567e12ebaea9466ff2226c83636956a60c461 [file] [edit]
---
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
![Alt text](/contribute/images/my-diagram.png)
```
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).