You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by db...@apache.org on 2021/07/23 16:28:17 UTC

[geode-native] branch support/1.12 updated: GEODE-9334: Update UG generation scripts

This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/support/1.12 by this push:
     new c7800a3  GEODE-9334: Update UG generation scripts
c7800a3 is described below

commit c7800a39b91b9d98b1dc51ba7873010515737825
Author: Dave Barnes <db...@apache.org>
AuthorDate: Thu Jul 22 19:56:55 2021 -0700

    GEODE-9334: Update UG generation scripts
---
 docs/README.md                             | 79 ++++++++++++++++++++++--
 docs/docker/Dockerfile                     | 29 ++++++++-
 docs/docker/README.md                      | 34 ----------
 docs/docker/build-docs.sh                  | 69 ---------------------
 docs/docker/build-image-common.sh          | 63 -------------------
 docs/docker/preview-user-guide.sh          | 55 +++++++++++++++++
 docs/docker/view-docs.sh                   | 59 ------------------
 docs/geode-native-book-cpp/Gemfile.lock    | 99 +++++++++++++++++-------------
 docs/geode-native-book-dotnet/Gemfile.lock | 99 +++++++++++++++++-------------
 9 files changed, 272 insertions(+), 314 deletions(-)

diff --git a/docs/README.md b/docs/README.md
index 3c4fe55..3efd51e 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -7,12 +7,83 @@ This document contains instructions for building and viewing the Apache Geode Na
 
 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.
 
