Optimizations for single project usage

This commit is contained in:
Blerim Sheqa 2017-10-10 14:10:19 +02:00
parent 699bd3e962
commit 14d314dd8f
13 changed files with 172 additions and 71 deletions

BIN
.config.example.yml.swp Normal file

Binary file not shown.

3
.gitignore vendored
View File

@ -1,3 +1,4 @@
config.yml
mkdocs.yml mkdocs.yml
.bundle/ .bundle/
vendor/ vendor/
@ -5,8 +6,6 @@ Gemfile.lock
html/ html/
projects/* projects/*
!projects/ !projects/
!projects/index.md
!projects/archive.md
.idea/ .idea/
.DS_Store .DS_Store

View File

@ -61,6 +61,18 @@ Clone this repository and install dependencies:
user@localhost ~/ $ git clone https://github.com/Icinga/icinga-docs-tools.git user@localhost ~/ $ git clone https://github.com/Icinga/icinga-docs-tools.git
user@localhost ~/ $ cd icinga-docs-tools user@localhost ~/ $ cd icinga-docs-tools
user@localhost ~/ $ bundle install --path vendor user@localhost ~/ $ bundle install --path vendor
```
Create and configure configuration file:
``` bash
user@localhost ~/ $ cp config.example.yml config.yml
user@localhost ~/ $ vim config.yml
```
Build documentation:
``` bash
user@localhost ~/ $ bundle exec build-docs.rb user@localhost ~/ $ bundle exec build-docs.rb
``` ```

View File

@ -1,18 +1,47 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
require 'optparse'
require 'fileutils' require 'fileutils'
require 'yaml' require 'yaml'
require 'git' require 'git'
config = YAML::load_file('config.yml') options = {}
mkdocs = YAML::load_file('mkdocs.template.yml') OptionParser.new { |opts|
opts.banner = "Usage: #{File.basename($0)} -c config.yml -t mkdocs.template.yml}"
options[:config] = 'config.yml'
opts.on('-f',
'--config FILENAME',
'Configuration file with project definition. Defaults to "config.yml"') do |config|
options[:config] = config
end
options[:template] = 'mkdocs.template.yml'
opts.on('-t',
'--template FILENAME',
'This file is used as template for the generated mkdocs.yaml. Defaults to "mkdocs.template.yml"') do |template|
options[:template] = template
end
opts.on_tail('-h', '--help', 'Show this message') do
puts opts
exit
end
}.parse!
config = YAML::load_file(options[:config])
mkdocs = YAML::load_file(options[:template])
categories = {} categories = {}
mkdocs['pages'] = []
config['projects'].each do |project_name, project_config| config['projects'].each do |project_name, project_config|
puts "== #{project_name}" puts "== #{project_name}"
mkdocs['site_name'] = project_name
project_dir = config['projects_dir'] + '/' + project_config['target'] project_dir = config['projects_dir'] + '/' + project_config['target']
if project_config['latest'] == true if project_config['latest']
clone_target = project_dir + '/latest' clone_target = project_dir + '/latest'
elsif project_config['ref'] == 'master' elsif project_config['ref'] == 'master'
clone_target = project_dir + '/snapshot' clone_target = project_dir + '/snapshot'
@ -34,13 +63,12 @@ config['projects'].each do |project_name, project_config|
repo.fetch() repo.fetch()
puts "Checkout ref '#{project_config['ref']}'" puts "Checkout ref '#{project_config['ref']}'"
repo.branch(project_config['ref']).checkout repo.branch(project_config['ref']).checkout
repo.pull('origin', project_config['ref'])
end end
puts "Building page index from #{project_docs_dir}" puts "Building page index from #{project_docs_dir}"
Dir.glob("#{project_docs_dir}/*.md", File::FNM_CASEFOLD).sort.each do |file| Dir.glob("#{project_docs_dir}/*.md", File::FNM_CASEFOLD).sort.each do |file|
filepath = file.gsub('projects/', '') filepath = file.gsub('projects/', '')
filename = filepath.match(/(\d+)-(.*).md$/) filename = filepath.match(/.*(\d+)-(.*).md$/)
header = filename[2].gsub('-', ' ').split.map(&:capitalize).join(' ') header = filename[2].gsub('-', ' ').split.map(&:capitalize).join(' ')
pages.push(header => filepath) pages.push(header => filepath)
end end
@ -49,7 +77,11 @@ config['projects'].each do |project_name, project_config|
categories[project_config['category']] = [] unless categories[project_config['category']] categories[project_config['category']] = [] unless categories[project_config['category']]
categories[project_config['category']].push(project_name => pages) categories[project_config['category']].push(project_name => pages)
else else
mkdocs['pages'].push(project_name => pages) # MKdocs allows only 'index.md' as homepage. This is a dirty workaround to use the first markdown file instead
FileUtils.ln_s("#{pages[0].values[0]}", 'projects/index.md', :force => true)
mkdocs['pages'].push('' => 'index.md')
mkdocs['pages'].push(*pages)
end end
end end
@ -59,8 +91,10 @@ if categories
end end
end end
mkdocs['extra']['append_pages'].each do |name, target| if mkdocs['extra']['append_pages']
mkdocs['extra']['append_pages'].each do |name, target|
mkdocs['pages'].push(name => target) mkdocs['pages'].push(name => target)
end
end end
File.write('mkdocs.yml', mkdocs.to_yaml) File.write('mkdocs.yml', mkdocs.to_yaml)

10
config.example.yml Normal file
View File

@ -0,0 +1,10 @@
---
projects_dir: 'projects'
projects:
Icinga Web 2:
git: 'https://github.com/Icinga/icingaweb2.git'
ref: 'tags/v2.4.2'
latest: true
target: 'icingaweb2'
docs_dir: 'doc'

View File

@ -1,43 +0,0 @@
---
projects_dir: 'projects'
projects:
Icinga 2:
git: 'https://github.com/Icinga/icinga2.git'
ref: 'support/2.7'
latest: true
target: 'icinga2'
docs_dir: 'doc'
Icinga Web 2:
git: 'https://github.com/Icinga/icingaweb2.git'
ref: 'tags/v2.4.1'
latest: true
target: 'icingaweb2'
docs_dir: 'doc'
Director:
git: 'https://github.com/Icinga/icingaweb2-module-director.git'
ref: 'tags/v1.3.1'
latest: true
target: 'director'
docs_dir: 'doc'
category: 'Modules'
Business Process:
git: 'https://github.com/Icinga/icingaweb2-module-businessprocess.git'
ref: 'tags/v2.1.0'
latest: true
target: 'businessprocess'
docs_dir: 'doc'
category: 'Modules'
Fileshipper:
git: 'https://github.com/Icinga/icingaweb2-module-fileshipper.git'
ref: 'tags/v1.0.0'
latest: true
target: 'fileshipper'
docs_dir: 'doc'
category: 'Modules'
vSphere:
git: 'https://github.com/Icinga/icingaweb2-module-vsphere.git'
ref: 'tags/v1.1.0'
latest: true
target: 'vsphere'
docs_dir: 'doc'
category: 'Modules'

10
icinga2.yml Normal file
View File

@ -0,0 +1,10 @@
---
projects_dir: 'projects'
projects:
Icinga 2:
git: 'https://github.com/Icinga/icinga2.git'
ref: 'support/v2.7'
latest: true
target: 'icinga2'
docs_dir: 'doc'

View File

@ -1,14 +1,9 @@
--- ---
site_name: Documentation
theme: material theme: material
theme_dir: theme theme_dir: theme
docs_dir: projects docs_dir: projects
site_dir: 'html' site_dir: 'html'
pages:
- Introduction: index.md
extra: extra:
append_pages:
Archive: archive.md
font: font:
text: 'Open Sans:300,400,400i,600,700' text: 'Open Sans:300,400,400i,600,700'
menu: menu:

View File

@ -1,6 +0,0 @@
# Archive
Here you will find older versions of documentations and docs of older products.
#### Icinga 1.x
* [English Online](https://www.icinga.com/docs/icinga1/latest/en/)
* [German Online](https://www.icinga.com/docs/icinga1/latest/de/)

View File

@ -1,6 +0,0 @@
# Icinga Documentation
Welcome to the Icinga Documation. Please select your preferred product on the left.
Built on proven technologies and concepts as well as progressive frameworks and standards, Icinga is a product of the
community - their ideas, needs and combined passion for innovation.

1
projects/index.md Symbolic link
View File

@ -0,0 +1 @@
icinga2/latest/doc/01-about.md

View File

@ -116,6 +116,52 @@
line-height: 1em; line-height: 1em;
font-family: "Open Sans"; font-family: "Open Sans";
font-weight: 700; font-weight: 700;
overflow: visible;
}
.md-search__form {
margin-bottom: -3px;
}
.md-breadcrump-main {
background-color: #F3F3F4;
position: relative;
float: left;
width: 100%;
padding: 4px;
padding-bottom: 2px;
height: auto;
}
.md-breadcrump-inner {
position: relative;
margin: auto;
width: 80%;
padding: 2px;
}
.md-breadcrump-innner ul {
}
#breadcrump-list {
list-style-type: disc;
padding-left: 0px;
margin: 0px;
line-height: 26px;
}
.md-breadcrump-inner li a {
color: #0095bf;
font-size: 16px;
line-height: 16px;
margin: 0 5px;
padding: 5px 10px;
font-family: "Open Sans";
}
.md-breadcrump-inner li {
display: inline-block;
padding-top: 2px;
} }
.md-container { .md-container {
@ -123,6 +169,21 @@
font-family: "Open Sans" font-family: "Open Sans"
} }
.md-breadcrump-seperator {
padding: 0px;
margin: 0px;
font-size: 16px;
line-height: 16px;
color: #666;
}
.md-grid {
max-width: 1255px;
margin-right: auto;
margin-left: auto;
}
/* /*
.md-main__inner { .md-main__inner {
min-height: 100vh; min-height: 100vh;
@ -133,6 +194,14 @@
min-height: 60vh; min-height: 60vh;
} }
.md-sidebar--primary .md-nav__item {
padding: 0px;
}
.md-sidebar--primary .md-nav__item--nested li {
padding: 0 1.2rem;
}
.md-content a { .md-content a {
color: #0095BF; color: #0095BF;
} }

View File

@ -44,3 +44,15 @@
</div> </div>
</nav> </nav>
</header> </header>
<div class="md-breadcrump-main">
<div class="md-breadcrump-inner">
<ul id="breadcrump-list">
<li><a href="https://www.icinga.com/docs">Documentation</a></li>
<li>
<span class="md-breadcrump-seperator">/</span>
<a href="{{ base_url }}">{{ config.site_name }}</a>
</li>
</ul>
</div>
</div>

14
theme/partials/nav.html Normal file
View File

@ -0,0 +1,14 @@
<nav class="md-nav md-nav--primary" data-md-level="0">
{% if config.repo_url %}
<div class="md-nav__source">
{% include "partials/source.html" %}
</div>
{% endif %}
<ul class="md-nav__list" data-md-scrollfix>
{% for nav_item in nav %}
{% set path = "nav-" + loop.index | string %}
{% set level = 1 %}
{% include "partials/nav-item.html" %}
{% endfor %}
</ul>
</nav>