| --- |
| layout: dev |
| title: How to Write Document |
| categories: development |
| permalink: /development/howto_docs.html |
| --- |
| |
| We write documents in MD format and convert to HTML using [Jekyll](http://jekyllrb.com). The Jekyll generated HTML gets uploaded to apache SVN and becomes Kylin website. All MD source files are managed in git so all changes and contributors are clearly tracked. |
| |
| ## Before your work |
| |
| Before you add or edit documentation, please deploy the document compilation environment. We provide two ways: |
| |
| - [Deploy a local document compilation environment](#Deploy a local document compilation environment) |
| - [Use Docker to deploy document compilation environment](#Use Docker to deploy document compilation environment) |
| |
| ### <span id="Deploy a local document compilation environment">Deploy a local document compilation environment</span> |
| |
| Install following tools before you add or edit documentation: |
| |
| 1. First, make sure Ruby and Gem work on your machine |
| * For Mac user, please refer [this](https://github.com/sstephenson/rbenv#homebrew-on-mac-os-x) to setup ruby env. |
| * For Windows user, use the [ruby installer](http://rubyinstaller.org/downloads/). |
| * For China user, consider use a [local gem repository](https://ruby.taobao.org/) in case of network issues. |
| |
| 2. Then, install [Jekyll](http://jekyllrb.com), and required plugins |
| * `gem install jekyll jekyll-multiple-languages kramdown rouge` |
| * __Note__: Some specific version of jekyll and jekyll-multiple-languages does not work together (I got a "undefined method" error with jekyll 3.0.1 and jekyll-multiple-languages 2.0.3). In that case, `jekyll 2.5.3` and `jekyll-multiple-languages 1.0.8` is the known working version. |
| * eg. Use `gem install jekyll --version "=2.5.3"` to install a specific version. |
| * __Note__: For Mac user, if gem install raise error like this 'ERROR: While executing gem ... (Gem::FilePermissionError)'. To solve this problem you can use 'brew install ruby', then restart you terminal. |
| 3. And optionally any markdown editor you prefer |
| |
| Below is a gem list that works. Stick to these versions if jekyll installation becomes a problem. |
| |
| ``` |
| $ gem list |
| |
| ... |
| jekyll (2.5.3) |
| jekyll-coffeescript (1.0.1) |
| jekyll-gist (1.4.0) |
| jekyll-multiple-languages (1.0.8) |
| jekyll-paginate (1.1.0) |
| jekyll-sass-converter (1.4.0) |
| jekyll-watch (1.3.1) |
| json (1.8.1) |
| kramdown (1.9.0) |
| ... |
| rouge (1.10.1) |
| ... |
| ``` |
| |
| ### <span id="Use Docker to deploy document compilation environment">Use Docker to deploy document compilation environment</span> |
| |
| The latest kylin release provides dockerfile, to reduce build complexity using docker and Makefile can call docker command. |
| |
| ``` |
| $ pwd |
| /Users/<username>/kylin/website |
| $ make docker.build |
| docker build -f Dockerfile -t kylin-document:latest . |
| Sending build context to Docker daemon 82.44MB |
| Step 1/3 : FROM jekyll/jekyll:2.5.3 |
| ---> e81842c29599 |
| Step 2/3 : RUN gem install jekyll-multiple-languages -v 1.0.11 |
| ---> Using cache |
| ---> e9e8b0f1d388 |
| Step 3/3 : RUN gem install rouge -v 3.0.0 |
| ---> Using cache |
| ---> 1bd42c6b93c0 |
| Successfully built 1bd42c6b93c0 |
| Successfully tagged kylin-document:latest |
| $ make runserver |
| docker run --volume="/Users/<username>/kylin/website:/srv/jekyll" -p 4000:4000 --rm -it kylin-document:latest jekyll server --watch |
| Configuration file: /srv/jekyll/_config.yml |
| Source: /srv/jekyll |
| Destination: /srv/jekyll/_site |
| Generating... |
| ... |
| ``` |
| |
| ## About Jekyll |
| Jekyll is a Ruby script to generate a static HTML website from source text and themes, the HTML is generated before being deployed to the web server. Jekyll also happens to be the engine behind GitHub Pages. |
| |
| Apache Kylin's website and documentation is using Jekyll to manage and generate final content which avaliable at [http://kylin.apache.org](http://kylin.apache.org). |
| |
| ## Multi-Language |
| To draft Chinese version document or translate existing one, just add or copy that doc and name with .cn.md as sufffix. It will generate under /cn folder with same name as html file. |
| To add other language, please update _config.yml and follow the same pattern as Chinese version. |
| |
| ## Kylin document structure and navigation menu |
| |
| The Kylin [website as the Jekyll source](https://github.com/apache/kylin/tree/document/website) is maintained under the `doucment` branch. |
| |
| 1. __Home Page__: _"index.md"_ Home page of Docs |
| 2. __Getting Started__: _"gettingstarted"_ General docs about Apache Kylin, including FAQ, Terminology |
| 3. __Installation__: _"install"_ Apache Kylin installation guide |
| 4. __Tutorial__: _"tutorial"_ User tutorial about how to use Apache Kylin |
| 5. __How To__: _"howto"_ Guide for more detail help |
| 6. __Development__: _"development"_ For developer to contribute, integration with other application and extend Apache Kylin |
| 7. __Others__: Other docs. |
| |
| The menu is managed by Jekyll collection: |
| |
| * ___data/docs.yml__: English version menu structure |
| * ___data/docs-cn.yml__: Chinese version menu structure |
| * __add new menu item__: To add new item: create new docs under relative folder, e.g howto_example.md. add following Front Mark: |
| |
| ``` |
| --- |
| layout: docs |
| title: How to expamle |
| categories: howto |
| permalink: /docs/howto/howto_example.html |
| version: v0.7.2 |
| since: v0.7.2 |
| --- |
| ``` |
| |
| change the __permalink__ to exactly link |
| Then add item to docs.yml like: |
| |
| ``` |
| - title: How To |
| docs: |
| - howto/howto_contribute |
| - howto/howto_jdbc |
| - howto/howto_example |
| ``` |
| |
| ## How to edit document |
| Open doc with any markdown editor, draft content and preview in local. |
| |
| Sample Doc: |
| |
| ``` |
| --- |
| layout: docs |
| title: How to example |
| categories: howto |
| permalink: /docs/howto/howto_example.html |
| version: v0.7.2 |
| since: v0.7.2 |
| --- |
| |
| ## This is example doc |
| The quick brown fox jump over the lazy dog. |
| ``` |
| |
| ## How to add image |
| All impage please put under _images_ folder, in your document, please using below sample to include image: |
| |
| ``` |
|  |
| ``` |
| |
| ## How to add link |
| Using relative path for site links, for example: |
| |
| ``` |
| [REST API](docs/development/rest_api.html). |
| ``` |
| |
| ## How to add code highlight |
| We are using [Rouge](https://github.com/jneen/rouge) to highlight code syntax. |
| check this doc's source code for more detail sample. |
| |
| ## How to preview in your local |
| You can preview in your markdown editor, to check exactly what it will looks like on website, please run Jekyll from `website` folder: |
| |
| ``` |
| jekyll server |
| ``` |
| Then access http://127.0.0.1:4000 in your browser. |
| |
| ## How to publish to website (for committer only) |
| |
| ### Setup |
| |
| 1. `cd website` |
| 2. `svn co https://svn.apache.org/repos/asf/kylin/site _site` |
| |
| ___site__ folder is working dir which will be removed anytime by maven or git, please make sure only check out from svn when you want to publish to website. |
| |
| ### Running locally |
| Before opening a pull request or push to git repo, you can preview changes from your local box with following: |
| |
| 1. `cd website` |
| 2. `jekyll s` |
| 3. Open [http://127.0.0.1:4000](http://127.0.0.1:4000) in your browser |
| |
| ### Pushing to site |
| |
| 1. Copy jekyll generated `_site` to svn `website/_site` |
| 2. `cd website/_site` |
| 3. `svn status` |
| 4. You will need to `svn add` any new files |
| 5. `svn commit -m 'UPDATE MESSAGE'` |
| |
| Within a few minutes, svnpubsub should kick in and you'll be able to |
| see the results at |
| [http://kylin.apache.org](http://kylin.apache.org/). |
| |
| |