| --- |
| title: "Publishing Gerrit Documentation" |
| permalink: publishing.html |
| hide_sidebar: true |
| hide_navtoggle: true |
| toc: true |
| --- |
| |
| There is a build job `homepage` which automatically updates the plugin page, |
| generates the homepage and deploys the new version. |
| |
| The remainder of this topic describes how to manually publish updates to the Gerrit website. |
| |
| ## Prerequisites |
| |
| 1. [Install Docker](https://docs.docker.com/install/) |
| 1. [Install Docker Compose](https://docs.docker.com/compose/install/) |
| 1. [Prepare your system](https://firebase.google.com/docs/hosting/deploying#section-hosting-setup) |
| to host content on Firebase. |
| 1. Have the appropriate permissions to the Gerrit Code Review project on the |
| Google Cloud Platform. |
| |
| ## Cloning the repository |
| |
| The repository that contains the Gerrit website is called |
| [homepage](https://gerrit-review.googlesource.com/q/project:homepage). |
| |
| To clone the repository, run the following command. |
| |
| ```bash |
| git clone https://gerrit.googlesource.com/homepage && \ |
| (cd homepage && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg \ |
| https://gerrit-review.googlesource.com/tools/hooks/commit-msg ; \ |
| chmod +x `git rev-parse --git-dir`/hooks/commit-msg) |
| ``` |
| |
| ## Building the site |
| |
| In these steps, you build the site on your local machine. |
| |
| The output files for the site are stored in the `_site` directory. This |
| directory is not stored in the repository. |
| |
| **To build the site:** |
| |
| 1. Navigate to the root of the homepage repository. |
| 1. Type the following command: |
| |
| ```bash |
| docker-compose up |
| ``` |
| |
| 1. If that command fails, try these, with caution: |
| |
| ```bash |
| docker-compose down && \ |
| git clean -fdx && \ |
| docker-compose up |
| ``` |
| |
| The docker file is configured to build the site and serve it on a local staging |
| server. To access the staging server, navigate to the following URL in your |
| browser: |
| |
| ```bash |
| http://localhost:4000 |
| ``` |
| |
| To build the site without staging it, type the following command: |
| |
| ```bash |
| docker run -v $(pwd):/site bretfisher/jekyll-serve jekyll build |
| ``` |
| |
| ## Updating the plugins page |
| |
| Updating the `plugins.md` file requires to run the `plugins.py` |
| script. The script depends on the `pygerrit2` library, which can |
| be installed using the provided `pipenv` environment: |
| |
| ```bash |
| cd homepage |
| pipenv install --dev |
| ``` |
| |
| Running `plugins.py` may require using either one of its `-a` or `-n` |
| options, depending on CI authentication: |
| |
| ```bash |
| cd homepage |
| pipenv run python tools/plugins.py |
| docker-compose up |
| (browse to) http://localhost:4000/plugins.html |
| ``` |
| |
| The resulting `plugins.md` file lends the browsed `plugins.html` page. |
| |
| If changes are made to the `plugins.py` script, check for coding errors and |
| style violations with `flake8`, and format the code with `black`: |
| |
| ```bash |
| pipenv run flake8 tools/plugins.py |
| pipenv run black tools/plugins.py |
| ``` |
| |
| Both of these tools are also provided in the pipenv environment. |
| |
| ## Deploying the site |
| |
| **Note:** If this is your first time running Firebase on this machine, you need |
| to provide authentication credentials. For more information, see |
| [Appendix: Logging in to Firebase](#appendix-logging-in-to-firebase). |
| |
| **To deploy the site:** |
| |
| 1. Make sure you have proper ownership of the output files. |
| |
| ```bash |
| sudo chown -R $( id -u $USER ):$( id -g $USER ) _site/ |
| ``` |
| |
| 1. Type the following command from the root of the repository: |
| |
| ```bash |
| firebase deploy |
| ``` |
| |
| In a few moments, the site is updated. You can view the deployment in the |
| Firebase console. |
| |
| ## Rolling back to another deployment |
| |
| 1. Open the Firebase console. |
| |
| 1. From the left navigation pane, click **Hosting**. |
| |
| 1. In Deployment History, select the deployment you'd like to return to. |
| |
| 1. Click the More button (three vertical dots). |
| |
| 1. Select **Rollback**. |
| |
| ## Writing content |
| |
| This section describes how to add new content to the documentation. |
| |
| **Note:** For complete documentation on the site template and how to create |
| content, see [Getting started with the Documentation Theme for Jekyll](http://idratherbewriting.com/documentation-theme-jekyll/index.html). |
| |
| 1. Using the text editor of your choice, create an empty document. |
| |
| 1. At the top of the document, add the following text block: |
| |
| ```markdown |
| --- |
| title: [TITLE_NAME] |
| permalink: [FILENAME] |
| --- |
| ``` |
| |
| Where: |
| |
| * TITLE_NAME is the title of the topic. |
| * FILENAME is the output name of the file. This name MUST be unique. |
| |
| 1. Author your topic using the Kramdown Markdown. |
| |
| 1. Save the file in the following directory: |
| |
| ```bash |
| path/to/repository/jekyll-source/pages/gerrit |
| ``` |
| |
| This template supports a few additional extensions for authoring content. Some |
| that you might find useful include: |
| |
| * [Notes and warnings](http://idratherbewriting.com/documentation-theme-jekyll/mydoc_alerts.html) |
| * [Navtabs](http://idratherbewriting.com/documentation-theme-jekyll/mydoc_navtabs.html) |
| |
| For more information on how the documentation is structured and the syntax it |
| supports, see the [template documentation](http://idratherbewriting.com/documentation-theme-jekyll/). |
| |
| ### Writing blog posts |
| |
| The Gerrit website supports adding blog posts. Users can view a list of |
| current blogposts by click the **News** link in the navigation bar. |
| |
| To create a blog post: |
| |
| 1. Create a new markdown file. The name of the file must use this format: |
| |
| ```bash |
| YYYY-MM-DD-[permalink].md |
| ``` |
| |
| Where `[permalink]` is a descriptive name of the file and `YYYY-MM-DD` is |
| the date that will be shown on the post. Posts will be listed on the index |
| in chronological order; posts with a date in the future will not be rendered |
| or appear in the index until that date. |
| |
| 1. Add the following to the top of the blog post: |
| |
| ```markdown |
| --- |
| title: [TITLE] |
| tags: [TAGS] |
| keywords: [KEYWORDS] |
| permalink: [FILENAME].html |
| summary: [SUMMARY] |
| hide_sidebar: true |
| hide_navtoggle: true |
| toc: true |
| --- |
| ``` |
| |
| Where: |
| |
| * `[TITLE]` is the title of the blog post |
| * `[TAGS]` is an optional space-delimited list of tags |
| * `[KEYWORDS]` is an optional space-delimited list of keywords |
| * `[FILENAME]` is the name of the file |
| * `[SUMMARY]` is a one- to two- sentence description of the post |
| |
| 1. Save the post in the `_posts` directory or the `_drafts` directory. |
| |
| For posts to be published immediately, save the new file in the `_posts` directory. |
| |
| For posts that are still work in progress, or to be written iteratively by |
| multiple authors across several commits, save the new file in the `_drafts` |
| directory. When the post is complete, move the file into the `_posts` directory. |
| |
| 1. Save any images in the top-level `images` directory. |
| |
| ## Appendix: Logging in to Firebase |
| |
| If you have never used Firebase before, you need to perform these steps: |
| |
| 1. [Install the Firebase CLI](https://firebase.google.com/docs/hosting/quickstart#install-the-firebase-cli). |
| |
| 1. [Log in to Firebase](https://firebase.google.com/docs/hosting/quickstart#access-your-firebase-projects). |
| |
| **Note:** After you provide your credentials, you are returned to <http://localhost> |
| to confirm your authentication. If you cannot access localhost for some reason, |
| you can run this command instead: `firebase login --no-localhost`. |
| |
| 1. [Initialize Firebase](https://firebase.google.com/docs/hosting/quickstart#initialize-your-site). |
| |
| **Note:** When you initialize Firebase, specify `_site` as the root |
| directory. Accept the defaults for all other options. |
| |
| ## Appendix: Jekyll Template |
| |
| Jekyll sites use a variety of templates. For Gerrit, we have selected |
| [this template](http://idratherbewriting.com/documentation-theme-jekyll/). We |
| chose this template because it has robust support for documentation. For |
| example, this template supports: |
| |
| * A left navigation system that includes sections that can expand and collapse |
| |
| * Support for tabs within content, which makes it easier to display multiple |
| options for users (for instance, displaying GWT or PolyGerrit instructions) |
| |
| * A simple, but extensible Search box |
| |
| As the theme is already included in the repository for the Gerrit site, you |
| should not need to install it when making changes to your content. However, to |
| learn about the template and its features, use the following link: |
| |
| [http://idratherbewriting.com/documentation-theme-jekyll/](http://idratherbewriting.com/documentation-theme-jekyll/) |