15823: Skip slow parts of doc rendering if NO_SDK env var is set.
[arvados.git] / doc / Rakefile
1 #!/usr/bin/env rake
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: CC-BY-SA-3.0
5
6 # As a convenience to the documentation writer, you can touch a file
7 # called 'no-sdk' in the 'doc' directory and it will suppress
8 # generating the documentation for the SDKs, which (the R docs
9 # especially) take a fair bit of time and slow down the edit-preview
10 # cycle.
11
12 require "rubygems"
13 require "colorize"
14
15 task :generate => [ :realclean, 'sdk/python/arvados/index.html', 'sdk/R/arvados/index.html', 'sdk/java-v2/javadoc/index.html' ] do
16   vars = ['baseurl', 'arvados_cluster_uuid', 'arvados_api_host', 'arvados_workbench_host']
17   vars.each do |v|
18     if ENV[v]
19       website.config.h[v] = ENV[v]
20     end
21   end
22 end
23
24 file "sdk/python/arvados/index.html" do |t|
25   if ENV['NO_SDK'] || File.exists?("no-sdk")
26     next
27   end
28   `which epydoc`
29   if $? == 0
30     STDERR.puts `epydoc --html --parse-only -o sdk/python/arvados ../sdk/python/arvados/ 2>&1`
31     raise if $? != 0
32   else
33     puts "Warning: epydoc not found, Python documentation will not be generated".colorize(:light_red)
34   end
35 end
36
37 file "sdk/R/arvados/index.html" do |t|
38   if ENV['NO_SDK'] || File.exists?("no-sdk")
39     next
40   end
41   `which R`
42   if $? == 0
43     tgt = Dir.pwd
44     Dir.mkdir("sdk/R")
45     Dir.mkdir("sdk/R/arvados")
46     puts("tgt", tgt)
47     cp('css/R.css', 'sdk/R/arvados')
48     docfiles = []
49     Dir.chdir("../sdk/R/") do
50       STDERR.puts `Rscript createDoc.R README.Rmd #{tgt}/sdk/R/README.md 2>&1`
51       Dir.entries("man").each do |rd|
52         if rd[-3..-1] == ".Rd"
53           htmlfile = "#{rd[0..-4]}.html"
54           `R CMD Rdconv -t html man/#{rd} > #{tgt}/sdk/R/arvados/#{htmlfile}`
55           docfiles << htmlfile
56         end
57       end
58     end
59     raise if $? != 0
60
61     File.open("sdk/R/README.md", "r") do |rd|
62     File.open("sdk/R/index.html.md", "w") do |fn|
63       fn.write(<<-EOF
64 ---
65 layout: default
66 navsection: sdk
67 navmenu: R
68 title: "R SDK Overview"
69 ...
70
71 #{rd.read.gsub(/^```$/, "~~~").gsub(/^```(\w)$/, "~~~\\1")}
72 EOF
73               )
74       end
75     end
76
77     File.open("sdk/R/arvados/index.html.textile.liquid", "w") do |fn|
78       fn.write(<<-EOF
79 ---
80 layout: default
81 navsection: sdk
82 navmenu: R
83 title: "R Reference"
84 ...
85 {% comment %}
86 Copyright (C) The Arvados Authors. All rights reserved.
87
88 SPDX-License-Identifier: CC-BY-SA-3.0
89 {% endcomment %}
90
91 EOF
92               )
93
94       docfiles.sort.each do |d|
95         fn.write("* \"#{d[0..-6]}\":#{d}\n")
96       end
97
98     end
99   else
100     puts "Warning: R not found, R documentation will not be generated".colorize(:light_red)
101   end
102 end
103
104 file "sdk/java-v2/javadoc/index.html" do |t|
105   if ENV['NO_SDK'] || File.exists?("no-sdk")
106     next
107   end
108   `which java`
109   if $? == 0
110     `which gradle`
111     if $? != 0
112       puts "Warning: gradle not found, java sdk documentation will not be generated".colorize(:light_red)
113     else
114       tgt = Dir.pwd
115       docfiles = []
116       Dir.chdir("../sdk/java-v2") do
117         STDERR.puts `gradle javadoc 2>&1`
118         raise if $? != 0
119         puts `sed -i "s/@import.*dejavu.css.*//g" build/docs/javadoc/stylesheet.css`
120         raise if $? != 0
121       end
122       cp_r("../sdk/java-v2/build/docs/javadoc", "sdk/java-v2")
123       raise if $? != 0
124     end
125   else
126     puts "Warning: java not found, java sdk documentation will not be generated".colorize(:light_red)
127   end
128 end
129
130 task :linkchecker => [ :generate ] do
131   Dir.chdir(".site") do
132     `which linkchecker`
133     if $? == 0
134       system "linkchecker index.html --ignore-url='!file://'" or exit $?.exitstatus
135     else
136       puts "Warning: linkchecker not found, skipping run".colorize(:light_red)
137     end
138   end
139 end
140
141 task :clean do
142   rm_rf "sdk/python/arvados"
143   rm_rf "sdk/R"
144   rm_rf "sdk/java-v2/javadoc"
145 end
146
147 require "zenweb/tasks"
148 load "zenweb-textile.rb"
149 load "zenweb-liquid.rb"
150
151 task :extra_wirings do
152   $website.pages["sdk/python/python.html.textile.liquid"].depends_on("sdk/python/arvados/index.html")
153 end