+Bookbinder is a Ruby gem (available at [rubygems.org](https://rubygems.org/gems/bookbindery/) ) 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.
+
 The User Guide can be produced in two versions: one for the .NET native client, the other for the C++ native client.
 
-## Automatic build
+## Preview the User Guide
+
+Documentation can be built and previewed using the utility script at {geode-project-dir}/docs/docker. This script uses a Docker image that provides the tools to build and view the guide, including Ruby, Bookbinder, and Rackup.
+
+For C++ guide:
+```
+$ cd {geode-native-project-dir}/docs/docker
+$ ./preview-user-guide.sh cpp
+```
+
+For .NET guide:
+```
+$ cd {geode-native-project-dir}/docs/docker
+$ ./preview-user-guide.sh dotnet
+```
+
+In a browser, navigate to `http://localhost:9292` to view the user guide.
+
+
+## Build the User Guide
+
+### Prerequisites
+
+Bookbinder requires Ruby version 2.3.3 or higher.
+
+### 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  [...]
+
+### Building the Documentation
+
+1. The GemFile in each book directory already defines the gem "bookbindery" dependency. Make sure you are in the `_geode-native-project-dir_/docs/geode-native-book-cpp` or `_geode-native-project-dir_/docs/geode-native-book-dotnet` (depending if you want to build the C++ or .NET user guide respectively) directory and enter:
+
+   For C++ guide:
+    
+   ```bash
+   $ cd docs/geode-native-book-cpp
+   $ bundle install
+   ```
+
+   For .NET guide:
+    
+   ```bash
+   $ cd docs/geode-native-book-dotnet
+   $ bundle install
+   ```
+
+   Note: You will not have to run bundle install on subsequent builds.
+
+2. To build the documentation locally using the installed config.yml file, enter:
+
+   ```
+   $ bundle exec bookbinder bind local
+   ```
+   
+   Bookbinder converts the markdown source into HTML, which it puts in the `final_app` directory.
+
+3. To start a local website of the Apache Geode Native Client User Guide, you have to execute Rackup from the `final_app` directory:
 
-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).
+   For C++ guide:
+    
+   ```bash
+   $ cd docs/geode-native-book-cpp/final_app
+   $ bundle exec rackup
+   ```
 
-## Manual build
+   For .NET guide:
+    
+   ```bash
+   $ cd docs/geode-native-book-dotnet/final_app
+   $ bundle exec rackup
+   ```
 
-Documentation can be built in a less-automated way, as described at [docs/manual-build](https://github.com/apache/geode-native/tree/develop/docs/manual-build).
+   You can now view the local documentation at `http://localhost:9292`.
diff --git a/docs/docker/Dockerfile b/docs/docker/Dockerfile
index dceadd9..0efb124 100644
--- a/docs/docker/Dockerfile
+++ b/docs/docker/Dockerfile
@@ -14,12 +14,35 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM ruby:2.3.1
+FROM ruby:2.5
 
 LABEL Vendor="Apache Geode"
 LABEL version=unstable
 LABEL maintainer=dev@geode.apache.org
 
-ADD Gemfile Gemfile
-ADD Gemfile.lock Gemfile.lock
+# Nodejs & gems needed for 'rackup'
+RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - ; \
+    apt-get install -y nodejs
+RUN gem install bundler:1.17.3 \
+    rake multi_json:1.13.1 \
+    elasticsearch:2.0.2 \
+    multipart-post:2.0.0 \
+    faraday:0.15.4 \
+    libv8:3.16.14.15 \
+    mini_portile2:2.5.0 \
+    racc:1.5.2 \
+    nokogiri:1.11.2 \
+    mimemagic:0.3.9 \
+    puma:4.3.8 \
+    rack:2.1.4 \
+    smtpapi:0.1.0 \
+    sendgrid-ruby:1.1.6 \
+    therubyracer:0.12.2
+
+# Install Bookbinder
+COPY Gemfile Gemfile
+COPY Gemfile.lock Gemfile.lock
 RUN bundle install
+
+COPY geode-native-book-* .
+COPY geode-native-docs-* .
diff --git a/docs/docker/README.md b/docs/docker/README.md
deleted file mode 100644
index a4cbd8e..0000000
--- a/docs/docker/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
deleted file mode 100755
index 83a7e95..0000000
--- a/docs/docker/build-docs.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/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
deleted file mode 100644
index 1222c73..0000000
--- a/docs/docker/build-image-common.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/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/preview-user-guide.sh b/docs/docker/preview-user-guide.sh
new file mode 100755
index 0000000..98934f2
--- /dev/null
+++ b/docs/docker/preview-user-guide.sh
@@ -0,0 +1,55 @@
+#!/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.
+
+function cleanup {
+  rm Gemfile Gemfile.lock
+  rm -r geode-native-book-* geode-native-docs-*
+}
+
+trap cleanup EXIT
+
+set -x -e
+
+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
+
+BOOK_DIR_NAME=geode-native-book-${LANG}
+DOCS_DIR_NAME=geode-native-docs-${LANG}
+
+mkdir -p ${BOOK_DIR_NAME}
+mkdir -p ${DOCS_DIR_NAME}
+
+cp ../${BOOK_DIR_NAME}/Gemfile* .
+cp -r ../${BOOK_DIR_NAME} ${BOOK_DIR_NAME}
+cp -r ../${DOCS_DIR_NAME} ${DOCS_DIR_NAME}
+
+docker build --build-arg lang=${LANG} -t geodenativedocs/temp:1.0 .
+
+docker run -it -p 9292:9292 geodenativedocs/temp:1.0 /bin/bash -c "cd ${BOOK_DIR_NAME} && bundle exec bookbinder bind local && cd final_app && bundle exec rackup --host=0.0.0.0"
diff --git a/docs/docker/view-docs.sh b/docs/docker/view-docs.sh
deleted file mode 100755
index b91ffad..0000000
--- a/docs/docker/view-docs.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/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-cpp/Gemfile.lock b/docs/geode-native-book-cpp/Gemfile.lock
index 48f5b00..4b7f27c 100644
--- a/docs/geode-native-book-cpp/Gemfile.lock
+++ b/docs/geode-native-book-cpp/Gemfile.lock
@@ -1,16 +1,16 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    activesupport (4.2.11.1)
+    activesupport (4.2.11.3)
       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)
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
     ansi (1.5.0)
-    backports (3.15.0)
-    bookbindery (10.1.14)
+    backports (3.21.0)
+    bookbindery (10.1.17)
       ansi (~> 1.4)
       css_parser
       elasticsearch
@@ -22,15 +22,16 @@ GEM
       middleman-livereload
       middleman-sprockets
       middleman-syntax (= 2.1.0)
-      nokogiri (= 1.8.2)
+      nokogiri (= 1.10.1)
       puma
       rack-rewrite
       redcarpet (~> 3.2.3)
       rouge (!= 1.9.1)
+      sprockets (= 3.7.2)
       therubyracer
       thor (= 0.19.1)
-    builder (3.2.3)
-    chunky_png (1.3.11)
+    builder (3.2.4)
+    chunky_png (1.4.0)
     coffee-script (2.4.1)
       coffee-script-source
       execjs
@@ -47,31 +48,46 @@ GEM
       sass (>= 3.3.0, < 3.5)
     compass-import-once (1.0.5)
       sass (>= 3.2, < 3.5)
-    concurrent-ruby (1.1.5)
+    concurrent-ruby (1.1.9)
     contracts (0.13.0)
-    css_parser (1.7.0)
+    css_parser (1.9.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)
+    dotenv (2.7.6)
+    elasticsearch (7.13.3)
+      elasticsearch-api (= 7.13.3)
+      elasticsearch-transport (= 7.13.3)
+    elasticsearch-api (7.13.3)
       multi_json
-    elasticsearch-transport (7.3.0)
-      faraday
+    elasticsearch-transport (7.13.3)
+      faraday (~> 1)
       multi_json
-    em-websocket (0.5.1)
+    em-websocket (0.5.2)
       eventmachine (>= 0.12.9)
       http_parser.rb (~> 0.6.0)
     erubis (2.7.0)
     eventmachine (1.2.7)
-    excon (0.71.0)
-    execjs (2.7.0)
-    faraday (0.15.4)
+    excon (0.85.0)
+    execjs (2.8.1)
+    faraday (1.5.1)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0.1)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.1)
+      faraday-patron (~> 1.0)
       multipart-post (>= 1.2, < 3)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-httpclient (1.0.1)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
     fast_blank (1.0.0)
