17119: one more change after review feedback.
[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 module Zenweb
16   class Site
17     @binary_files = %w[png jpg gif eot svg ttf woff2? ico pdf m4a t?gz xlsx]
18   end
19 end
20
21 task :generate => [ :realclean, 'sdk/python/arvados/index.html', 'sdk/R/arvados/index.html', 'sdk/java-v2/javadoc/index.html' ] do
22   vars = ['baseurl', 'arvados_cluster_uuid', 'arvados_api_host', 'arvados_workbench_host']
23   if ! ENV.key?('baseurl') || ENV['baseurl'] == ""
24     if !ENV.key?('WORKSPACE') || ENV['WORKSPACE'] == ""
25       puts "The `baseurl` variable was not specified and the `WORKSPACE` environment variable is not set. Defaulting `baseurl` to file://#{pwd}/.site"
26       ENV['baseurl'] = "file://#{pwd}/.site/"
27     else
28       puts "The `baseurl` variable was not specified, defaulting to a value derived from the `WORKSPACE` environment variable"
29       ENV['baseurl'] = "file://#{ENV['WORKSPACE']}/doc/.site/"
30     end
31   end
32   vars.each do |v|
33     if ENV[v]
34       website.config.h[v] = ENV[v]
35     end
36   end
37 end
38
39 file ["install/new_cluster_checklist_Azure.xlsx", "install/new_cluster_checklist_AWS.xlsx"] do |t|
40   cp(t, t)
41 end
42
43 file "sdk/python/arvados/index.html" do |t|
44   if ENV['NO_SDK'] || File.exists?("no-sdk")
45     next
46   end
47   `which pdoc`
48   if $? == 0
49     STDERR.puts `pdoc --html -o sdk/python ../sdk/python/arvados/ 2>&1`
50     raise if $? != 0
51   else
52     puts "Warning: pdoc3 not found, Python documentation will not be generated".colorize(:light_red)
53   end
54 end
55
56 file "sdk/R/arvados/index.html" do |t|
57   if ENV['NO_SDK'] || File.exists?("no-sdk")
58     next
59   end
60   `which R`
61   if $? == 0
62     tgt = Dir.pwd
63     Dir.mkdir("sdk/R")
64     Dir.mkdir("sdk/R/arvados")
65     puts("tgt", tgt)
66     cp('css/R.css', 'sdk/R/arvados')
67     docfiles = []
68     Dir.chdir("../sdk/R/") do
69       STDERR.puts `Rscript createDoc.R README.Rmd #{tgt}/sdk/R/README.md 2>&1`
70       Dir.entries("man").each do |rd|
71         if rd[-3..-1] == ".Rd"
72           htmlfile = "#{rd[0..-4]}.html"
73           `R CMD Rdconv -t html man/#{rd} > #{tgt}/sdk/R/arvados/#{htmlfile}`
74           docfiles << htmlfile
75         end
76       end
77     end
78     raise if $? != 0
79
80     File.open("sdk/R/README.md", "r") do |rd|
81     File.open("sdk/R/index.html.md", "w") do |fn|
82       fn.write(<<-EOF
83 ---
84 layout: default
85 navsection: sdk
86 navmenu: R
87 title: "R SDK Overview"
88 ...
89
90 #{rd.read.gsub(/^```$/, "~~~").gsub(/^```(\w)$/, "~~~\\1")}
91 EOF
92               )
93       end
94     end
95
96     File.open("sdk/R/arvados/index.html.textile.liquid", "w") do |fn|
97       fn.write(<<-EOF
98 ---
99 layout: default
100 navsection: sdk
101 navmenu: R
102 title: "R Reference"
103 ...
104 {% comment %}
105 Copyright (C) The Arvados Authors. All rights reserved.
106
107 SPDX-License-Identifier: CC-BY-SA-3.0
108 {% endcomment %}
109
110 EOF
111               )
112
113       docfiles.sort.each do |d|
114         fn.write("* \"#{d[0..-6]}\":#{d}\n")
115       end
116
117     end
118   else
119     puts "Warning: R not found, R documentation will not be generated".colorize(:light_red)
120   end
121 end
122
123 file "sdk/java-v2/javadoc/index.html" do |t|
124   if ENV['NO_SDK'] || File.exists?("no-sdk")
125     next
126   end
127   `which java`
128   if $? == 0
129     `which gradle`
130     if $? != 0
131       puts "Warning: gradle not found, java sdk documentation will not be generated".colorize(:light_red)
132     else
133       tgt = Dir.pwd
134       docfiles = []
135       Dir.chdir("../sdk/java-v2") do
136         STDERR.puts `gradle javadoc 2>&1`
137         raise if $? != 0
138         puts `sed -i "s/@import.*dejavu.css.*//g" build/docs/javadoc/stylesheet.css`
139         raise if $? != 0
140       end
141       cp_r("../sdk/java-v2/build/docs/javadoc", "sdk/java-v2")
142       raise if $? != 0
143     end
144   else
145     puts "Warning: java not found, java sdk documentation will not be generated".colorize(:light_red)
146   end
147 end
148
149 task :linkchecker => [ :generate ] do
150   Dir.chdir(".site") do
151     `which linkchecker`
152     if $? == 0
153       system "linkchecker index.html --ignore-url='!file://'" or exit $?.exitstatus
154     else
155       puts "Warning: linkchecker not found, skipping run".colorize(:light_red)
156     end
157   end
158 end
159
160 task :import_vscode_training do
161   Dir.chdir("user") do
162   rm_rf "arvados-vscode-cwl-training"
163   `git clone https://github.com/arvados/arvados-vscode-cwl-training`
164   githash = `git --git-dir arvados-vscode-cwl-training/.git log -n1 --format=%H HEAD`
165   File.open("cwl/arvados-vscode-training.html.md.liquid", "w") do |fn|
166     File.open("arvados-vscode-cwl-training/README.md", "r") do |rd|
167       fn.write(<<-EOF
168 ---
169 layout: default
170 navsection: userguide
171 title: "Developing CWL Workflows with VSCode"
172 ...
173 {% comment %}
174 Copyright (C) The Arvados Authors. All rights reserved.
175
176 SPDX-License-Identifier: CC-BY-SA-3.0
177
178 Imported from https://github.com/arvados/arvados-vscode-cwl-training
179 git hash: #{githash}
180 {% endcomment %}
181
182 EOF
183               )
184                fn.write(rd.read())
185     end
186   end
187   rm_rf "arvados-vscode-cwl-training"
188   end
189 end
190
191 task :clean do
192   rm_rf "sdk/python/arvados"
193   rm_rf "sdk/R"
194   rm_rf "sdk/java-v2/javadoc"
195 end
196
197 require "zenweb/tasks"
198 load "zenweb-textile.rb"
199 load "zenweb-liquid.rb"
200 load "zenweb-fix-body.rb"
201
202 task :extra_wirings do
203   $website.pages["sdk/python/python.html.textile.liquid"].depends_on("sdk/python/arvados/index.html")
204 end