shake: fix old manuals' deps; don't build them by default; refactor

[ci skip]
This commit is contained in:
Simon Michael 2019-02-11 13:07:06 -08:00
parent b3dd667feb
commit 3aad6696c9

121
Shake.hs
View File

@ -66,10 +66,12 @@ usage = unlines
["Usage:"
,"./Shake.hs (re)compile this script"
,"./Shake commandhelp build embedded help texts for the hledger CLI"
,"./Shake manuals build embedded txt/man/info manuals for all packages"
,"./Shake manuals build txt/man/info/html manuals for all packages"
,"./Shake oldmanuals build old versions of html manuals for all packages"
,"./Shake PKG build a single hledger package and its embedded docs"
,"./Shake build build all hledger packages and their embedded docs"
,"./Shake website build the website and web manuals"
,"./Shake website-all build the website and all web manual versions"
,"./Shake all build all the above"
,""
,"./Shake mainpages build the web pages from the main repo"
@ -139,8 +141,8 @@ main = do
-- NAMES, FILES, URIS..
let
-- documentation versions shown on the website (excluding 0.27 which is handled specially)
docversions = [ "1.0" , "1.1" , "1.2" , "1.3" , "1.4" , "1.5" , "1.9", "1.10", "1.11", "1.12", "1.13" ]
-- documentation versions shown on the website
docversions = [ "0.27", "1.0" , "1.1" , "1.2" , "1.3" , "1.4" , "1.5" , "1.9", "1.10", "1.11", "1.12", "1.13" ]
-- main package names, in standard build order
packages = [
@ -192,39 +194,37 @@ main = do
infomanuals = [manualDir m </> m <.> "info" | m <- manualNames]
-- individual manuals rendered to markdown, ready for conversion to html (site/hledger.md)
webmanuals = ["site" </> manpageNameToUri m <.> "md" | m <- manpageNames]
mdmanuals = ["site" </> manpageNameToUri m <.> "md" | m <- manpageNames]
-- website pages kept in the main repo: all manual versions,
-- misc pages in site/, some pages copied from elsewhere.
-- TODO: make all have lower-case URIs on the final website.
mainpageshtml
= map (normalise . ("site/_site" </>))
$ ( [ prefix </> manpageNameToUri mPage <.> "html"
| prefix <- "" : [ "doc" </> v | v <- docversions ]
, mPage <- manpageNames
]
++ [ mPage <.> "html"
| mPage <- [
-- latest version of the manuals rendered to html
htmlmanuals = ["site/_site" </> manpageNameToUri m <.> "html" | m <- manpageNames++["manual"]]
-- old versions of the manuals rendered to html
oldhtmlmanuals = map (normalise . ("site/_site/doc" </>) . (<.> "html")) $
[ v </> manpageNameToUri p | v <- docversions, v>="1.0", p <- manpageNames ++ ["manual"] ] ++
[ v </> "manual" | v <- docversions, v <"1.0" ] -- before 1.0 there was only the combined manual
-- the html for website pages kept in the main repo
mainpageshtml = map (normalise . ("site/_site" </>) . (<.> "html")) [
-- from site/*.md
"contributors"
,"download"
,"ledgertips"
,"index"
,"intro"
,"release-notes"
-- some copied from elsewhere
,"README"
,"CONTRIBUTING"
]
]
++ [ prefix </> "manual" <.> "html"
| prefix <- "" : "doc/0.27" : [ "doc" </> v | v <- docversions ]
]
)
-- website pages kept in the wiki: cookbook content
-- the html for website pages kept in the wiki repo (cookbook content)
wikipageshtml = map (normalise . ("site/_site" </>) . (<.> ".html")) wikipagefilenames
-- TODO: make website URIs lower-case ?
-- manuals rendered to markdown and combined, ready for web rendering
webmancombined = "site/manual.md"
mdcombinedmanual = "site/manual.md"
-- extensions of static web asset files, to be copied to the website
webassetexts = ["png", "gif", "cur", "js", "css", "eot", "ttf", "woff", "svg"]
@ -254,14 +254,15 @@ main = do
-- MANUALS
-- Generate the manuals in nroff, plain text and info formats.
phony "manuals" $ do
need $
phony "manuals" $ need $ concat [
nroffmanuals
++ infomanuals
++ txtmanuals
,infomanuals
,txtmanuals
,htmlmanuals
]
-- Generate nroff man pages suitable for man output.
phony "manmanuals" $ need nroffmanuals
phony "nroffmanuals" $ need nroffmanuals
nroffmanuals |%> \out -> do -- hledger/hledger.1
let src = manpageNameToManualName out <.> "m4.md"
commonm4 = "doc/common.m4"
@ -313,8 +314,8 @@ main = do
-- Generate the individual web manuals' markdown source, using m4
-- and pandoc to tweak content.
phony "webmanuals" $ need webmanuals
webmanuals |%> \out -> do -- site/hledger.md
phony "mdmanuals" $ need mdmanuals
mdmanuals |%> \out -> do -- site/hledger.md
let manpage = manpageUriToName $ dropExtension $ takeFileName out -- hledger
manual = manpageNameToManualName manpage
dir = manpageDir manpage
@ -338,16 +339,16 @@ main = do
-- Generate the combined web manual's markdown source, by
-- concatenating tweaked versions of the individual manuals.
phony "webmancombined" $ need [ webmancombined ]
webmancombined %> \out -> do
need webmanuals
liftIO $ writeFile webmancombined "\\$toc\\$" -- # Big Manual\n\n -- TOC style is better without main heading,
forM_ webmanuals $ \f -> do -- site/hledger.md, site/journal.md
cmd_ Shell ("printf '\\n\\n' >>") webmancombined
phony "mdcombinedmanual" $ need [ mdcombinedmanual ]
mdcombinedmanual %> \out -> do
need mdmanuals
liftIO $ writeFile mdcombinedmanual "\\$toc\\$" -- # Big Manual\n\n -- TOC style is better without main heading,
forM_ mdmanuals $ \f -> do -- site/hledger.md, site/journal.md
cmd_ Shell ("printf '\\n\\n' >>") mdcombinedmanual
cmd_ Shell pandoc f towebmd
"--lua-filter tools/pandoc-drop-toc.lua"
"--lua-filter tools/pandoc-demote-headers.lua"
">>" webmancombined
">>" mdcombinedmanual
-- Copy some extra markdown files from the main repo into the site
-- TODO adding table of contents placeholders
@ -360,6 +361,12 @@ main = do
"webassets"
,"mainpages"
,"wikipages"
,"htmlmanuals"
]
phony "website-all" $ need [
"website"
,"oldmanuals"
]
-- copy all static asset files (files with certain extensions
@ -377,7 +384,7 @@ main = do
"site/_site/files/README" : [ "site/_site//*" <.> ext | ext <- webassetexts ] |%> \out -> do
copyFile' ("site" </> dropDirectory2 out) out
-- embed the wiki's table of contents into the main site's home page
-- embed the wiki's latest table of contents into the main site's home page
"site/index.md" %> \out -> do
wikicontent <- dropWhile (not . ("#" `isPrefixOf`)) . lines <$> readFile' "wiki/Home.md"
old <- liftIO $ readFileStrictly "site/index.md"
@ -394,30 +401,34 @@ main = do
-- We assume there are no filename collisions with mainpages.
phony "wikipages" $ need wikipageshtml
-- render one website page (main or wiki) as html, saved in sites/_site/.
-- In case it's a wiki page, we capture pandoc's output for final processing,
-- and hyperlink any github-style wikilinks.
phony "htmlmanuals" $ need htmlmanuals
phony "oldmanuals" $ need oldhtmlmanuals
-- Render one website page (main or wiki) as html, saved in sites/_site/.
-- Wiki pages will have a heading prepended.
-- All pages will have github-style wiki links hyperlinked.
"site/_site//*.html" %> \out -> do
let filename = takeBaseName out
pagename = fileNameToPageName filename
iswikipage = filename `elem` wikipagefilenames
isoldmanual = "site/_site/doc/" `isPrefixOf` out
source
| iswikipage = "wiki" </> filename <.> "md"
| isoldmanual = "site" </> (drop 11 $ dropExtension out) <.> "md"
| otherwise = "site" </> filename <.> "md"
template = "site/site.tmpl"
siteRoot = if "site/_site/doc//*" ?== out then "../.." else "."
need [source, template]
-- read markdown source, link any wikilinks, pipe it to pandoc, write html out
Stdin . wikify (if iswikipage then Just (fileNameToPageName filename) else Nothing) <$> (readFile' source) >>=
(cmd Shell pandoc fromsrcmd "-t html"
Stdin . wikiLink . (if iswikipage then addHeading pagename else id) <$> (readFile' source) >>=
(cmd Shell pandoc "-" fromsrcmd "-t html"
"--template" template
("--metadata=siteRoot:" ++ siteRoot)
("--metadata=\"title:" ++ pagename ++ "\"")
"--lua-filter=tools/pandoc-site.lua"
"-o" out )
-- render one wiki page as html, saved in site/_site/.
-- HLEDGER PACKAGES/EXECUTABLES
phony "build" $ need packages
@ -635,10 +646,10 @@ main = do
-- them as the specified versioned snapshot in site/doc/VER/ .
-- .snapshot is a dummy file.
"site/doc/*/.snapshot" %> \out -> do
need $ webmancombined : webmanuals
need $ mdcombinedmanual : mdmanuals
let snapshot = takeDirectory out
cmd_ Shell "mkdir -p" snapshot
forM_ webmanuals $ \f -> -- site/hledger.md, site/journal.md
forM_ mdmanuals $ \f -> -- site/hledger.md, site/journal.md
cmd_ Shell "cp" f (snapshot </> takeFileName f)
cmd_ Shell "cp" "site/manual.md" snapshot
cmd_ Shell "cp -r site/images" snapshot
@ -649,8 +660,8 @@ main = do
phony "clean" $ do
putNormal "Cleaning generated help texts, manuals, staged site content"
removeFilesAfter "." commandtxts
removeFilesAfter "." webmanuals
removeFilesAfter "." [webmancombined]
removeFilesAfter "." mdmanuals
removeFilesAfter "." [mdcombinedmanual]
removeFilesAfter "." ["site/README.md", "site/CONTRIBUTING.md"]
phony "Clean" $ do
@ -688,16 +699,22 @@ getCurrentDay = do
t <- getZonedTime
return $ localDay (zonedTimeToLocalTime t)
-- markdown helpers
type Markdown = String
-- | Prepend a markdown heading.
addHeading :: String -> Markdown -> Markdown
addHeading h = (("# "++h++"\n\n")++)
-- | Convert Github-style wikilinks to hledger website links.
-- If a heading is provided, prepend that as a top-level markdown heading.
wikify :: Maybe String -> Markdown -> Markdown
wikify mheading =
maybe id ((++).(++"\n\n").("# "++)) mheading .
wikiLink :: Markdown -> Markdown
wikiLink =
replaceBy wikilinkre wikilinkReplace .
replaceBy labelledwikilinkre labelledwikilinkReplace
-- regex stuff
-- couldn't figure out how to use match subgroups, so we don't
-- wikilinkre = [re|\[\[$([^]]+)]]|] -- [[A]]
-- labelledwikilinkre = [re|\[\[$([^(|)]+)\|$([^]]*)\]\]|] -- [[A|B]]