forked from puppetlabs/puppet-docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
219 lines (184 loc) · 6.62 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
require 'rubygems'
require 'rake'
require 'pathname'
require 'fileutils'
Dir.glob(File.join("vendor", "gems", "*", "lib")).each do |lib|
$LOAD_PATH.unshift(File.expand_path(lib))
end
begin
require "vlad"
Vlad.load :scm => :git
rescue LoadError
# do nothing
end
$LOAD_PATH.unshift File.expand_path('lib')
dependencies = %w(jekyll maruku rack versionomy kramdown)
references = %w(configuration function indirection metaparameter network report type)
namespace :install do
dependencies.each do |dep|
desc "Install '#{dep}' dependency"
task dep do
sh "gem install #{dep} --no-rdoc --no-ri"
end
end
end
desc "Install dependencies"
task :install => dependencies.map { |d| "install:#{d}" }
desc "Generate the documentation"
task :generate do
Dir.chdir("source")
system("../vendor/gems/jekyll-0.7.0/bin/jekyll --kramdown ../output")
Rake::Task['references:symlink'].invoke
Dir.chdir("..")
end
desc "Serve generated output on port 9292"
task :serve do
system("rackup")
end
desc "Generate docs and serve locally"
task :run => [:generate, :serve]
desc "Generate the documentation in a flat format for later PDF generation"
task :generate_pdf do
system("rm -rf pdf_source")
system("cp -rf source pdf_source")
system("cp -rf pdf_mask/* pdf_source") # Copy in and/or overwrite differing files
# The point being, this way we don't have to maintain separate copies of the actual source files, and it's clear which things are actually different for the PDF version of the page.
Dir.chdir("pdf_source")
system("../vendor/gems/jekyll-0.7.0/bin/jekyll --kramdown ../pdf_output")
Rake::Task['references:symlink:for_pdf'].invoke
Dir.chdir("../pdf_output")
system("cat `cat ../pdf_source/page_order.txt` > rebuilt_index.html")
system("mv index.html original_index.html")
system("mv rebuilt_index.html index.html")
puts "Remember to run rake serve_pdf"
puts "Remember to run wkhtmltopdf cover http://localhost:9292/cover.html http://localhost:9292/ puppet.pdf"
Dir.chdir("..")
end
desc "Serve generated flat-for-PDF output on port 9292"
task :serve_pdf do
system("rackup config_pdf.ru")
end
desc "Generate a new puppet.pdf in the project root"
task :build_pdf do
Dir.chdir("pdf_output")
system("pandoc -r html -w latex --toc --listings --standalone --xetex http://localhost:9292 --template kindle.template -o puppet.tex")
system("ln -s $PWD/images ../images")
system("xelatex puppet.tex")
# Yes, again for the Table of Contents. Isn't LaTeX screwy?
system("xelatex puppet.tex")
# Clean up hackish symlinks.
system("rm ../images")
Dir.chdir("..")
system("cp pdf_output/puppet.pdf .")
end
desc "Build documentation for a new Puppet version"
task :build => [ 'references:check_version', 'references:fetch_tags', 'references:stub', 'references:puppetdoc', 'references:update_manpages']
desc "Create tarball of documentation"
task :tarball do
FileUtils.cd 'output'
FileUtils.ln_sf 'files', 'guides/files'
FileUtils.ln_sf 'files', 'guides/types/files'
FileUtils.ln_sf 'files', 'guides/types/nagios/files'
FileUtils.ln_sf 'files', 'guides/types/selinux/files'
FileUtils.ln_sf 'files', 'guides/types/ssh/files'
FileUtils.ln_sf 'files', 'references/files'
sh "tar --ignore-failed-read -czf puppetdocs-latest.tar.gz *"
FileUtils.mv 'puppetdocs-latest.tar.gz', '..'
FileUtils.cd '..'
end
desc "Update the contents of source/man/{app}.markdown" # Note that the index must be built manually if new applications are added. Also, let's not ever have a `puppet index` command.
task :update_manpages do
puppet = ENV['PUPPETDIR']
applications = Dir.glob(%Q{#{puppet}/lib/puppet/application/*})
ronn = %x{which ronn}.chomp
unless File.executable?(ronn) then fail("Ronn does not appear to be installed.") end
applications.each do |app|
app.gsub!( /^#{puppet}\/lib\/puppet\/application\/(.*?)\.rb/, '\1')
headerstring = "---\nlayout: default\ntitle: puppet #{app} Manual Page\n---\n\npuppet #{app} Manual Page\n======\n\n"
manstring = %x{RUBYLIB=#{puppet}/lib:$RUBYLIB #{puppet}/bin/puppet #{app} --help | #{ronn} --pipe -f}
File.open(%Q{./source/man/#{app}.markdown}, 'w') do |file|
file.puts("#{headerstring}#{manstring}")
end
end
end
namespace :references do
namespace :symlink do
desc "Show the versions that will be symlinked"
task :versions do
require 'puppet_docs'
PuppetDocs::Reference.special_versions.each do |name, (version, source)|
puts "#{name}: #{version}"
end
end
desc "Symlink the latest & stable directories when generating a flat page for PDFing"
task :for_pdf do
require 'puppet_docs'
PuppetDocs::Reference.special_versions.each do |name, (version, source)|
Dir.chdir '../pdf_output/references' do
ln_sf version.to_s, name.to_s
end
end
end
end
desc "Symlink the latest & stable directories"
task :symlink do
require 'puppet_docs'
PuppetDocs::Reference.special_versions.each do |name, (version, source)|
Dir.chdir '../output/references' do
ln_sf version.to_s, name.to_s
end
end
end
namespace :puppetdoc do
references.each do |name|
desc "Write references/VERSION/#{name}"
task name => 'references:check_version' do
require 'puppet_docs'
PuppetDocs::Reference::Generator.new(ENV['VERSION'], name).generate
end
end
end
desc "Write all references for VERSION"
task :puppetdoc => references.map { |r| "puppetdoc:#{r}" }
namespace :index do
desc "Generate a stub index for VERSION"
task :stub => 'references:check_version' do
filename = Pathname.new('source/references') + ENV['VERSION'] + 'index.markdown'
filename.parent.mkpath
filename.open('w') do |f|
f.puts "---"
f.puts "layout: default"
f.puts "title: #{ENV['VERSION']} References"
f.puts "---\n\n\n"
f.puts "# #{ENV['VERSION']} References\n"
f.puts "* * *\n\n"
references.each do |name|
f.puts "* [#{name.capitalize}](#{name}.html)"
end
end
puts "Wrote #{filename}"
end
end
task :check_version do
abort "No VERSION given (must be a valid repo tag)" unless ENV['VERSION']
end
task :fetch_tags do
Dir.chdir("vendor/puppet")
sh "git fetch --tags"
Dir.chdir("../..")
end
end
task :deploy do
sh "rake mirror0 vlad:build"
sh "rake mirror0 vlad:release"
sh "rake mirror1 vlad:release"
sh "rake mirror2 vlad:release"
end
task :default => :spec
require 'rake/rdoctask'
Rake::RDocTask.new do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = "puppet-docs"
rdoc.rdoc_files.include('README*')
rdoc.rdoc_files.include('lib/**/*.rb')
end