-    fastimage (2.1.5)
-    ffi (1.11.1)
+    fastimage (2.2.4)
+    ffi (1.15.3)
     fog-aws (0.7.6)
       fog-core (~> 1.27)
       fog-json (~> 1.0)
@@ -89,9 +105,9 @@ GEM
       nokogiri (>= 1.5.11, < 2.0.0)
     font-awesome-sass (4.7.0)
       sass (>= 3.2)
-    formatador (0.2.5)
+    formatador (0.3.0)
     git (1.2.9.1)
-    haml (5.1.1)
+    haml (5.2.1)
       temple (>= 0.8.0)
       tilt
     hamster (3.0.0)
@@ -105,7 +121,7 @@ GEM
     listen (3.0.8)
       rb-fsevent (~> 0.9, >= 0.9.4)
       rb-inotify (~> 0.9, >= 0.9.7)
-    memoist (0.16.0)
+    memoist (0.16.2)
     middleman (4.1.10)
       coffee-script (~> 2.2)
       compass-import-once (= 1.0.5)
@@ -142,7 +158,7 @@ GEM
       servolux
       tilt (~> 1.4.1)
       uglifier (~> 3.0)
-    middleman-livereload (3.4.6)
+    middleman-livereload (3.4.7)
       em-websocket (~> 0.5.1)
       middleman-core (>= 3.3)
       rack-livereload (~> 0.3.15)
@@ -152,46 +168,47 @@ GEM
     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)
+    mini_portile2 (2.4.0)
+    minitest (5.14.4)
+    multi_json (1.15.0)
     multipart-post (2.1.1)
-    nio4r (2.4.0)
-    nokogiri (1.8.2)
-      mini_portile2 (~> 2.3.0)
+    nio4r (2.5.7)
+    nokogiri (1.10.1)
+      mini_portile2 (~> 2.4.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)
+    parallel (1.20.1)
+    public_suffix (4.0.6)
+    puma (5.3.2)
       nio4r (~> 2.0)
-    rack (1.6.11)
+    rack (1.6.13)
     rack-livereload (0.3.17)
       rack
     rack-rewrite (1.5.1)
-    rb-fsevent (0.10.3)
-    rb-inotify (0.10.0)
+    rb-fsevent (0.11.0)
+    rb-inotify (0.10.1)
       ffi (~> 1.0)
     redcarpet (3.2.3)
     ref (2.0.0)
     rouge (1.11.1)
+    ruby2_keywords (0.0.5)
     sass (3.4.25)
     servolux (0.13.0)
     sprockets (3.7.2)
       concurrent-ruby (~> 1.0)
       rack (> 1, < 3)
-    temple (0.8.1)
+    temple (0.8.2)
     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)
+    tzinfo (1.2.9)
       thread_safe (~> 0.1)
     uglifier (3.2.0)
       execjs (>= 0.3.0, < 3)
diff --git a/docs/geode-native-book-dotnet/Gemfile.lock b/docs/geode-native-book-dotnet/Gemfile.lock
index 8ccdcfc..4b7f27c 100644
--- a/docs/geode-native-book-dotnet/Gemfile.lock
+++ b/docs/geode-native-book-dotnet/Gemfile.lock
@@ -1,16 +1,16 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    activesupport (4.2.11.1)
+    activesupport (4.2.11.3)
       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)
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
     ansi (1.5.0)
-    backports (3.15.0)
-    bookbindery (10.1.14)
+    backports (3.21.0)
+    bookbindery (10.1.17)
       ansi (~> 1.4)
       css_parser
       elasticsearch
