geode-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dbar...@apache.org
Subject [geode-native] branch develop updated: GEODE-7303: Simplify native client UG builds (#538)
Date Fri, 18 Oct 2019 21:05:49 GMT
This is an automated email from the ASF dual-hosted git repository.

dbarnes pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git


The following commit(s) were added to refs/heads/develop by this push:
     new eb011b8  GEODE-7303: Simplify native client UG builds (#538)
eb011b8 is described below

commit eb011b8a3c88291cc356ce1fb72d906e3de9a6ce
Author: Alberto Bustamante Reyes <alb3rtobr@users.noreply.github.com>
AuthorDate: Fri Oct 18 23:05:42 2019 +0200

    GEODE-7303: Simplify native client UG builds (#538)
    
    - Now each user guide has its separated book directory
    - The docker-based solution of GEODE-7272 has been applied to
      each user guide
---
 docs/README.md                                     | 103 +---------
 docs/docker/Dockerfile                             |  26 +--
 docs/docker/README.md                              |  34 ++++
 docs/docker/build-docs.sh                          |  69 +++++++
 docs/docker/build-image-common.sh                  |  63 +++++++
 docs/docker/view-docs.sh                           |  59 ++++++
 .../.gitignore                                     |   0
 .../Gemfile                                        |   0
 docs/geode-native-book-cpp/Gemfile.lock            | 207 +++++++++++++++++++++
 .../config.yml}                                    |   0
 .../source/archive_menus/_default.erb              |   0
 .../source/images/Apache_Geode_logo_symbol.png     | Bin
 .../images/Apache_Geode_logo_symbol_white.png      | Bin
 .../master_middleman/source/images/favicon.ico     | Bin
 .../master_middleman/source/javascripts/book.js    |   0
 .../source/javascripts/waypoints/context.js        |   0
 .../source/javascripts/waypoints/group.js          |   0
 .../javascripts/waypoints/noframeworkAdapter.js    |   0
 .../source/javascripts/waypoints/sticky.js         |   0
 .../source/javascripts/waypoints/waypoint.js       |   0
 .../source/layouts/_book-footer.erb                |   0
 .../master_middleman/source/layouts/_header.erb    |   0
 .../source/layouts/_local-header.erb               |   0
 .../master_middleman/source/layouts/_title.erb     |   0
 .../source/stylesheets/book-styles.scss            |   0
 .../stylesheets/partials/_book-base-values.scss    |   0
 .../source/stylesheets/partials/_book-vars.scss    |   0
 .../source/subnavs/geode-nc-nav.erb                |   0
 .../redirects.rb}                                  |   0
 .../.gitignore                                     |   0
 .../Gemfile                                        |   0
 docs/geode-native-book-dotnet/Gemfile.lock         | 207 +++++++++++++++++++++
 .../config.yml                                     |   0
 .../source/archive_menus/_default.erb              |   0
 .../source/images/Apache_Geode_logo_symbol.png     | Bin
 .../images/Apache_Geode_logo_symbol_white.png      | Bin
 .../master_middleman/source/images/favicon.ico     | Bin
 .../master_middleman/source/javascripts/book.js    |   0
 .../source/javascripts/waypoints/context.js        |   0
 .../source/javascripts/waypoints/group.js          |   0
 .../javascripts/waypoints/noframeworkAdapter.js    |   0
 .../source/javascripts/waypoints/sticky.js         |   0
 .../source/javascripts/waypoints/waypoint.js       |   0
 .../source/layouts/_book-footer.erb                |   0
 .../master_middleman/source/layouts/_header.erb    |   0
 .../source/layouts/_local-header.erb               |   0
 .../master_middleman/source/layouts/_title.erb     |   0
 .../source/stylesheets/book-styles.scss            |   0
 .../stylesheets/partials/_book-base-values.scss    |   0
 .../source/stylesheets/partials/_book-vars.scss    |   0
 .../source/subnavs/geode-nc-nav.erb                |   0
 .../redirects.rb                                   |   0
 docs/geode-native-book/config.yml.DOTNET           |  49 -----
 docs/geode-native-book/redirects.rb.DOTNET         |  25 ---
 docs/{docker => manual-build}/Dockerfile           |   0
 docs/manual-build/README.md                        |  68 +++++++
 56 files changed, 719 insertions(+), 191 deletions(-)

diff --git a/docs/README.md b/docs/README.md
index 6ac1cec..a226b43 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -2,110 +2,17 @@
 
 This document contains instructions for building and viewing the Apache Geode Native Client User Guides.
 
-- [About](#about)
-- [Bookbinder Usage](#bookbinder-usage)
-- [Docker Setup](#docker-setup)
-- [Building the Documentation](#building-the-documentation)
-
 <a name="about"></a>
 ## About
 
 The Geode-Native repository provides the full source for the Apache Geode Native Client User Guides in markdown format (see _geode-project-dir_/geode-docs/CONTRIBUTE.md for more information on how to use markdown in this context). Users can build the markdown into an HTML user guide using [Bookbinder](https://github.com/pivotal-cf/bookbinder) and the instructions below.
 
-The User Guide can be produced in two versions: one for the .NET native client, the other for the C++ native client. You specify which version to build by copying two language-specific configuration files, each to its generically-named counterpart, then running the Bookbinder build.
-
-For example, to build the .NET version of the Native Client User Guide, first copy the DOTNET configuration files to their generically-named counterparts:
-
-```
-cd geode-native-book
-cp config.yml.DOTNET config.yml
-cp redirects.rb.DOTNET redirects.rb
-```
-Then run Bookbinder to create the guide.
-
-Similarly, to generate the C++ Native Client User Guide, first copy the CPP configuration files:
-
-```
-cd geode-native-book
-cp config.yml.CPP config.yml
-cp redirects.rb.CPP redirects.rb
-```
-Then run Bookbinder to create the guide.
-
-Bookbinder is a Ruby gem that binds  a unified documentation web application from markdown, html, and/or DITA source material. The source material for bookbinder must be stored either in local directories or in GitHub repositories. Bookbinder runs [Middleman](http://middlemanapp.com/) to produce a Rackup app that can be deployed locally or as a web application.
-
-<a name="bookbinder-usage"></a>
-## Bookbinder Usage
-
-Bookbinder is meant to be used from within a project called a **book**. The book includes a configuration file that describes which documentation repositories to use as source materials. Bookbinder provides a set of scripts to aggregate those repositories and publish them to various locations.
-
-For Geode Native Client, a preconfigured **book** is provided in the directory _geode-native-project-dir_/docs/geode-native-book. The book gathers content from the language-specific directory _geode-native-project-dir_/docs/geode-native-docs-dotnet or geode-native-docs-cpp. You can use this configuration to build an HTML version of the Apache Geode Native Client User Guides on your local system.
-
-<a name="docker-setup"></a>
-## Docker Setup
-
-For ease of use, a Docker image is provided that contains a self-consistent Bookbinder environment. [Install Docker](https://docs.docker.com/install/) if you have not already done so.
-
-<a name="building-the-documentation"></a>
-## Building the Documentation
-
-1. Navigate to the directory that contains the Dockerfile and run the `docker build` command to create the Bookbinder-enabled Docker image:
-
-    ```bash
-    $ cd geode-native/docs/docker
-    $ docker build -t geode-native-userman .
-    ```
-    
-1. Run the Docker image in interactive mode with a command similar to the following:
-
-    ```bash
-    $ docker run -it -p 9292:9292 -p 1234:1234 -v PATH-TO-GEODE-NATIVE/docs:/docs geode-native-userman
-    ```
-
-    where `PATH-TO-GEODE-NATIVE` is the fully-qualified path to the geode-native repo. This brings up the interactive Docker container, with `/` as your current working directory.
-
-1. To build the documentation, `cd` to the book directory:
-
-    ```bash
-    $ cd docs/geode-native-book
-    ```
-
-1. Run `bundle install` to install the dependencies required to build the user guide.
-
-    ```bash
-    $ bundle install
-    ```
-
-1. Copy the language-specific configuration files to their generically-named counterparts. For the .NET book, copy the DOTNET configuration files to their generically-named conterparts:
-
-```
-cd geode-native-book
-cp config.yml.DOTNET config.yml
-cp redirects.rb.DOTNET redirects.rb
-```
-
-Similarly, to generate the C++ Native Client User Guide, first copy the CPP configuration files:
-
-```
-cd geode-native-book
-cp config.yml.CPP config.yml
-cp redirects.rb.CPP redirects.rb
-```
-
-1. Invoke bookbinder to build the user guide. Bookbinder converts the markdown source into HTML, which it puts in the `final_app` directory:
-
-    ```bash
-    $ bundle exec bookbinder bind local
-    ```
-
-1. To start a local website of the Apache Geode Native Client User Guide, navigate to the `final_app` directory and run `rackup`:
+The User Guide can be produced in two versions: one for the .NET native client, the other for the C++ native client.
 
-    ```bash
-    $ cd final_app
-    $ rackup
-    ```
+## Automatic build
 
-    Note: You may be prompted to run `bundle install` to supply any missing components. Do that, then re-try the `rackup` command.
+Documentation can be built and previewed using the utility scripts at [docs/docker](https://github.com/apache/geode-native/tree/develop/docs/docker). These scripts use Docker, removing the requirement of installing Ruby and Bookbinder. They are based on the instructions described in [docs/manual-build](https://github.com/apache/geode-native/tree/develop/manual-build).
 
-   You can now view the local documentation in a browser at <http://localhost:9292>. 
+## Manual build
 
+Documentation can be built in a less-automated way, as described at [docs/manual-build](https://github.com/apache/geode-native/tree/develop/manual-build).
diff --git a/docs/docker/Dockerfile b/docs/docker/Dockerfile
index c062c64..dceadd9 100644
--- a/docs/docker/Dockerfile
+++ b/docs/docker/Dockerfile
@@ -14,24 +14,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM ubuntu:latest
+FROM ruby:2.3.1
 
-RUN apt-get update
-RUN apt-get install -y curl git gnupg2
-RUN gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB || \
-    gpg2 --keyserver hkp://pgp.mit.edu --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB || \
-    gpg2 --keyserver hkp://ha.pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
+LABEL Vendor="Apache Geode"
+LABEL version=unstable
+LABEL maintainer=dev@geode.apache.org
 
-RUN \curl -sSL https://get.rvm.io | bash
-RUN /bin/bash -l -c "rvm requirements"
-RUN /bin/bash -l -c "rvm install 2.3.0"
-RUN /bin/bash -l -c "gem install bundler --no-document -v '=1.16.1'"
-
-RUN /bin/bash -l -c "cp /etc/hosts ~/hosts.new"
-RUN /bin/bash -l -c 'sed -i -E "s/(::1\s)localhost/\1/g" ~/hosts.new'
-
-RUN echo "alias rackup='rackup -o 0.0.0'" >> /etc/profile
-
-EXPOSE 9292
-
-ENTRYPOINT ["/bin/sh", "-c" , "cat ~/hosts.new > /etc/hosts && . /etc/profile && alias rackup='rackup -o 0.0.0.0' && /bin/bash -l" ]
+ADD Gemfile Gemfile
+ADD Gemfile.lock Gemfile.lock
+RUN bundle install
diff --git a/docs/docker/README.md b/docs/docker/README.md
new file mode 100644
index 0000000..a4cbd8e
--- /dev/null
+++ b/docs/docker/README.md
@@ -0,0 +1,34 @@
+# Automatic generation of Apache Geode Native Client User Guides
+This document contains instructions for building and viewing the Apache Geode Native Client User Guides for C++ and .NET languages.
+
+
+## Building the User Guides
+The build-docs.sh script invokes Bookbinder to transform the markdown files to HTML using Docker, which has been provisioned with Bookbinder and Ruby. To build the guide, run the script from a shell prompt:
+
+- For C++ user guide:
+```
+$ ./build-docs.sh cpp
+```
+
+- For .NET user guide:
+```
+$ ./build-docs.sh dotnet
+```
+
+## Viewing the User Guides
+After the HTML files are generated, view-docs.sh can be used to start a webserver and review the documentation.
+
+- For C++ user guide:
+```
+$ ./view-docs.sh cpp
+```
+In a browser, navigate to `http://localhost:9191` to view the user guide.
+
+- For .NET user guide:
+```
+$ ./view-docs.sh dotnet
+```
+In a browser, navigate to `http://localhost:9292` to view the user guide.
+
+
+The other files in this folder (`build-image-common.sh` and `Dockerfile`) are utilities used by `build-docs.sh` and `view-docs.sh`.
diff --git a/docs/docker/build-docs.sh b/docs/docker/build-docs.sh
new file mode 100755
index 0000000..83a7e95
--- /dev/null
+++ b/docs/docker/build-docs.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+# 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.
+
+set -u
+
+if [ "$#" -ne 1 ]; then
+  echo "ERROR: Illegal number of parameters"
+  echo ""
+  echo "Usage: `basename $0` [ cpp | dotnet ]"
+  exit 1
+fi
+LANG=$1
+if [ "${LANG}" != "cpp" ] && [ "${LANG}" != "dotnet" ]
+then
+  echo "ERROR: Incorrect language specified."
+  echo ""
+  echo "Usage: `basename $0` [ cpp | dotnet ]"
+  exit 1
+fi
+SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+
+. $SCRIPT_DIR/build-image-common.sh
+
+DOCS_DIR=${SCRIPT_DIR}/../
+BOOK_DIR=${DOCS_DIR}/geode-native-book-${LANG}
+LOG_FILE=${SCRIPT_DIR}/build-${LANG}-docs-output.txt
+
+echo "Running Bookbinder inside Docker container to generate documentation..."
+echo "  Complete log can be found in ${LOG_FILE}"
+
+docker run -i -t \
+  --rm=true \
+  -w "${BOOK_DIR}" \
+  -v "$PWD:${DOCS_DIR}" \
+  ${IMAGE_NAME}-${USER_NAME} \
+  /bin/bash -c "bundle exec bookbinder bind local &> ${LOG_FILE}"
+
+SUCCESS=$(grep "Bookbinder bound your book into" ${LOG_FILE})
+
+if [[ "${SUCCESS}" == "" ]];then
+  echo "Something went wrong while generating documentation, check log."
+else
+  echo ${SUCCESS}
+fi
+
+docker run -i -t \
+  --rm=true \
+  -w "${BOOK_DIR}" \
+  -v "$PWD:${DOCS_DIR}" \
+  ${IMAGE_NAME}-${USER_NAME} \
+  /bin/bash -c "chown -R ${USER_ID}:${GROUP_ID} ${LOG_FILE} ${BOOK_DIR}/output ${BOOK_DIR}/final_app"
+
+
+popd 1> /dev/null
+
diff --git a/docs/docker/build-image-common.sh b/docs/docker/build-image-common.sh
new file mode 100644
index 0000000..1222c73
--- /dev/null
+++ b/docs/docker/build-image-common.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+# 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.
+
+set -u
+
+export DOCKER_ENV_VERSION="0.1"
+
+SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+
+#Stupid OSX has a different mktemp command
+TMP_DIR=`mktemp -d 2>/dev/null || mktemp -d -t 'geodedocs'`
+
+function cleanup() {
+  rm -rf $TMP_DIR
+}
+
+trap cleanup EXIT
+
+IMAGE_NAME="geode-native/docsbuild:${DOCKER_ENV_VERSION}"
+
+pushd ${TMP_DIR} 1> /dev/null
+cp ${SCRIPT_DIR}/Dockerfile .
+cp ${SCRIPT_DIR}/../geode-native-book-${LANG}/Gemfile* .
+
+echo "Building ${IMAGE_NAME} image..."
+docker build -q -t ${IMAGE_NAME} .
+
+popd 1> /dev/null
+
+if [ "$(uname -s)" == "Linux" ]; then
+  USER_NAME=${SUDO_USER:=$USER}
+  USER_ID=$(id -u "${USER_NAME}")
+  GROUP_ID=$(id -g "${USER_NAME}")
+else # boot2docker uid and gid
+  USER_NAME=$USER
+  USER_ID=1000
+  GROUP_ID=50
+fi
+
+echo "Building ${IMAGE_NAME}-${USER_NAME} image..."
+docker build -q -t "${IMAGE_NAME}-${USER_NAME}" - <<UserSpecificDocker
+FROM ${IMAGE_NAME} 
+RUN groupadd --non-unique -g ${GROUP_ID} ${USER_NAME}
+RUN useradd -g ${GROUP_ID} -u ${USER_ID} -k /root -m ${USER_NAME}
+ENV HOME /home/${USER_NAME}
+UserSpecificDocker
+
+# Go to root
+pushd ${SCRIPT_DIR}/../ 1> /dev/null
diff --git a/docs/docker/view-docs.sh b/docs/docker/view-docs.sh
new file mode 100755
index 0000000..b91ffad
--- /dev/null
+++ b/docs/docker/view-docs.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# 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.
+
+set -e -u
+
+if [ "$#" -ne 1 ]; then
+  echo "ERROR: Illegal number of parameters"
+  echo ""
+  echo "Usage: `basename $0` [ cpp | dotnet ]"
+  exit 1
+fi
+
+LANG=$1
+if [ "${LANG}" != "cpp" ] && [ "${LANG}" != "dotnet" ]
+then
+  echo "ERROR: Incorrect language specified."
+  echo ""
+  echo "Usage: `basename $0` [ cpp | dotnet ]"
+  exit 1
+fi
+
+PORT=9292
+if [ "${LANG}" = "cpp" ]
+then
+  PORT=9191
+fi
+
+SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+
+. $SCRIPT_DIR/build-image-common.sh
+
+DOCS_DIR=${SCRIPT_DIR}/../
+BOOK_DIR=${DOCS_DIR}/geode-native-book-${LANG}
+
+echo "Starting up web server..."
+docker run -i -t \
+  --rm=true \
+  -w "${BOOK_DIR}/final_app/" \
+  -v "$PWD:${DOCS_DIR}" \
+  -p 127.0.0.1:${PORT}:${PORT} \
+  ${IMAGE_NAME}-${USER_NAME} \
+  /bin/bash -c "bundle install; rackup --host 0.0.0.0 -p ${PORT}"
+
+popd 1> /dev/null
+
diff --git a/docs/geode-native-book/.gitignore b/docs/geode-native-book-cpp/.gitignore
similarity index 100%
copy from docs/geode-native-book/.gitignore
copy to docs/geode-native-book-cpp/.gitignore
diff --git a/docs/geode-native-book/Gemfile b/docs/geode-native-book-cpp/Gemfile
similarity index 100%
copy from docs/geode-native-book/Gemfile
copy to docs/geode-native-book-cpp/Gemfile
diff --git a/docs/geode-native-book-cpp/Gemfile.lock b/docs/geode-native-book-cpp/Gemfile.lock
new file mode 100644
index 0000000..8ccdcfc
--- /dev/null
+++ b/docs/geode-native-book-cpp/Gemfile.lock
@@ -0,0 +1,207 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (4.2.11.1)
+      i18n (~> 0.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    ansi (1.5.0)
+    backports (3.15.0)
+    bookbindery (10.1.14)
+      ansi (~> 1.4)
+      css_parser
+      elasticsearch
+      fog-aws (~> 0.7.1)
+      font-awesome-sass (= 4.7.0)
+      git (~> 1.2.8)
+      middleman (= 4.1.10)
+      middleman-compass
+      middleman-livereload
+      middleman-sprockets
+      middleman-syntax (= 2.1.0)
+      nokogiri (= 1.8.2)
+      puma
+      rack-rewrite
+      redcarpet (~> 3.2.3)
+      rouge (!= 1.9.1)
+      therubyracer
+      thor (= 0.19.1)
+    builder (3.2.3)
+    chunky_png (1.3.11)
+    coffee-script (2.4.1)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.12.2)
+    compass (1.0.3)
+      chunky_png (~> 1.2)
+      compass-core (~> 1.0.2)
+      compass-import-once (~> 1.0.5)
+      rb-fsevent (>= 0.9.3)
+      rb-inotify (>= 0.9)
+      sass (>= 3.3.13, < 3.5)
+    compass-core (1.0.3)
+      multi_json (~> 1.0)
+      sass (>= 3.3.0, < 3.5)
+    compass-import-once (1.0.5)
+      sass (>= 3.2, < 3.5)
+    concurrent-ruby (1.1.5)
+    contracts (0.13.0)
+    css_parser (1.7.0)
+      addressable
+    dotenv (2.7.5)
+    elasticsearch (7.3.0)
+      elasticsearch-api (= 7.3.0)
+      elasticsearch-transport (= 7.3.0)
+    elasticsearch-api (7.3.0)
+      multi_json
+    elasticsearch-transport (7.3.0)
+      faraday
+      multi_json
+    em-websocket (0.5.1)
+      eventmachine (>= 0.12.9)
+      http_parser.rb (~> 0.6.0)
+    erubis (2.7.0)
+    eventmachine (1.2.7)
+    excon (0.65.0)
+    execjs (2.7.0)
+    faraday (0.15.4)
+      multipart-post (>= 1.2, < 3)
+    fast_blank (1.0.0)
+    fastimage (2.1.5)
+    ffi (1.11.1)
+    fog-aws (0.7.6)
+      fog-core (~> 1.27)
+      fog-json (~> 1.0)
+      fog-xml (~> 0.1)
+      ipaddress (~> 0.8)
+    fog-core (1.45.0)
+      builder
+      excon (~> 0.58)
+      formatador (~> 0.2)
+    fog-json (1.2.0)
+      fog-core
+      multi_json (~> 1.10)
+    fog-xml (0.1.3)
+      fog-core
+      nokogiri (>= 1.5.11, < 2.0.0)
+    font-awesome-sass (4.7.0)
+      sass (>= 3.2)
+    formatador (0.2.5)
+    git (1.2.9.1)
+    haml (5.1.1)
+      temple (>= 0.8.0)
+      tilt
+    hamster (3.0.0)
+      concurrent-ruby (~> 1.0)
+    hashie (3.6.0)
+    http_parser.rb (0.6.0)
+    i18n (0.7.0)
+    ipaddress (0.8.3)
+    kramdown (1.17.0)
+    libv8 (3.16.14.19)
+    listen (3.0.8)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    memoist (0.16.0)
+    middleman (4.1.10)
+      coffee-script (~> 2.2)
+      compass-import-once (= 1.0.5)
+      haml (>= 4.0.5)
+      kramdown (~> 1.2)
+      middleman-cli (= 4.1.10)
+      middleman-core (= 4.1.10)
+      sass (>= 3.4.0, < 4.0)
+    middleman-cli (4.1.10)
+      thor (>= 0.17.0, < 2.0)
+    middleman-compass (4.0.1)
+      compass (>= 1.0.0, < 2.0.0)
+      middleman-core (>= 4.0.0)
+    middleman-core (4.1.10)
+      activesupport (~> 4.2)
+      addressable (~> 2.3)
+      backports (~> 3.6)
+      bundler (~> 1.1)
+      contracts (~> 0.13.0)
+      dotenv
+      erubis
+      execjs (~> 2.0)
+      fast_blank
+      fastimage (~> 2.0)
+      hamster (~> 3.0)
+      hashie (~> 3.4)
+      i18n (~> 0.7.0)
+      listen (~> 3.0.0)
+      memoist (~> 0.14)
+      padrino-helpers (~> 0.13.0)
+      parallel
+      rack (>= 1.4.5, < 2.0)
+      sass (>= 3.4)
+      servolux
+      tilt (~> 1.4.1)
+      uglifier (~> 3.0)
+    middleman-livereload (3.4.6)
+      em-websocket (~> 0.5.1)
+      middleman-core (>= 3.3)
+      rack-livereload (~> 0.3.15)
+    middleman-sprockets (4.1.1)
+      middleman-core (~> 4.0)
+      sprockets (>= 3.0)
+    middleman-syntax (2.1.0)
+      middleman-core (>= 3.2)
+      rouge (~> 1.0)
+    mini_portile2 (2.3.0)
+    minitest (5.11.3)
+    multi_json (1.13.1)
+    multipart-post (2.1.1)
+    nio4r (2.4.0)
+    nokogiri (1.8.2)
+      mini_portile2 (~> 2.3.0)
+    padrino-helpers (0.13.3.4)
+      i18n (~> 0.6, >= 0.6.7)
+      padrino-support (= 0.13.3.4)
+      tilt (>= 1.4.1, < 3)
+    padrino-support (0.13.3.4)
+      activesupport (>= 3.1)
+    parallel (1.17.0)
+    public_suffix (3.1.1)
+    puma (4.0.1)
+      nio4r (~> 2.0)
+    rack (1.6.11)
+    rack-livereload (0.3.17)
+      rack
+    rack-rewrite (1.5.1)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
+    redcarpet (3.2.3)
+    ref (2.0.0)
+    rouge (1.11.1)
+    sass (3.4.25)
+    servolux (0.13.0)
+    sprockets (3.7.2)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    temple (0.8.1)
+    therubyracer (0.12.3)
+      libv8 (~> 3.16.14.15)
+      ref
+    thor (0.19.1)
+    thread_safe (0.3.6)
+    tilt (1.4.1)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    uglifier (3.2.0)
+      execjs (>= 0.3.0, < 3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bookbindery
+  libv8
+
+BUNDLED WITH
+   1.17.3
diff --git a/docs/geode-native-book/config.yml.CPP b/docs/geode-native-book-cpp/config.yml
similarity index 100%
rename from docs/geode-native-book/config.yml.CPP
rename to docs/geode-native-book-cpp/config.yml
diff --git a/docs/geode-native-book/master_middleman/source/archive_menus/_default.erb b/docs/geode-native-book-cpp/master_middleman/source/archive_menus/_default.erb
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/archive_menus/_default.erb
copy to docs/geode-native-book-cpp/master_middleman/source/archive_menus/_default.erb
diff --git a/docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol.png b/docs/geode-native-book-cpp/master_middleman/source/images/Apache_Geode_logo_symbol.png
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol.png
copy to docs/geode-native-book-cpp/master_middleman/source/images/Apache_Geode_logo_symbol.png
diff --git a/docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol_white.png b/docs/geode-native-book-cpp/master_middleman/source/images/Apache_Geode_logo_symbol_white.png
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol_white.png
copy to docs/geode-native-book-cpp/master_middleman/source/images/Apache_Geode_logo_symbol_white.png
diff --git a/docs/geode-native-book/master_middleman/source/images/favicon.ico b/docs/geode-native-book-cpp/master_middleman/source/images/favicon.ico
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/images/favicon.ico
copy to docs/geode-native-book-cpp/master_middleman/source/images/favicon.ico
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/book.js b/docs/geode-native-book-cpp/master_middleman/source/javascripts/book.js
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/javascripts/book.js
copy to docs/geode-native-book-cpp/master_middleman/source/javascripts/book.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/context.js b/docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/context.js
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/javascripts/waypoints/context.js
copy to docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/context.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/group.js b/docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/group.js
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/javascripts/waypoints/group.js
copy to docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/group.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js b/docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js
copy to docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/sticky.js b/docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/sticky.js
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/javascripts/waypoints/sticky.js
copy to docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/sticky.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/waypoint.js b/docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/waypoint.js
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/javascripts/waypoints/waypoint.js
copy to docs/geode-native-book-cpp/master_middleman/source/javascripts/waypoints/waypoint.js
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_book-footer.erb b/docs/geode-native-book-cpp/master_middleman/source/layouts/_book-footer.erb
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/layouts/_book-footer.erb
copy to docs/geode-native-book-cpp/master_middleman/source/layouts/_book-footer.erb
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_header.erb b/docs/geode-native-book-cpp/master_middleman/source/layouts/_header.erb
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/layouts/_header.erb
copy to docs/geode-native-book-cpp/master_middleman/source/layouts/_header.erb
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_local-header.erb b/docs/geode-native-book-cpp/master_middleman/source/layouts/_local-header.erb
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/layouts/_local-header.erb
copy to docs/geode-native-book-cpp/master_middleman/source/layouts/_local-header.erb
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_title.erb b/docs/geode-native-book-cpp/master_middleman/source/layouts/_title.erb
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/layouts/_title.erb
copy to docs/geode-native-book-cpp/master_middleman/source/layouts/_title.erb
diff --git a/docs/geode-native-book/master_middleman/source/stylesheets/book-styles.scss b/docs/geode-native-book-cpp/master_middleman/source/stylesheets/book-styles.scss
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/stylesheets/book-styles.scss
copy to docs/geode-native-book-cpp/master_middleman/source/stylesheets/book-styles.scss
diff --git a/docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-base-values.scss b/docs/geode-native-book-cpp/master_middleman/source/stylesheets/partials/_book-base-values.scss
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-base-values.scss
copy to docs/geode-native-book-cpp/master_middleman/source/stylesheets/partials/_book-base-values.scss
diff --git a/docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-vars.scss b/docs/geode-native-book-cpp/master_middleman/source/stylesheets/partials/_book-vars.scss
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-vars.scss
copy to docs/geode-native-book-cpp/master_middleman/source/stylesheets/partials/_book-vars.scss
diff --git a/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb b/docs/geode-native-book-cpp/master_middleman/source/subnavs/geode-nc-nav.erb
similarity index 100%
copy from docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
copy to docs/geode-native-book-cpp/master_middleman/source/subnavs/geode-nc-nav.erb
diff --git a/docs/geode-native-book/redirects.rb.CPP b/docs/geode-native-book-cpp/redirects.rb
similarity index 100%
rename from docs/geode-native-book/redirects.rb.CPP
rename to docs/geode-native-book-cpp/redirects.rb
diff --git a/docs/geode-native-book/.gitignore b/docs/geode-native-book-dotnet/.gitignore
similarity index 100%
rename from docs/geode-native-book/.gitignore
rename to docs/geode-native-book-dotnet/.gitignore
diff --git a/docs/geode-native-book/Gemfile b/docs/geode-native-book-dotnet/Gemfile
similarity index 100%
rename from docs/geode-native-book/Gemfile
rename to docs/geode-native-book-dotnet/Gemfile
diff --git a/docs/geode-native-book-dotnet/Gemfile.lock b/docs/geode-native-book-dotnet/Gemfile.lock
new file mode 100644
index 0000000..8ccdcfc
--- /dev/null
+++ b/docs/geode-native-book-dotnet/Gemfile.lock
@@ -0,0 +1,207 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (4.2.11.1)
+      i18n (~> 0.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    ansi (1.5.0)
+    backports (3.15.0)
+    bookbindery (10.1.14)
+      ansi (~> 1.4)
+      css_parser
+      elasticsearch
+      fog-aws (~> 0.7.1)
+      font-awesome-sass (= 4.7.0)
+      git (~> 1.2.8)
+      middleman (= 4.1.10)
+      middleman-compass
+      middleman-livereload
+      middleman-sprockets
+      middleman-syntax (= 2.1.0)
+      nokogiri (= 1.8.2)
+      puma
+      rack-rewrite
+      redcarpet (~> 3.2.3)
+      rouge (!= 1.9.1)
+      therubyracer
+      thor (= 0.19.1)
+    builder (3.2.3)
+    chunky_png (1.3.11)
+    coffee-script (2.4.1)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.12.2)
+    compass (1.0.3)
+      chunky_png (~> 1.2)
+      compass-core (~> 1.0.2)
+      compass-import-once (~> 1.0.5)
+      rb-fsevent (>= 0.9.3)
+      rb-inotify (>= 0.9)
+      sass (>= 3.3.13, < 3.5)
+    compass-core (1.0.3)
+      multi_json (~> 1.0)
+      sass (>= 3.3.0, < 3.5)
+    compass-import-once (1.0.5)
+      sass (>= 3.2, < 3.5)
+    concurrent-ruby (1.1.5)
+    contracts (0.13.0)
+    css_parser (1.7.0)
+      addressable
+    dotenv (2.7.5)
+    elasticsearch (7.3.0)
+      elasticsearch-api (= 7.3.0)
+      elasticsearch-transport (= 7.3.0)
+    elasticsearch-api (7.3.0)
+      multi_json
+    elasticsearch-transport (7.3.0)
+      faraday
+      multi_json
+    em-websocket (0.5.1)
+      eventmachine (>= 0.12.9)
+      http_parser.rb (~> 0.6.0)
+    erubis (2.7.0)
+    eventmachine (1.2.7)
+    excon (0.65.0)
+    execjs (2.7.0)
+    faraday (0.15.4)
+      multipart-post (>= 1.2, < 3)
+    fast_blank (1.0.0)
+    fastimage (2.1.5)
+    ffi (1.11.1)
+    fog-aws (0.7.6)
+      fog-core (~> 1.27)
+      fog-json (~> 1.0)
+      fog-xml (~> 0.1)
+      ipaddress (~> 0.8)
+    fog-core (1.45.0)
+      builder
+      excon (~> 0.58)
+      formatador (~> 0.2)
+    fog-json (1.2.0)
+      fog-core
+      multi_json (~> 1.10)
+    fog-xml (0.1.3)
+      fog-core
+      nokogiri (>= 1.5.11, < 2.0.0)
+    font-awesome-sass (4.7.0)
+      sass (>= 3.2)
+    formatador (0.2.5)
+    git (1.2.9.1)
+    haml (5.1.1)
+      temple (>= 0.8.0)
+      tilt
+    hamster (3.0.0)
+      concurrent-ruby (~> 1.0)
+    hashie (3.6.0)
+    http_parser.rb (0.6.0)
+    i18n (0.7.0)
+    ipaddress (0.8.3)
+    kramdown (1.17.0)
+    libv8 (3.16.14.19)
+    listen (3.0.8)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    memoist (0.16.0)
+    middleman (4.1.10)
+      coffee-script (~> 2.2)
+      compass-import-once (= 1.0.5)
+      haml (>= 4.0.5)
+      kramdown (~> 1.2)
+      middleman-cli (= 4.1.10)
+      middleman-core (= 4.1.10)
+      sass (>= 3.4.0, < 4.0)
+    middleman-cli (4.1.10)
+      thor (>= 0.17.0, < 2.0)
+    middleman-compass (4.0.1)
+      compass (>= 1.0.0, < 2.0.0)
+      middleman-core (>= 4.0.0)
+    middleman-core (4.1.10)
+      activesupport (~> 4.2)
+      addressable (~> 2.3)
+      backports (~> 3.6)
+      bundler (~> 1.1)
+      contracts (~> 0.13.0)
+      dotenv
+      erubis
+      execjs (~> 2.0)
+      fast_blank
+      fastimage (~> 2.0)
+      hamster (~> 3.0)
+      hashie (~> 3.4)
+      i18n (~> 0.7.0)
+      listen (~> 3.0.0)
+      memoist (~> 0.14)
+      padrino-helpers (~> 0.13.0)
+      parallel
+      rack (>= 1.4.5, < 2.0)
+      sass (>= 3.4)
+      servolux
+      tilt (~> 1.4.1)
+      uglifier (~> 3.0)
+    middleman-livereload (3.4.6)
+      em-websocket (~> 0.5.1)
+      middleman-core (>= 3.3)
+      rack-livereload (~> 0.3.15)
+    middleman-sprockets (4.1.1)
+      middleman-core (~> 4.0)
+      sprockets (>= 3.0)
+    middleman-syntax (2.1.0)
+      middleman-core (>= 3.2)
+      rouge (~> 1.0)
+    mini_portile2 (2.3.0)
+    minitest (5.11.3)
+    multi_json (1.13.1)
+    multipart-post (2.1.1)
+    nio4r (2.4.0)
+    nokogiri (1.8.2)
+      mini_portile2 (~> 2.3.0)
+    padrino-helpers (0.13.3.4)
+      i18n (~> 0.6, >= 0.6.7)
+      padrino-support (= 0.13.3.4)
+      tilt (>= 1.4.1, < 3)
+    padrino-support (0.13.3.4)
+      activesupport (>= 3.1)
+    parallel (1.17.0)
+    public_suffix (3.1.1)
+    puma (4.0.1)
+      nio4r (~> 2.0)
+    rack (1.6.11)
+    rack-livereload (0.3.17)
+      rack
+    rack-rewrite (1.5.1)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
+    redcarpet (3.2.3)
+    ref (2.0.0)
+    rouge (1.11.1)
+    sass (3.4.25)
+    servolux (0.13.0)
+    sprockets (3.7.2)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    temple (0.8.1)
+    therubyracer (0.12.3)
+      libv8 (~> 3.16.14.15)
+      ref
+    thor (0.19.1)
+    thread_safe (0.3.6)
+    tilt (1.4.1)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    uglifier (3.2.0)
+      execjs (>= 0.3.0, < 3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bookbindery
+  libv8
+
+BUNDLED WITH
+   1.17.3
diff --git a/docs/geode-native-book/config.yml b/docs/geode-native-book-dotnet/config.yml
similarity index 100%
rename from docs/geode-native-book/config.yml
rename to docs/geode-native-book-dotnet/config.yml
diff --git a/docs/geode-native-book/master_middleman/source/archive_menus/_default.erb b/docs/geode-native-book-dotnet/master_middleman/source/archive_menus/_default.erb
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/archive_menus/_default.erb
rename to docs/geode-native-book-dotnet/master_middleman/source/archive_menus/_default.erb
diff --git a/docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol.png b/docs/geode-native-book-dotnet/master_middleman/source/images/Apache_Geode_logo_symbol.png
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol.png
rename to docs/geode-native-book-dotnet/master_middleman/source/images/Apache_Geode_logo_symbol.png
diff --git a/docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol_white.png b/docs/geode-native-book-dotnet/master_middleman/source/images/Apache_Geode_logo_symbol_white.png
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/images/Apache_Geode_logo_symbol_white.png
rename to docs/geode-native-book-dotnet/master_middleman/source/images/Apache_Geode_logo_symbol_white.png
diff --git a/docs/geode-native-book/master_middleman/source/images/favicon.ico b/docs/geode-native-book-dotnet/master_middleman/source/images/favicon.ico
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/images/favicon.ico
rename to docs/geode-native-book-dotnet/master_middleman/source/images/favicon.ico
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/book.js b/docs/geode-native-book-dotnet/master_middleman/source/javascripts/book.js
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/javascripts/book.js
rename to docs/geode-native-book-dotnet/master_middleman/source/javascripts/book.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/context.js b/docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/context.js
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/javascripts/waypoints/context.js
rename to docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/context.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/group.js b/docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/group.js
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/javascripts/waypoints/group.js
rename to docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/group.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js b/docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js
rename to docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/noframeworkAdapter.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/sticky.js b/docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/sticky.js
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/javascripts/waypoints/sticky.js
rename to docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/sticky.js
diff --git a/docs/geode-native-book/master_middleman/source/javascripts/waypoints/waypoint.js b/docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/waypoint.js
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/javascripts/waypoints/waypoint.js
rename to docs/geode-native-book-dotnet/master_middleman/source/javascripts/waypoints/waypoint.js
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_book-footer.erb b/docs/geode-native-book-dotnet/master_middleman/source/layouts/_book-footer.erb
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/layouts/_book-footer.erb
rename to docs/geode-native-book-dotnet/master_middleman/source/layouts/_book-footer.erb
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_header.erb b/docs/geode-native-book-dotnet/master_middleman/source/layouts/_header.erb
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/layouts/_header.erb
rename to docs/geode-native-book-dotnet/master_middleman/source/layouts/_header.erb
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_local-header.erb b/docs/geode-native-book-dotnet/master_middleman/source/layouts/_local-header.erb
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/layouts/_local-header.erb
rename to docs/geode-native-book-dotnet/master_middleman/source/layouts/_local-header.erb
diff --git a/docs/geode-native-book/master_middleman/source/layouts/_title.erb b/docs/geode-native-book-dotnet/master_middleman/source/layouts/_title.erb
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/layouts/_title.erb
rename to docs/geode-native-book-dotnet/master_middleman/source/layouts/_title.erb
diff --git a/docs/geode-native-book/master_middleman/source/stylesheets/book-styles.scss b/docs/geode-native-book-dotnet/master_middleman/source/stylesheets/book-styles.scss
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/stylesheets/book-styles.scss
rename to docs/geode-native-book-dotnet/master_middleman/source/stylesheets/book-styles.scss
diff --git a/docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-base-values.scss b/docs/geode-native-book-dotnet/master_middleman/source/stylesheets/partials/_book-base-values.scss
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-base-values.scss
rename to docs/geode-native-book-dotnet/master_middleman/source/stylesheets/partials/_book-base-values.scss
diff --git a/docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-vars.scss b/docs/geode-native-book-dotnet/master_middleman/source/stylesheets/partials/_book-vars.scss
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/stylesheets/partials/_book-vars.scss
rename to docs/geode-native-book-dotnet/master_middleman/source/stylesheets/partials/_book-vars.scss
diff --git a/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb b/docs/geode-native-book-dotnet/master_middleman/source/subnavs/geode-nc-nav.erb
similarity index 100%
rename from docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
rename to docs/geode-native-book-dotnet/master_middleman/source/subnavs/geode-nc-nav.erb
diff --git a/docs/geode-native-book/redirects.rb b/docs/geode-native-book-dotnet/redirects.rb
similarity index 100%
rename from docs/geode-native-book/redirects.rb
rename to docs/geode-native-book-dotnet/redirects.rb
diff --git a/docs/geode-native-book/config.yml.DOTNET b/docs/geode-native-book/config.yml.DOTNET
deleted file mode 100644
index 162a67b..0000000
--- a/docs/geode-native-book/config.yml.DOTNET
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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.
-
-book_repo: apache/geode-native/docs/geode-native-book
-public_host: localhost
-
-sections:
-- repository:
-    name: geode-native-docs-dotnet
-  directory: docs/geode-native/dotnet/111
-  subnav_template: geode-nc-nav
-
-template_variables:
-  product_name_long: Apache Geode
-  product_name: Geode
-  product_name_lc: geode
-  product_version: "1.11"
-  product_version_nodot: 111
-  product_language: dotnet
-  client_name: Geode Native Client for .NET
-  min_java_update: 121
-  support_url: http://geode.apache.org/community
-  product_url: http://geode.apache.org
-  book_title: Apache Geode Native .NET Documentation
-  book_header_img: /images/Apache_Geode_logo_symbol_white.png
-  support_link: <a href="http://geode.apache.org/community" target="_blank">Community</a>
-  support_call_to_action: <a href="http://geode.apache.org/community" target="_blank">Need Help?</a>
-  changelog_href: https://cwiki.apache.org/confluence/display/GEODE/Release+Notes
-  product_link: <div class="header-item"><a href="http://geode.apache.org">Back to Product Page</a></div>
-  domain_name: apache.org
-  book_title_short: Geode Native .NET Docs
-  local_header_title: Apache Geode Native .NET
-  local_header_img: /images/Apache_Geode_logo_symbol.png
-
-broken_link_exclusions: iefix|using_custom_classes|arrowhead|cppdocs|dotnetdocs|#
diff --git a/docs/geode-native-book/redirects.rb.DOTNET b/docs/geode-native-book/redirects.rb.DOTNET
deleted file mode 100644
index 07afaee..0000000
--- a/docs/geode-native-book/redirects.rb.DOTNET
+++ /dev/null
@@ -1,25 +0,0 @@
-#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.
-
-# Links to API Documentation #
-r301 %r{/releases/latest/javadoc/(.*)}, 'https://geode.apache.org/releases/latest/javadoc/$1'
-r302 %r{/cppdocs/(.*)}, 'https://geode.apache.org/releases/latest/cppdocs/$1'
-r302 %r{/dotnetdocs/(.*)}, 'https://geode.apache.org/releases/latest/dotnetdocs/$1'
-
-# Links to User Guides #
-rewrite '/', '/docs/geode-native/dotnet/111/about-client-users-guide.html'
-rewrite '/index.html', '/docs/geode-native/dotnet/111/about-client-users-guide.html'
-r301 %r{/serverman/(.*)}, 'https://geode.apache.org/docs/guide/111/$1'
-r301 %r{/geodeman/(.*)}, 'https://geode.apache.org/docs/guide/111/$1'
diff --git a/docs/docker/Dockerfile b/docs/manual-build/Dockerfile
similarity index 100%
copy from docs/docker/Dockerfile
copy to docs/manual-build/Dockerfile
diff --git a/docs/manual-build/README.md b/docs/manual-build/README.md
new file mode 100644
index 0000000..2558667
--- /dev/null
+++ b/docs/manual-build/README.md
@@ -0,0 +1,68 @@
+# Apache Geode Native Client User Guides
+
+This document contains instructions for building and viewing the Apache Geode Native Client User Guides.
+
+## Bookbinder Usage
+
+Bookbinder is meant to be used from within a project called a **book**. The book includes a configuration file that describes which documentation repositories to use as source materials. Bookbinder provides a set of scripts to aggregate those repositories and publish them to various locations.
+
+For Geode Native Client, a preconfigured **book** is provided for each user guide (C++ and .NET) in the directories `_geode-native-project-dir_/docs/geode-native-book-cpp` and `_geode-native-project-dir_/docs/geode-native-book-dotnet`. Each book gathers content from the language-specific directory _geode-native-project-dir_/docs/geode-native-docs-cpp or geode-native-docs-dotnet. You can use this configuration to build an HTML version of the Apache Geode Native Client User Guides on your  [...]
+
+<a name="docker-setup"></a>
+## Docker Setup
+
+For ease of use, a Docker image is provided that contains a self-consistent Bookbinder environment. [Install Docker](https://docs.docker.com/install/) if you have not already done so.
+
+<a name="building-the-documentation"></a>
+## Building the Documentation
+
+1. Navigate to the directory that contains the Dockerfile and run the `docker build` command to create the Bookbinder-enabled Docker image:
+
+    ```bash
+    $ cd geode-native/docs/manual-build
+    $ docker build -t geode-native-userman .
+    ```
+    
+1. Run the Docker image in interactive mode with a command similar to the following:
+
+    ```bash
+    $ docker run -it -p 9292:9292 -p 1234:1234 -v PATH-TO-GEODE-NATIVE/docs:/docs geode-native-userman
+    ```
+
+    where `PATH-TO-GEODE-NATIVE` is the fully-qualified path to the geode-native repo. This brings up the interactive Docker container, with `/` as your current working directory.
+
+1. To build the documentation, `cd` to the book directory:
+
+    For C++ guide:
+    ```bash
+    $ cd docs/geode-native-book-cpp
+    ```
+
+    For .NET guide:
+    ```bash
+    $ cd docs/geode-native-book-dotnet
+    ```
+
+1. Run `bundle install` to install the dependencies required to build the user guide.
+
+    ```bash
+    $ bundle install
+    ```
+
+1. Invoke bookbinder to build the user guide. Bookbinder converts the markdown source into HTML, which it puts in the `final_app` directory:
+
+    ```bash
+    $ bundle exec bookbinder bind local
+    ```
+
+1. To start a local website of the Apache Geode Native Client User Guide, navigate to the `final_app` directory and run `rackup`:
+
+    ```bash
+    $ cd final_app
+    $ rackup
+    ```
+
+    Note: You may be prompted to run `bundle install` to supply any missing components. Do that, then re-try the `rackup` command.
+
+   You can now view the local documentation in a browser at <http://localhost:9292>. 
+


Mime
View raw message