= 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]


