You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@training.apache.org by cd...@apache.org on 2019/04/26 10:36:20 UTC

[incubator-training] 06/26: Initial commit of the website generation with an initial content skeleton inherited from the PLC4X podling.

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

cdutz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-training.git

commit 945c6d854fa4a29488171536d0d3b81d2e346d77
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Mar 20 15:41:05 2019 +0100

    Initial commit of the website generation with an initial content skeleton inherited from the PLC4X podling.
---
 .gitignore                                         | 134 ++++++
 .mvn/extensions.xml                                |  36 ++
 .mvn/wrapper/MavenWrapperDownloader.java           | 117 +++++
 .mvn/wrapper/maven-wrapper.properties              |  19 +
 Jenkinsfile                                        | 174 +++++++
 mvnw                                               | 305 ++++++++++++
 mvnw.cmd                                           | 172 +++++++
 pom.xml                                            | 521 +++++++++++++++++++++
 src/remote-resources/NOTICE                        |  26 +
 src/site/asciidoc/developers/building.adoc         |  71 +++
 src/site/asciidoc/developers/ci.adoc               |  33 ++
 src/site/asciidoc/developers/contributing.adoc     | 117 +++++
 src/site/asciidoc/developers/decisions.adoc        |  66 +++
 src/site/asciidoc/developers/issues.adoc           |  20 +
 src/site/asciidoc/developers/team.adoc             |  34 ++
 src/site/asciidoc/developers/website.adoc          | 159 +++++++
 src/site/asciidoc/developers/wiki.adoc             |  20 +
 src/site/asciidoc/index.adoc                       |  65 +++
 .../resources/css/bootstrap-responsive.min.css     |  20 +
 src/site/resources/css/site.css                    |  91 ++++
 .../contributing-github-create-pull-request.png    | Bin 0 -> 112177 bytes
 .../resources/images/contributing-github-fork.png  | Bin 0 -> 96553 bytes
 src/site/resources/images/team/cdutz.png           | Bin 0 -> 27791 bytes
 src/site/site.xml                                  | 123 +++++
 tools/clean-site.sh                                |  35 ++
 25 files changed, 2358 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..17a5068
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,134 @@
+.idea/**
+*.iml
+
+# Created by .ignore support plugin (hsz.mobi)
+### Maven template
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+.mvn/wrapper/maven-wrapper.jar
+### Eclipse template
+
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# PyDev specific (Python IDE for Eclipse)
+*.pydevproject
+
+# CDT-specific (C/C++ Development Tooling)
+.cproject
+
+# CDT- autotools
+.autotools
+
+# Java annotation processor (APT)
+.factorypath
+
+# PDT-specific (PHP Development Tools)
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# Tern plugin
+.tern-project
+
+# TeXlipse plugin
+.texlipse
+
+# STS (Spring Tool Suite)
+.springBeans
+
+# Code Recommenders
+.recommenders/
+
+# Annotation Processing
+.apt_generated/
+
+# Scala IDE specific (Scala & Java development for Eclipse)
+.cache-main
+.scala_dependencies
+.worksheet
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn.  Uncomment if using
+# auto-import.
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml
new file mode 100644
index 0000000..c7371ea
--- /dev/null
+++ b/.mvn/extensions.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
+
+  <!-- Currently causing a NPE when executing goals not bound to a specific maven lifecycle phase -->
+  <!--extension>
+    <groupId>com.soebes.maven.extensions</groupId>
+    <artifactId>maven-buildtime-profiler</artifactId>
+    <version>0.2.0</version>
+  </extension-->
+  <extension>
+    <groupId>fr.jcgay.maven</groupId>
+    <artifactId>maven-profiler</artifactId>
+    <version>2.6</version>
+  </extension>
+
+</extensions>
\ No newline at end of file
diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java
new file mode 100644
index 0000000..69e2ece
--- /dev/null
+++ b/.mvn/wrapper/MavenWrapperDownloader.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed 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.
+ */
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.2";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+        + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + " .jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+        ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+        ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if(mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if(mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if(!outputFile.getParentFile().exists()) {
+            if(!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                    "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}
\ No newline at end of file
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..e897577
--- /dev/null
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,19 @@
+# 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.
+
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..f7804b8
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,174 @@
+#!groovy
+
+/*
+ *
+ *  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.
+ *
+ */
+pipeline {
+
+    agent {
+        node {
+            label 'git-websites'
+        }
+    }
+
+    environment {
+        // Test failures will be handled by the jenkins junit steps and mark the build as unstable.
+        MVN_TEST_FAIL_IGNORE = '-Dmaven.test.failure.ignore=true'
+    }
+
+    tools {
+        maven 'Maven 3 (latest)'
+        jdk 'JDK 1.8 (latest)'
+    }
+
+    options {
+        // Kill this job after one hour.
+        timeout(time: 1, unit: 'HOURS')
+        // When we have test-fails e.g. we don't need to run the remaining steps
+        skipStagesAfterUnstable()
+        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '3'))
+    }
+
+    stages {
+        stage('Initialization') {
+            steps {
+                echo 'Building Branch: ' + env.BRANCH_NAME
+                echo 'Using PATH = ' + env.PATH
+            }
+        }
+
+        stage('Cleanup') {
+            steps {
+                echo 'Cleaning up the workspace'
+                deleteDir()
+            }
+        }
+
+        stage('Checkout') {
+            steps {
+                echo 'Checking out branch ' + env.BRANCH_NAME
+                checkout scm
+            }
+        }
+
+        stage('Build site') {
+            steps {
+                echo 'Building Site'
+                sh 'mvn site'
+            }
+        }
+
+        stage('Stage site') {
+            steps {
+                echo 'Staging Site'
+                // Build a directory containing the aggregated website.
+                sh 'mvn site:stage'
+                // Make sure the script is executable.
+                sh 'chmod +x tools/clean-site.sh'
+                // Remove some redundant resources, which shouldn't be required.
+                sh 'tools/clean-site.sh'
+            }
+        }
+
+        stage('Deploy site') {
+            when {
+                branch 'master'
+            }
+            steps {
+                echo 'Deploying Site'
+                // Publish the site with the scm-publish plugin.
+                sh 'mvn scm-publish:publish-scm'
+            }
+        }
+    }
+
+    // Send out notifications on unsuccessful builds.
+    post {
+        // If this build failed, send an email to the list.
+        failure {
+            script {
+                if(env.BRANCH_NAME == "develop") {
+                    emailext(
+                        subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-FAILURE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                        to: "dev@training.apache.org"
+                    )
+                }
+            }
+        }
+
+        // If this build didn't fail, but there were failing tests, send an email to the list.
+        unstable {
+            script {
+                if(env.BRANCH_NAME == "develop") {
+                    emailext(
+                        subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-UNSTABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                        to: "dev@training.apache.org"
+                    )
+                }
+            }
+        }
+
+        // Send an email, if the last build was not successful and this one is.
+        success {
+            // Cleanup the build directory if the build was successful
+            // (in this cae we probably don't have to do any post-build analysis)
+            deleteDir()
+            script {
+                if ((env.BRANCH_NAME == "develop") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
+                    emailext (
+                        subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-STABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Is back to normal.
+""",
+                        to: "dev@training.apache.org"
+                    )
+                }
+            }
+        }
+
+        // This block might become interesting if development is done on a branch other than master.
+        /*always {
+            script {
+                if(env.BRANCH_NAME == "master") {
+                    emailext(
+                        subject: "[COMMIT-TO-MASTER]: A commit to the master branch was made'",
+                        body: """
+COMMIT-TO-MASTER: A commit to the master branch was made:
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                        to: "dev@training.apache.org"
+                    )
+                }
+            }
+        }*/
+    }
+
+}
\ No newline at end of file
diff --git a/mvnw b/mvnw
new file mode 100755
index 0000000..197b608
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,305 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# 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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ "$MVNW_REPOURL" = true]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
\ No newline at end of file
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 0000000..025217a
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,172 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    echo Found %WRAPPER_JAR%
+) else (
+	if not "%MVNW_REPOURL%" == "" (
+	  SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
+	)
+    echo Couldn't find %WRAPPER_JAR%, downloading it ...
+	echo Downloading from: %DOWNLOAD_URL%
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    echo Finished downloading %WRAPPER_JAR%
+)
+@REM End of extension
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..3bc5b4e
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,521 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>21</version>
+  </parent>
+
+  <groupId>org.apache.training</groupId>
+  <artifactId>training-website</artifactId>
+  <version>0.4.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Training</name>
+  <description>
+    Write something sensible here ...
+  </description>
+  <url>https://training.apache.org</url>
+  <inceptionYear>2019</inceptionYear>
+
+  <scm>
+    <connection>scm:git:https://gitbox.apache.org/repos/asf/incubator-training.git</connection>
+    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/incubator-training.git</developerConnection>
+    <url>https://github.com/apache/incubator-trainingx</url>
+    <tag>HEAD</tag>
+  </scm>
+
+  <!-- Only configure the site distribution as the rest is handled by the apache parent -->
+  <distributionManagement>
+    <site>
+      <id>apache.website</id>
+      <url>scm:git:https://gitbox.apache.org/repos/asf/incubator-training.git</url>
+    </site>
+  </distributionManagement>
+
+  <issueManagement>
+    <system>Jira</system>
+    <url>https://issues.apache.org/jira/browse/TRAINING</url>
+  </issueManagement>
+
+  <mailingLists>
+    <mailingList>
+      <name>Apache Training Developer List</name>
+      <subscribe>dev-subscribe@training.apache.org</subscribe>
+      <unsubscribe>dev-unsubscribe@training.apache.org</unsubscribe>
+      <post>dev@training.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/training-dev/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Apache Training Commits List</name>
+      <subscribe>commit-subscribe@training.apache.org</subscribe>
+      <unsubscribe>commits-unsubscribe@training.apache.org</unsubscribe>
+      <post>commits@training.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/training-commits/</archive>
+    </mailingList>
+  </mailingLists>
+
+  <properties>
+    <java.version>1.8</java.version>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputencoding>UTF-8</project.reporting.outputencoding>
+
+    <!-- Site properties -->
+    <reflow.skin.version>1.5.0</reflow.skin.version>
+    <fontawesome.version>5.2.0</fontawesome.version>
+  </properties>
+
+  <modules>
+  </modules>
+
+  <build>
+    <plugins>
+      <!-- Check if all source files have the required apache license headers -->
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>license-check</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <excludes>
+            <!-- Git related files -->
+            <exclude>**/.git/**</exclude>
+            <exclude>**/.gitignore</exclude>
+
+            <!-- Maven related files -->
+            <exclude>**/target/**</exclude>
+
+            <!-- Eclipse related files -->
+            <exclude>**/.project</exclude>
+            <exclude>**/.settings/**</exclude>
+            <exclude>**/.classpath</exclude>
+
+            <!-- IntelliJ related files -->
+            <exclude>**/.idea/**</exclude>
+            <exclude>**/*.iml</exclude>
+
+            <!-- Asciidoctor generated files -->
+            <exclude>**/.asciidoctor/**</exclude>
+
+            <!-- Jenkins build related files -->
+            <exclude>.repository/**</exclude>
+
+            <!-- JSON doesn't like comments -->
+            <exclude>**/*.json</exclude>
+
+            <!-- Output of the profiler maven extension -->
+            <exclude>**/.profiler/**</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+
+      <!-- Generate the legally required text files in the jars -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-remote-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>process-resource-bundles</id>
+            <goals>
+              <goal>process</goal>
+            </goals>
+            <configuration>
+              <resourceBundles>
+                <!-- Will generate META-INF/{DEPENDENCIES,LICENSE,NOTICE} -->
+                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
+                <!-- Will generate META-INF/DISCLAIMER  -->
+                <resourceBundle>org.apache:apache-incubator-disclaimer-resource-bundle:1.1</resourceBundle>
+              </resourceBundles>
+              <!-- Content in this directory will be appended to generated resources -->
+              <appendedResourcesDirectory>${basedir}/src/remote-resources</appendedResourcesDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        ===================================
+        ==                               ==
+        ==    SITE GENERATION PLUGINS    ==
+        ==                               ==
+        ===================================
+
+        Starting here the following plugins are used for generating the projects website.
+
+        Most of the complexity is due to the fact that we selected "localResouces" in the site.xml
+        This causes the generated output not to rely on external resources. Therefore we have to
+        manually take care of fetching and packaging these external resources with the generated site.
+      -->
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>unpack</id>
+            <!-- Only execute this for the parent module -->
+            <inherited>false</inherited>
+            <phase>pre-site</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>io.github.devacfr.maven.skins</groupId>
+                  <artifactId>reflow-default-webdeps</artifactId>
+                  <version>${reflow.skin.version}</version>
+                  <type>jar</type>
+                  <overWrite>false</overWrite>
+                  <includes>
+                    **/css/bootstrap.min.css,
+                    **/css/fontawesome/*,
+                    **/js/*.js,
+                    **/js/languages/*,
+                    **/js/styles/default.min.css
+                  </includes>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${project.build.directory}/site</outputDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        Replace the bootstrap css with the version of the theme
+      -->
+      <plugin>
+        <groupId>com.googlecode.maven-download-plugin</groupId>
+        <artifactId>download-maven-plugin</artifactId>
+        <version>1.4.1</version>
+        <executions>
+          <execution>
+            <id>get-fontawesome</id>
+            <!-- Only execute this for the parent module -->
+            <inherited>false</inherited>
+            <phase>pre-site</phase>
+            <goals>
+              <goal>wget</goal>
+            </goals>
+            <configuration>
+              <url>https://use.fontawesome.com/releases/v${fontawesome.version}/fontawesome-free-${fontawesome.version}-web.zip</url>
+              <unpack>true</unpack>
+              <outputDirectory>${project.build.directory}/dependency/fontawesome</outputDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-site-resources</id>
+            <!-- Only execute this for the parent module -->
+            <inherited>false</inherited>
+            <phase>pre-site</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/site</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>
+                    ${project.build.directory}/dependency/fontawesome/fontawesome-free-${fontawesome.version}-web
+                  </directory>
+                  <includes>
+                    <include>css/all.min.css</include>
+                  </includes>
+                </resource>
+                <resource>
+                  <directory>
+                    ${project.build.directory}/dependency/fontawesome/fontawesome-free-${fontawesome.version}-web/webfonts
+                  </directory>
+                  <targetPath>${project.build.directory}/site/fonts</targetPath>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        The bootstrap uses "fonts" as directory for locating fonts and fontawesome uses "webfonts".
+        This plugin updates the css to also use "fonts".
+      -->
+      <plugin>
+        <groupId>com.google.code.maven-replacer-plugin</groupId>
+        <artifactId>replacer</artifactId>
+        <version>1.5.3</version>
+        <executions>
+          <execution>
+            <id>streamline-font-urls</id>
+            <!-- Only execute this for the parent module -->
+            <inherited>false</inherited>
+            <phase>pre-site</phase>
+            <goals>
+              <goal>replace</goal>
+            </goals>
+            <configuration>
+              <file>${project.build.directory}/site/css/all.min.css</file>
+              <replacements>
+                <replacement>
+                  <token>../webfonts/</token>
+                  <value>../fonts/</value>
+                </replacement>
+              </replacements>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        Make the maven-site-plugin stage the output in the "asf-site" branch
+      -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-scm-publish-plugin</artifactId>
+        <configuration>
+          <!-- mono-module doesn't require site:stage -->
+          <content>${project.build.directory}/staging</content>
+          <!-- branch where to deploy -->
+          <scmBranch>asf-site</scmBranch>
+        </configuration>
+      </plugin>
+    </plugins>
+
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <configuration>
+            <!--
+                Make rat output the files with missing licensed directly into the
+                build output (This way we don't have to look into the rat.txt to find
+                out which ones)
+            -->
+            <consoleOutput>true</consoleOutput>
+          </configuration>
+        </plugin>
+
+        <!-- Configure the Site generation -->
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-site-plugin</artifactId>
+          <configuration>
+            <!--templateFile>${session.executionRootDirectory}/src/site/template/site.vm</templateFile-->
+            <generateReports>true</generateReports>
+            <generateSitemap>true</generateSitemap>
+            <relativizeDecorationLinks>false</relativizeDecorationLinks>
+            <locales>en</locales>
+            <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
+            <outputEncoding>${project.reporting.outputencoding}</outputEncoding>
+            <!--
+              IntelliJ can't find the asciidoc config option in the site plugin, which is correct.
+              However this config section is used by the asciidoctor site plugin extension. So plead
+              ignore this error, it's actually ok.
+            -->
+            <asciidoc>
+              <attributes>
+                <source-highlighter>prettify</source-highlighter>
+                <imagesoutdir>${project.build.directory}/site/images</imagesoutdir>
+              </attributes>
+              <requires>
+                <require>asciidoctor-diagram</require>
+              </requires>
+            </asciidoc>
+          </configuration>
+          <dependencies>
+            <!-- All dependencies needed by the reflow skin -->
+            <dependency>
+              <groupId>io.github.devacfr.maven.skins</groupId>
+              <artifactId>reflow-velocity-tools</artifactId>
+              <version>${reflow.skin.version}</version>
+            </dependency>
+            <!-- add support for scm/git site deployment -->
+            <dependency>
+              <groupId>org.apache.maven.wagon</groupId>
+              <artifactId>wagon-scm</artifactId>
+              <version>2.12</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.maven.scm</groupId>
+              <artifactId>maven-scm-api</artifactId>
+              <version>1.9.5</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.maven.scm</groupId>
+              <artifactId>maven-scm-manager-plexus</artifactId>
+              <version>1.9.5</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.maven.scm</groupId>
+              <artifactId>maven-scm-provider-gitexe</artifactId>
+              <version>1.9.5</version>
+            </dependency>
+            <!-- Add support for asciidoctor -->
+            <dependency>
+              <groupId>org.asciidoctor</groupId>
+              <artifactId>asciidoctor-maven-plugin</artifactId>
+              <version>1.5.7.1</version>
+            </dependency>
+            <dependency>
+              <groupId>org.jruby</groupId>
+              <artifactId>jruby-complete</artifactId>
+              <version>9.1.13.0</version>
+            </dependency>
+            <dependency>
+              <groupId>org.asciidoctor</groupId>
+              <artifactId>asciidoctorj</artifactId>
+              <version>1.5.6</version>
+            </dependency>
+            <dependency>
+              <groupId>org.asciidoctor</groupId>
+              <artifactId>asciidoctorj-diagram</artifactId>
+              <version>1.5.4.1</version>
+            </dependency>
+          </dependencies>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+  <reporting>
+    <plugins>
+    </plugins>
+  </reporting>
+
+  <!-- Make Snapshots of Apache projects available -->
+  <repositories>
+    <repository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+
+  <profiles>
+    <profile>
+      <id>only-eclipse</id>
+      <activation>
+        <property>
+          <name>m2e.version</name>
+        </property>
+      </activation>
+      <build>
+        <pluginManagement>
+          <plugins>
+            <!--
+              This is a fake plugin which is used to tell m2e (Eclipse) how
+              to process this maven project.
+            -->
+            <plugin>
+              <groupId>org.eclipse.m2e</groupId>
+              <artifactId>lifecycle-mapping</artifactId>
+              <version>1.0.0</version>
+              <configuration>
+                <lifecycleMappingMetadata>
+                  <pluginExecutions>
+                    <pluginExecution>
+                      <pluginExecutionFilter>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-remote-resources-plugin</artifactId>
+                        <versionRange>[1.0.0,)</versionRange>
+                        <goals>
+                          <goal>process</goal>
+                        </goals>
+                      </pluginExecutionFilter>
+                      <action>
+                        <ignore/>
+                      </action>
+                    </pluginExecution>
+                  </pluginExecutions>
+                </lifecycleMappingMetadata>
+              </configuration>
+            </plugin>
+          </plugins>
+        </pluginManagement>
+      </build>
+    </profile>
+
+    <!--
+      This profile extends the default "apache-release" configuration with automatic checksum-
+      generation for the release source artifact. It is automatically activated during the
+      release build and only needed there.
+    -->
+    <profile>
+      <id>apache-release</id>
+      <build>
+        <plugins>
+          <!--
+            Create MD5 and SHA512 checksum files for the release artifacts.
+          -->
+          <plugin>
+            <groupId>net.nicoulaj.maven.plugins</groupId>
+            <artifactId>checksum-maven-plugin</artifactId>
+            <version>1.8</version>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>files</goal>
+                </goals>
+              </execution>
+            </executions>
+            <configuration>
+              <algorithms>
+                <algorithm>SHA-512</algorithm>
+              </algorithms>
+              <fileSets>
+                <fileSet>
+                  <directory>${project.build.directory}</directory>
+                  <includes>
+                    <include>apache-training-incubating-${project.version}-source-release.zip</include>
+                  </includes>
+                </fileSet>
+              </fileSets>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>
diff --git a/src/remote-resources/NOTICE b/src/remote-resources/NOTICE
new file mode 100644
index 0000000..5c0ba21
--- /dev/null
+++ b/src/remote-resources/NOTICE
@@ -0,0 +1,26 @@
+===============================================================
+= For site generation only
+===============================================================
+
+Reflow Maven skin and Velocity tools
+Copyright 2012 Andrius Velykis
+
+Twitter Bootstrap - licensed under the Apache License v2.0.
+This product includes software developed by
+Twitter (http://twitter.github.com/bootstrap).
+
+Glyphicons Halflings (part of Bootstrap by Twitter) - licensed under the Creative Commons Attribution 3.0 Unported (CC BY 3.0).
+This product includes software developed by
+Jan Kovařík (http://glyphicons.com)
+
+jQuery - licensed under the MIT License.
+This product includes software developed by
+jQuery (http://jquery.org)
+
+Lightbox2 - licensed under the Creative Commons Attribution 2.5 License (CC BY 2.5)
+This product includes software developed by
+Lokesh Dhakar (http://lokeshdhakar.com/projects/lightbox2)
+
+FontAwesome by Dave Gandy - http://fontawesome.io.
+Font files licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL)
+CSS files licensed under the MIT License
\ No newline at end of file
diff --git a/src/site/asciidoc/developers/building.adoc b/src/site/asciidoc/developers/building.adoc
new file mode 100644
index 0000000..4ead72e
--- /dev/null
+++ b/src/site/asciidoc/developers/building.adoc
@@ -0,0 +1,71 @@
+//
+//  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.
+//
+
+== Building Training Website
+
+The Apache Training Website is built with `Apache Maven` and we have tried to make the build as simple as possible.
+
+For your convenience we also have provided a `Maven-Wrapper`, that should allow building with only `Java 8` or greater as requirement.
+
+=== Requirements
+
+The only requirements to building the Apache Training website should be:
+
+* Java 8 JDK (or newer)
+* Apache Maven (3.1.0 or newer) *(Optional)*
+
+=== Using the Maven-Wrapper
+
+The so-called `Maven-Wrapper` is used by calling the Maven-Wrapper scripts `mvnw` (Mac & Linux) or `mvnw.cmd` (Windows) instead of the default Maven commands `mvn` and `mvn.cmd`.
+
+These helpers ensure Maven is available in at least the version defined in `.mvn/maven-wrapper.properties`.
+If no suitable version can be found, it is automatically downloaded and installed alongside the project (So it doesn't have to be downloaded every time and every project can have it's own Maven version)
+
+After the script has ensured a suitable Maven version is available, this is used and all arguments and parameters are transparently forwarded to this.
+So simply adding the additional `w` to each of the Maven commands, there should be no difference to using a pre-installed Maven version.
+
+=== Using Maven
+
+This document can't provide you with all the details needed to get started with `Maven` itself.
+But there is a lot of good documentation out there.
+
+Justin McLean and Christofer Dutz even recorded a not quite 2 hour Maven training Video some time ago for another Apache project.
+
+It should handle all the details needed to get a general understanding of Maven and how it works.
+
+.Recording of a Maven Training for Apache Flex from 2016
+video::167857327[vimeo,width=640,height=420]
+
+=== Building the Apache Training Website with Maven
+
+The PLC4X Website is also part of the same GIT repository that contains the code and it is built by Maven as well.
+
+In order to build the website the following command should be sufficient:
+
+    mvn site
+
+However this will generate the website for each module inside it's `target/site` directory.
+Opening this in a browser and navigating from pages of one module to another will not work as these links expect a different directory structure.
+In order to create a fully navigatable version of the Website, the following command should be sufficient:
+
+    mvn site site:stage
+
+This will generate an additional `target/staging` directory which contains the fully functional version.
+
+A lot of documentation on Maven suggests to use the `site:site` goal directly instead of calling the `site` phase, but in case of Apache Training there is more than just the site generation that has to be executed.
+
+This is just a quick-start version of the site generation, for a fully detailed documentation please read the http://training.apache.org/developers/website.html[Website] documentation page.
diff --git a/src/site/asciidoc/developers/ci.adoc b/src/site/asciidoc/developers/ci.adoc
new file mode 100644
index 0000000..da4cf84
--- /dev/null
+++ b/src/site/asciidoc/developers/ci.adoc
@@ -0,0 +1,33 @@
+//
+//  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.
+//
+:imagesdir: ../images/
+
+== Continuous Integration
+
+We are currently using only Apache Jenkins for building.
+
+- Apache's Jenkins at: https://builds.apache.org/view/S-Z/job/Training/
+
+Only build jobs on Apache's Jenkins are allowed to publish SNAPSHOT versions of the Maven artifacts to Apaches Nexus as well as auto publish generated websites to production.
+
+=== Structure of the Jenkins Pipeline build
+
+We are using the Jenkins `multi-branch pipeline plugin` to automatically setup build for branches based upon the build definition in the `Jenkinsfile` in the root of the project.
+
+In general it decides between building of the `master` branch and all others.
+
+When building `master` the build not only builds the project itself, it also deploys the generated site content to the `asf-site` branch which deploys the website.
diff --git a/src/site/asciidoc/developers/contributing.adoc b/src/site/asciidoc/developers/contributing.adoc
new file mode 100644
index 0000000..e743769
--- /dev/null
+++ b/src/site/asciidoc/developers/contributing.adoc
@@ -0,0 +1,117 @@
+//
+//  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.
+//
+:imagesdir: ../images/
+
+== Contributing
+
+=== Forms of contribution
+
+There are multiple forms in which you can become involved with the Apache Training project.
+
+These usually are, but are not limited to:
+
+- Submitting Pull Requests
+- Filing Bug-Reports
+- Active communication on our mailing lists
+- Promoting the project (articles, blog posts, talks at conferences)
+- Documentation
+
+=== Pull-Requests
+
+The simplest way to submit code changes, is via a GitHub pull-request.
+
+In order to do this first create a GitHub account and sign into you account.
+
+After that's done, please to to our https://github.com/apache/incubator-training[GitHub site] and create a so-called `Fork`.
+
+image::contributing-github-fork.png[]
+
+What happens now, is that GitHub creates a full copy of the Apache Training repo in your account. Only you can commit to this.
+
+Now ideally you check-out your cloned repository:
+
+    git clone https://github.com/{your-user-id}/incubator-training.git
+
+Now you have a copy of Apache Training on your computer and you can change whatever you want and as it's your copy, you can even commit these changes without any danger of breaking things.
+
+As soon as you're finished with your changes and want us to have a look, it's time to create a so-called `Pull-Request`.
+
+You do that by going to your forked repository page on GitHub.
+
+Every forked repository has an additional button called "New Pull Request":
+
+image::contributing-github-create-pull-request.png[]
+
+If you click on this, we will receive a notification on your changes and can review them. We also can discuss your changes and have you perfect your pull request before we accept and merge it into Apache Training.
+
+==== Keeping your fork up to date
+
+As we are continuously working on Training and you created a copy of our repo, this will become out-of-date pretty soon.
+
+In order get the changes we introduced in the official repo you have to tell git about that.
+
+You do this locally by adding a new so-called `remote`. Per default the remote you cloned from is called `origin`.
+
+Usually you will call the second remote `upstream` but in general you can call it whatever you like.
+
+Add the remote on the commandline (or your git gui of choice):
+
+    git remote add upstream https://github.com/apache/incubator-training.git
+
+If you list all your remotes, with the following command:
+
+    git remote -v
+
+It should output something like this:
+
+    origin    https://github.com/{your-user-id}/incubator-training.git (fetch)
+    origin    https://github.com/{your-user-id}/incubator-training.git (push)
+    upstream    https://github.com/apache/incubator-training.git (fetch)
+    upstream    https://github.com/apache/incubator-training.git (push)
+
+If that's so, you're fine to continue, if not ... well you could ask for assistance on our dev-list.
+
+In order to get all changes of our upstream-repository, just execute the following command:
+
+    git pull upstream
+
+This will get all changed from upstream and merge them locally. In order to update your GitHub version, you have to push things back to `origin`. You can do this by executing the following command:
+
+    git push
+
+(If no remote is provided, git will use `origin` per default)
+
+===  Bug Reports
+
+We use https://issues.apache.org/jira/projects/TRAINING[JIRA] as our Bug & Issue Tracker.
+
+Feel free to submit `feature requests`, `bug reports`, `patches`, `comment on issues`, ...
+
+In order to be able to do so, you need to create an account first.
+
+Currently Apache has a separate login system for JIRA and all other services, this might change in the future, but right now it's the way things are.
+
+So if you are considering to contribute more than just a one-time-patch, please choose a username that hasn't been used by an existing http://people.apache.org/committer-index.html[Apache committer] as this will simplify things if we invite you to become part of the team.
+
+If you want to be assigned to an issue because you want to work on it, please request to be added to the JIRA groups on our http://training.apache.org/mailing-lists.html[developers mailing list]
+
+=== Documentation
+
+As our documentation and website are generated as a side-product of our build, contributing to this technically the same as contributing to the code.
+
+All our content is written in Asciidoctor and is located in `src/site/asciidoc` directories. For a reference of the Asciidoctor syntax please have a look at the https://asciidoctor.org/docs/user-manual/#introduction-to-asciidoctor[Asciidoctor documentation].
+
diff --git a/src/site/asciidoc/developers/decisions.adoc b/src/site/asciidoc/developers/decisions.adoc
new file mode 100644
index 0000000..bdb6f89
--- /dev/null
+++ b/src/site/asciidoc/developers/decisions.adoc
@@ -0,0 +1,66 @@
+//
+//  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.
+//
+:imagesdir: ../images/
+
+== Decision Making
+
+=== Introduction
+
+This document describes the roles and responsibilities of the project, who may vote, how voting works, how conflicts are resolved, etc.
+
+The https://www.apache.org/foundation/faq[Apache Foundation FAQ] and http://www.apache.org/foundation/faq.html[How-It-Works] explain the operation and background of the foundation. Terms used are defined in the https://www.apache.org/foundation/glossary[ASF glossary].
+
+Apache has a http://www.apache.org/foundation/policies/conduct.html[code of conduct] that it expects its members to follow.
+
+=== Roles and Responsibilities
+
+Apache projects define a set of https://www.apache.org/foundation/how-it-works.html#roles[roles] with associated rights and responsibilities.
+
+==== Project Management Committee
+
+The http://www.apache.org/dev/pmc.html#what-is-a-pmc[PMC] has many https://www.apache.org/foundation/how-it-works.html#pmc[responsibilities] including complying with http://www.apache.org/dev/pmc.html#policy[ASF policies], https://www.apache.org/foundation/board/reporting[reporting to the board], https://www.apache.org/foundation/voting.html[approving releases] and adding new http://www.apache.org/dev/pmc.html#newcommitter[committers] and http://www.apache.org/dev/pmc.html#newpmc[PMC members].
+
+==== The Chair
+
+The http://www.apache.org/dev/pmc.html#chair[chair] ensures board reports are submitted and that the project's roster is up to date.
+
+=== Decision Making
+
+Different decisions require different forms of approval but community consensus is always the goal. Voting when needed should be open for http://www.apache.org/legal/release-policy.html#release-approval[at least 72 hours].
+
+- https://www.apache.org/foundation/glossary.html#ConsensusApproval[Consensus Approval] – Consensus approval requires 3 https://www.apache.org/foundation/voting.html#binding-votes[binding] +1 votes and no -1 votes (https://www.apache.org/foundation/glossary.html#Veto[vetoes]).
+- https://www.apache.org/foundation/glossary.html#MajorityApproval[Majority Approval] – requires at least 3 https://www.apache.org/foundation/voting.html#binding-votes[binding] +1 votes more +1 votes than -1 votes.
+- https://www.apache.org/foundation/glossary.html#LazyConsensus[Lazy Consensus] – consensus no objections (‘silence gives assent’).
+
+|===
+|Action                     |Who can vote |Approval           |Where to vote             |Board approval required
+|Code change                |Committer    |Lazy Consensus     |public dev or commit list |
+|Release                    |PMC          |Majority Approval  |public dev list           |
+|New committer              |PMC          |Consensus Approval |private list              |
+|New PMC member             |PMC          |Consensus Approval |private list              |Yes 1)
+|Existing committer removal |PMC          |Consensus Approval |private list              |
+|Existing PMC removal       |PMC          |Consensus Approval |private list              |Yes 2)
+|Change chair               |PMC          |Consensus Approval |private list              |Yes 3)
+|===
+
+1. http://www.apache.org/dev/pmc.html#notice_period[Notice] must be given to board.
+2. Except PMC member in question. Only the board can http://www.apache.org/dev/pmc.html#pmc-removal[remove PMC members].
+3. Need to be http://www.apache.org/dev/pmc.html#newchair[approved by the board] at the next board meeting.
+
+
+
+
diff --git a/src/site/asciidoc/developers/issues.adoc b/src/site/asciidoc/developers/issues.adoc
new file mode 100644
index 0000000..e9b5ac9
--- /dev/null
+++ b/src/site/asciidoc/developers/issues.adoc
@@ -0,0 +1,20 @@
+//
+//  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.
+//
+
+== Bug & Issue Tracker
+
+https://issues.apache.org/jira/projects/TRAINING
\ No newline at end of file
diff --git a/src/site/asciidoc/developers/team.adoc b/src/site/asciidoc/developers/team.adoc
new file mode 100644
index 0000000..4106238
--- /dev/null
+++ b/src/site/asciidoc/developers/team.adoc
@@ -0,0 +1,34 @@
+//
+//  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.
+//
+:imagesdir: ../images/
+:icons: font
+
+== Team
+
+Sorted by first name:
+
+[width="100%",cols="2,4,1,1",options="header"]
+|=========================================================
+|Name |Bio | |
+| *Christofer Dutz*
+
+ IoT Consultant
+
+ codecentric AG
+
+ Frankfurt |Likes to swim outside the mainstream. He is really passionate about walking new paths. His first email to an Apache list on file was to the Cocoon project back in the year 2000. His direct involvement started in 2012 when he was elected to become an Apache Flex committer. Since then he became involved with a lot of Apache-internal groups and committees and was elected to become a Member of the Apache Software Foundation in 2015 and recently has taken up the role of mentoring  [...]
+
diff --git a/src/site/asciidoc/developers/website.adoc b/src/site/asciidoc/developers/website.adoc
new file mode 100644
index 0000000..69c2ac7
--- /dev/null
+++ b/src/site/asciidoc/developers/website.adoc
@@ -0,0 +1,159 @@
+//
+//  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.
+//
+
+== Generating the Website
+
+We are currently using the normal `Maven` build to not only generate the project artifacts, but also the projects website.
+
+In order to provide content, every module can have a `src/site` directory. This content will be generated to that modules site-part.
+
+The `skin` being used to generate the site is none of the default `Maven` skins, but a more up-to-date looking skin using:
+
+- Bootstrap (For the CSS)
+- JQuery (For the JavaScript magic)
+- Fontawesome (For icons and symbols)
+
+But we don't have to worry about the details, all is configured to be used automatically.
+
+The site content itself is generated from `asciidoc` files (ending `.adoc`) which is a simple yet powerful markup language.
+(See http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/[AsciiDoc Syntax Quick Reference] or https://powerman.name/doc/asciidoc[AsciiDoc cheatsheet] for details)
+
+Beyond the basic goodies, the build is also configured to generate images from ASCII data using the `asciidoctor-diagram` plugin.
+
+This allows us to generate images like the ones on the http://plc4x.apache.org/protocols/s7/index.html[S7 Protocol Description page]
+
+=== Providing new content
+
+Within the `src/site` directory there is a file `site.xml` which generally controls the menu and the look of the site.
+
+Most setting are inherited from the `training` parent module. That's also why this is more complicated than the others.
+
+The `site.xml` file is optional. Even if this is not available a site will be generated however no additional content will be linked from any of the navigation menus.
+
+So if we wanted to add a new page on some (hopefully non existent) `Cool content`, we would create a file called:
+
+`index.adoc` in the `src/site/asciidoc/content/cool` directory.
+
+For example with this content:
+
+```
+== Cool Hello World
+
+Here comes some extremely cool content.
+
+```
+
+=== Adding links to menus
+
+In order to add links to the menus, you have to create or modify the `site.xml` for the module you want to add content to.
+
+The simplest form would probably be something like this:
+
+```
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+ 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.
+
+ -->
+<project name="PLC4J">
+
+  <body>
+    <menu name="content">
+      <item name="cool" href="https://training.apache.org/content/cool.html"/>
+    </menu>
+  </body>
+
+</project>
+```
+
+This will generate a `content` menu at the end, and this has one link named `cool`.
+
+Notice that the link has to have a file ending of `.html` and not `.adoc`.
+
+If you want to insert the menu somewhere else, you will have to re-define the entire menu.
+
+```
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+ 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.
+
+ -->
+<project name="PLC4J">
+
+  <body>
+
+      <menu ref="reports" inherit="top"/>
+      <menu ref="parent" inherit="top"/>
+
+      <menu name="content">
+        <item name="cool" href="https://training.apache.org/content/cool.html"/>
+      </menu>
+
+      <menu ref="modules" inherit="top"/>
+
+  </body>
+
+</project>
+```
+
+The `menu ref` items hereby reference standard menus provided by the `Maven` build.
+
+=== Deploying the Website
+
+The Apache Training project uses Apache `gitpubsub` system for maintaining the website.
+
+In general all content in a repos `asf-site` branch is copied to the Webservers, if that repo is registered for it.
+
+The content in this branch is generated and maintained during the `Maven` build as part of the `site` generation if the `site-deploy` phase is executed.
+
+The build system needs to check-in content to the `asf-site` branch and usually ASF Jenkins nodes don't have the permissions to do that.
+
+In order to be able to push to the `asf-site` GIT branch, a dedicated build job is configured to build on nodes with the Jenkins label `git-websites`.
+
+Only on these machines are jobs allowed to push changes to a Git repo and here only to a branch named `asf-site`.
+
+See https://builds.apache.org/view/M-R/job/PLC4X/job/PLC4X%20Site/ for details on the PLC4X Jenkins Website build job.
+
+As soon as content is updated in the `asf-site` the `gitpubsub` mechanism will make those changes available at https://training.apache.org
diff --git a/src/site/asciidoc/developers/wiki.adoc b/src/site/asciidoc/developers/wiki.adoc
new file mode 100644
index 0000000..9ec907b
--- /dev/null
+++ b/src/site/asciidoc/developers/wiki.adoc
@@ -0,0 +1,20 @@
+//
+//  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.
+//
+
+== WIKI
+
+https://cwiki.apache.org/confluence/display/TRAINING
\ No newline at end of file
diff --git a/src/site/asciidoc/index.adoc b/src/site/asciidoc/index.adoc
new file mode 100644
index 0000000..e94d20b
--- /dev/null
+++ b/src/site/asciidoc/index.adoc
@@ -0,0 +1,65 @@
+//
+//  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.
+//
+:imagesdir: images/
+:icons: font
+
+== Apache Training™ (Incubating)
+
+=== Purpose
+The purpose of the Training project is to create high-quality training material for various projects in an open source form. Up until now everyone who wants to offer a Training course for one of the Apache projects needs to create her or his own slides/labs and keep them up-to-date. This is a significant investment of time and money. This project aims to spread that burden and help all Apache projects as we can create shared resources and we can also create cross-project trainings.
+
+To sum up, the main goals for this project:
+
+- Develop shared material that can be used for trainings
+- Cross-project
+    - Focused on Apache but also 3rd party projects where it makes sense
+    - Develop “labs” or “hands-on” exercises
+- Develop or document an infrastructure that can be used for those labs
+- Potentially develop tools to manage the material (e.g. a “slide” repository that contains “modules” that can be easily reused and combined)
+
+These are non-goals for this project:
+
+- Some kind of official “Apache Training Program” with certifications etc.
+    - Based on feedback and future developments this may change but we believe it’s out of scope initially
+- Project documentation
+- The training material we develop is not necessarily self-explanatory. It still benefits from an experienced instructor but it will make it possible for talented people without the time and resources to develop material to still train others.
+
+=== Rationale
+There are tons of companies offering training for and around the Apache ecosystem. From our experience everyone is building a very similar set of slides and labs (there’s only so many ways you can explain a concept). This project aims to create and use synergies. By also bringing these resources closer to their origin we hope to improve quality, freshness of the content and versatility (e.g. more language options).
+
+It is the mission of the Apache foundation “to provide software for the public good” and we believe this project can help with that mission by making the software more accessible for a broader audience.
+
+=== Next steps
+The initial goal for the first few weeks or months is to have discussions and agreements on various scoping and technical issues as well as integrating existing donated material.
+
+After that we want to start building a library of content.
+
+=== Getting involved
+
+The main resource for any discussion around this project is the dev mailing list (see below). If you have any specific question or want to get involved in any way, by all means do reach out and say hi!
+
+The following resources are currently being used by the project:
+
+Dev Mailing List: [Archive](https://lists.apache.org/list.html?dev@training.apache.org)  -  [Subscribe](mailto:dev-subscribe@training.apache.org)
+
+Issues Mailing List: [Archive](https://lists.apache.org/list.html?issues@training.apache.org)  -  [Subscribe](mailto:issues-subscribe@training.apache.org)
+
+Commits Mailing List: [Archive](https://lists.apache.org/list.html?commits@training.apache.org)  -  [Subscribe](mailto:commits-subscribe@training.apache.org)
+
+Wiki: [https://cwiki.apache.org/confluence/display/TRAINING](https://cwiki.apache.org/confluence/display/TRAINING)
+
+Jira: [https://issues.apache.org/jira/browse/TRAINING](https://issues.apache.org/jira/browse/TRAINING)
diff --git a/src/site/resources/css/bootstrap-responsive.min.css b/src/site/resources/css/bootstrap-responsive.min.css
new file mode 100644
index 0000000..42b08d3
--- /dev/null
+++ b/src/site/resources/css/bootstrap-responsive.min.css
@@ -0,0 +1,20 @@
+/*
+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 just a dummy as we are using local resources and that causes the skin to look for this file */
\ No newline at end of file
diff --git a/src/site/resources/css/site.css b/src/site/resources/css/site.css
new file mode 100644
index 0000000..0063fee
--- /dev/null
+++ b/src/site/resources/css/site.css
@@ -0,0 +1,91 @@
+/*
+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.
+*/
+
+/* Import the fontawesome 5 css */
+@import url("all.min.css");
+
+.green {
+    color: #008000;
+}
+
+.yellow {
+    color: #ffa500;
+}
+
+.red {
+    color: #ff0000;
+}
+
+.protocolIsoOnTcp {
+    background-color: #068D9D;
+}
+
+.protocolIsoTP {
+    background-color: #53599A;
+}
+
+.protocolS7 {
+    background-color: #6D9DC5;
+}
+
+.protocolId {
+    background-color: #AEECEF;
+}
+
+.protocolParameter {
+    background-color: #80DED9;
+}
+
+.pull-right {
+    width: 400px;
+}
+
+#bannerRight > img {
+    width: 400px;
+}
+
+#apacheEvents {
+    position: relative;
+    width: 234px;
+    top: 20px;
+    left: 83px
+}
+
+/* Set where the focus will be set when using anchor links */
+h2[id]:before {
+    display: block;
+    content: "";
+    height: 360px;
+    margin: -360px 0 0;
+}
+
+/* Set where the focus will be set when using anchor links */
+h3[id]:before, h4[id]:before, h5[id]:before, h6[id]:before, a[name]:before {
+    display: block;
+    content: "";
+    height: 106px;
+    margin: -106px 0 0;
+}
+
+/* Re-Format the position of the "to top" link */
+body > div.container.subfooter > div > div > p.pull-right {
+    width: 100px;
+    height: 60px;
+    text-align: right;
+}
diff --git a/src/site/resources/images/contributing-github-create-pull-request.png b/src/site/resources/images/contributing-github-create-pull-request.png
new file mode 100644
index 0000000..1d8721a
Binary files /dev/null and b/src/site/resources/images/contributing-github-create-pull-request.png differ
diff --git a/src/site/resources/images/contributing-github-fork.png b/src/site/resources/images/contributing-github-fork.png
new file mode 100644
index 0000000..8600ffd
Binary files /dev/null and b/src/site/resources/images/contributing-github-fork.png differ
diff --git a/src/site/resources/images/team/cdutz.png b/src/site/resources/images/team/cdutz.png
new file mode 100644
index 0000000..2e42eb5
Binary files /dev/null and b/src/site/resources/images/team/cdutz.png differ
diff --git a/src/site/site.xml b/src/site/site.xml
new file mode 100644
index 0000000..fb6ef10
--- /dev/null
+++ b/src/site/site.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 
+ 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.
+ 
+ -->
+<project name="Training">
+
+  <skin>
+    <groupId>io.github.devacfr.maven.skins</groupId>
+    <artifactId>reflow-maven-skin</artifactId>
+    <version>${reflow.skin.version}</version>
+  </skin>
+
+  <!-- Hide the publish date as this will cause changes on every generated page every day -->
+  <publishDate position="none"/>
+  <!-- Hide the version as we are usually deploying the develop version -->
+  <version position="none" />
+
+  <!--
+      Details on how to configure the reflow skin:
+      http://andriusvelykis.github.io/reflow-maven-skin/skin/
+  -->
+  <custom>
+    <reflowSkin>
+      <localResources>true</localResources>
+      <absoluteResourceURL>https://training.apache.org/</absoluteResourceURL>
+      <titleTemplate>Apache Training� (Incubating) - %2$s</titleTemplate>
+      <slogan position="bannerLeft">Training material for Apache projects</slogan>
+      <showApacheEvents>true</showApacheEvents>
+      <toc>top</toc>
+      <bottomNav maxSpan="6">
+        <column>Apache</column>
+        <column>modules</column>
+      </bottomNav>
+      <brand>
+        <name>Apache Training (Incubating)</name>
+        <href>https://training.apache.org/</href>
+      </brand>
+      <bottomDescription>
+        <![CDATA[
+          <p id="bottomNote" style="font-size: 15px">
+          Apache Training is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that  [...]
+          </p>
+        ]]>
+      </bottomDescription>
+      <breadcrumbs>true</breadcrumbs>
+      <highlightJs>true</highlightJs>
+      <pages>
+        <developer-info>
+          <toc>sidebar</toc>
+        </developer-info>
+      </pages>
+    </reflowSkin>
+  </custom>
+
+  <poweredBy>
+    <logo name="Apache Software Foundation" img="https://www.apache.org/images/asf_logo.png" href="https://www.apache.org/"/>
+  </poweredBy>
+
+  <bannerLeft>
+      <name>Apache Training (incubating)</name>
+      <src>https://training.apache.org/images/apache_training_logo.png</src>
+      <href>https://training.apache.org/</href>
+  </bannerLeft>
+
+  <bannerRight>
+    <name>Apache Incubator</name>
+    <src>https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png</src>
+    <href>http://incubator.apache.org/</href>
+  </bannerRight>
+
+  <body>
+    <head>
+      <!-- Use JQuery to manipulate the final output of the page, which is a lot simpler than adjusting the templates for site generation. -->
+      <![CDATA[
+        <script>
+          document.addEventListener("DOMContentLoaded", function(event) {
+            /* Add an image for promoting Apache events below the right banner */
+            $("#bannerRight").append('<p id="apacheEvents"><a href="//www.apache.org/events/current-event.html"><img src="//www.apache.org/events/current-event-234x60.png"/></a></p>');
+            /* Append the trademarks info to the copyright section */
+            $(".copyright").append('<p>Apache Training, Apache, the Apache feather logo, and the Apache Training project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>');
+          });
+        </script>
+      ]]>
+    </head>
+
+    <menu name="Developers">
+      <item name="Bug &amp; Issue Tracker" href="developers/issues.html"/>
+      <item name="Building Training" href="developers/building.html"/>
+      <item name="Continuous Integration" href="developers/ci.html"/>
+      <item name="Contributing" href="developers/contributing.html"/>
+      <item name="Decision Making" href="developers/decisions.html"/>
+      <!--item name="Maturity" href="developers/maturity.html"/>
+      <item name="Releasing" href="developers/release.html"/-->
+      <item name="Team" href="developers/team.html"/>
+      <item name="Website" href="developers/website.html"/>
+      <item name="Wiki" href="developers/wiki.html"/>
+    </menu>
+    <menu name="Apache" inherit="bottom">
+      <item name="Apache Software Foundation" href="http://www.apache.org/"/>
+      <item name="How Apache Works" href="https://www.apache.org/foundation/how-it-works.html"/>
+      <item name="License" href="http://www.apache.org/licenses/"/>
+      <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
+      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
+    </menu>
+    <menu ref="modules" inherit="bottom"/>
+  </body>
+
+</project>
\ No newline at end of file
diff --git a/tools/clean-site.sh b/tools/clean-site.sh
new file mode 100644
index 0000000..a8c9333
--- /dev/null
+++ b/tools/clean-site.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env 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.
+##
+################################################################################
+
+# Remove all the css and js directories except the ones in the root of the site.
+find target/staging -type d | grep 'target\/staging\/.*\/css$' | xargs rm -r
+find target/staging -type d | grep 'target\/staging\/.*\/js$' | xargs rm -r
+
+# Delete some individual images.
+find target/staging -type f | grep 'target\/staging\/.*/images/close\.png$' | xargs rm
+find target/staging -type f | grep 'target\/staging\/.*/images/close\.gif$' | xargs rm
+find target/staging -type f | grep 'target\/staging\/.*/images/loading\.png$' | xargs rm
+find target/staging -type f | grep 'target\/staging\/.*/images/loading\.gif$' | xargs rm
+find target/staging -type f | grep 'target\/staging\/.*/images/next\.png$' | xargs rm
+find target/staging -type f | grep 'target\/staging\/.*/images/prev\.png$' | xargs rm
+
+# Delete any now empty directories.
+find target/staging -type d -empty | xargs rm -r
\ No newline at end of file