@@ -22,15 +22,16 @@ GEM
       middleman-livereload
       middleman-sprockets
       middleman-syntax (= 2.1.0)
-      nokogiri (= 1.8.2)
+      nokogiri (= 1.10.1)
       puma
       rack-rewrite
       redcarpet (~> 3.2.3)
       rouge (!= 1.9.1)
+      sprockets (= 3.7.2)
       therubyracer
       thor (= 0.19.1)
-    builder (3.2.3)
-    chunky_png (1.3.11)
+    builder (3.2.4)
+    chunky_png (1.4.0)
     coffee-script (2.4.1)
       coffee-script-source
       execjs
@@ -47,31 +48,46 @@ GEM
       sass (>= 3.3.0, < 3.5)
     compass-import-once (1.0.5)
       sass (>= 3.2, < 3.5)
-    concurrent-ruby (1.1.5)
+    concurrent-ruby (1.1.9)
     contracts (0.13.0)
-    css_parser (1.7.0)
+    css_parser (1.9.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)
+    dotenv (2.7.6)
+    elasticsearch (7.13.3)
+      elasticsearch-api (= 7.13.3)
+      elasticsearch-transport (= 7.13.3)
+    elasticsearch-api (7.13.3)
       multi_json
-    elasticsearch-transport (7.3.0)
-      faraday
+    elasticsearch-transport (7.13.3)
+      faraday (~> 1)
       multi_json
-    em-websocket (0.5.1)
+    em-websocket (0.5.2)
       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)
+    excon (0.85.0)
+    execjs (2.8.1)
+    faraday (1.5.1)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0.1)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.1)
+      faraday-patron (~> 1.0)
       multipart-post (>= 1.2, < 3)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-httpclient (1.0.1)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
     fast_blank (1.0.0)
-    fastimage (2.1.5)
-    ffi (1.11.1)
+    fastimage (2.2.4)
+    ffi (1.15.3)
     fog-aws (0.7.6)
       fog-core (~> 1.27)
       fog-json (~> 1.0)
@@ -89,9 +105,9 @@ GEM
       nokogiri (>= 1.5.11, < 2.0.0)
     font-awesome-sass (4.7.0)
       sass (>= 3.2)
-    formatador (0.2.5)
+    formatador (0.3.0)
     git (1.2.9.1)
-    haml (5.1.1)
+    haml (5.2.1)
       temple (>= 0.8.0)
       tilt
     hamster (3.0.0)
@@ -105,7 +121,7 @@ GEM
     listen (3.0.8)
       rb-fsevent (~> 0.9, >= 0.9.4)
       rb-inotify (~> 0.9, >= 0.9.7)
-    memoist (0.16.0)
+    memoist (0.16.2)
     middleman (4.1.10)
       coffee-script (~> 2.2)
       compass-import-once (= 1.0.5)
@@ -142,7 +158,7 @@ GEM
       servolux
       tilt (~> 1.4.1)
       uglifier (~> 3.0)
-    middleman-livereload (3.4.6)
+    middleman-livereload (3.4.7)
       em-websocket (~> 0.5.1)
       middleman-core (>= 3.3)
       rack-livereload (~> 0.3.15)
@@ -152,46 +168,47 @@ GEM
     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)
+    mini_portile2 (2.4.0)
+    minitest (5.14.4)
+    multi_json (1.15.0)
     multipart-post (2.1.1)
-    nio4r (2.4.0)
-    nokogiri (1.8.2)
-      mini_portile2 (~> 2.3.0)
+    nio4r (2.5.7)
+    nokogiri (1.10.1)
+      mini_portile2 (~> 2.4.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)
+    parallel (1.20.1)
+    public_suffix (4.0.6)
+    puma (5.3.2)
       nio4r (~> 2.0)
-    rack (1.6.11)
+    rack (1.6.13)
     rack-livereload (0.3.17)
       rack
     rack-rewrite (1.5.1)
-    rb-fsevent (0.10.3)
-    rb-inotify (0.10.0)
+    rb-fsevent (0.11.0)
+    rb-inotify (0.10.1)
       ffi (~> 1.0)
     redcarpet (3.2.3)
     ref (2.0.0)
     rouge (1.11.1)
+    ruby2_keywords (0.0.5)
     sass (3.4.25)
     servolux (0.13.0)
     sprockets (3.7.2)
       concurrent-ruby (~> 1.0)
       rack (> 1, < 3)
-    temple (0.8.1)
+    temple (0.8.2)
     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)
+    tzinfo (1.2.9)
       thread_safe (~> 0.1)
     uglifier (3.2.0)
       execjs (>= 0.3.0, < 3)