= Solr Ref Guide
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

This is the source for the Solr Reference Guide.

Raw content is stored in Asciidoc (`.adoc`) formatted files in the `src/` directory.

== Prerequisites for Building
These files are processed with AsciiDoctor in 2 different ways:

* HTML version, using Jekyll:
** `Ruby` (v2.3 or higher)
** The following gems must be installed:
*** `jekyll`: v3.5, not v4.x.
Use `gem install jekyll --force --version 3.5.0` to force install of v3.5.0.
*** `jekyll-asciidoc`: v2.1 or higher; latest version (3.0.0) is fine.
Use `gem install jekyll-asciidoc` to install.
*** `slim`: v3.0 or higher; latest version (4.0.1) is fine.
Use `gem install slim` to install.
*** `tilt`: v1.0 or higher; latest version (2.0.10) is fine.
Use `gem install tilt` to install.
*** `concurrent-ruby`: v1.0 or higher; latest version (1.1.5) is fine.
Use `gem install concurrent-ruby` to install.


== Building the Guide
For details on building the ref guide, see `ant -p`.

There are currently four available targets:

* `ant default`: builds the HTML versions of the Solr Ref Guide.
* `ant build-site`: also builds the HTML version.
* `ant clean`: removes the `../build/solr-ref-guide` directory.

The output of all builds will be located in `../build/solr-ref-guide`.

== Key Directories
Key directories to be aware of:

* `src` - where all human edited `*.adoc` files related to the Guide live, as well as various configuration, theme, and template files.
* `tools` - custom Java code for parsing metadata in our `src/*.adoc` files to produce some `_data/` files for site navigation purposes.
* `../build/solr-ref-guide/content` - a copy of the `src` dir generated by ant where:
** `*.template` files are processed to replace ant properties with their runtime values
** some `../build/solr-ref-guide/content/_data` files are generated by our java tools based header attributes from each of the `*.adoc` files
* `../build/solr-ref-guide/html-site` - HTML generated version of the ref guide

See the additional documentation in `src/metadocs` for more information about how to edit files, build for releases, or modifying any Jekyll templates.
