shake: fix old manuals' deps; don't build them by default; refactor
[ci skip]
This commit is contained in:
parent
b3dd667feb
commit
3aad6696c9
135
Shake.hs
135
Shake.hs
@ -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"
|
||||
, "README"
|
||||
, "CONTRIBUTING"
|
||||
,"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]]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user