|  | = Apache James website | 
|  |  | 
|  | This repository is used for storing (some) content for https://james.apache.org[Apache James] website. | 
|  |  | 
|  | It's also used to build and publish the website. | 
|  |  | 
|  |  | 
|  | == How to build the website | 
|  |  | 
|  | We use https://antora.org[Antora] as a tool to manage and generate the website. | 
|  | We use https://gradle.org[Gradle] as a tool to drive / automate the tasks for generating, aggregating and publishing the website. | 
|  |  | 
|  |  | 
|  | === Why Antora? | 
|  |  | 
|  | Antora lets us aggregate multiple documentation sources, across multiple versions and publish them as a single website. | 
|  | Documentation for each Apache James component is kept and versioned alongside the code for it. | 
|  |  | 
|  | === Why Gradle? | 
|  |  | 
|  | Gralde allows us to autoamte the tasks that we do when publishing a website. | 
|  | We write gradle tasks for building and publishing the website. | 
|  | We can run those tasks locally and inside our CI infrastructure: https://builds.apache.org[Apache Builds]. | 
|  |  | 
|  | More specifically, we use Gradle to: | 
|  |  | 
|  | * Download and install a specific version of https://nodejs.org[NodeJS] using https://github.com/node-gradle/gradle-node-plugin[Gradle Node Plugin] | 
|  | * Install a local version of Antora | 
|  | * Use a Gradle task to call build the website with Antora | 
|  |  | 
|  | By using this specific flow, you only need `git`, `Java` and shell access to build the website. | 
|  | All other dependencies are installed automatically by Gradle. | 
|  | Even Gradle is downloaded and installed using the Gradle wrapper script. | 
|  |  | 
|  |  | 
|  | == How to build the website | 
|  |  | 
|  | [source,bash] | 
|  | ---- | 
|  | # To build the website run | 
|  | ./gradlew clean build | 
|  | # The website is located here | 
|  | cd doc-sites/build/site | 
|  | ---- | 
|  |  | 
|  |  | 
|  | == How to customize the theme for the documentaion | 
|  |  | 
|  | The documentation website is based on https://antora.org[Antora]. | 
|  | We have added https://gitlab.com/antora/antora-ui-default/[antora-ui-default] project as a git subtree under `antora-ui`. | 
|  |  | 
|  | `./gradlew :antora-ui:build` will assemble the `antora-ui/build/ui-bundle.zip` archive required for the website. | 
|  | All the steps are automated as Gradle tasks in that project. | 
|  | All you have to do is change the css and html files and then rebuild the project. | 
|  |  | 
|  | The antora-ui project has a preview mode: `/.gradlew gulpPreviewTheme` | 
|  |  | 
|  |  | 
|  | [source,shell] | 
|  | ---- | 
|  | # antora-ui-default was added like this. You should be able to pull some changes from upstream | 
|  | git subtree add --prefix antora-ui https://gitlab.com/antora/antora-ui-default.git master --squash | 
|  | ---- | 
|  |  | 
|  |  | 
|  | === Related links | 
|  |  | 
|  | * https://medium.com/@v/git-subtrees-a-tutorial-6ff568381844[A git subtree tutorial]. | 
|  | * https://docs.antora.org/antora/2.3/playbook/configure-ui/[Antora UI keys] | 
|  |  | 
|  |  |