site: new system for generating versioned docs
This commit is contained in:
		
							parent
							
								
									dd86596d30
								
							
						
					
					
						commit
						99f52f719a
					
				
							
								
								
									
										58
									
								
								Shake.hs
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								Shake.hs
									
									
									
									
									
								
							| @ -53,14 +53,15 @@ usage = unlines | ||||
|   ["Usage:" | ||||
|   ,"./Shake.hs               # compile this script" | ||||
|   ,"./Shake                  # show commands" | ||||
|   ,"./Shake docs             # generate built-in manuals (plaintext, man, info)" | ||||
|   ,"./Shake website          # generate the web site (web manuals, web pages)" | ||||
| --   ,"./Shake manpages         # generate nroff files for man" | ||||
| --   ,"./Shake txtmanpages      # generate text man pages for embedding" | ||||
| --   ,"./Shake infomanpages     # generate info files for info" | ||||
| --   ,"./Shake webmanpages      # generate individual web man pages for hakyll" | ||||
| --   ,"./Shake webmanall        # generate all-in-one web manual for hakyll" | ||||
|   ,"./Shake site/doc/VER/.snapshot   # generate and save a versioned web site snapshot" | ||||
|   ,"./Shake all              # generate everything" | ||||
|   ,"./Shake docs             # generate general docs" | ||||
|   ,"./Shake website          # generate the web site" | ||||
|   ,"./Shake manpages         # generate nroff files for man" | ||||
|   ,"./Shake txtmanpages      # generate text man pages for embedding" | ||||
|   ,"./Shake infomanpages     # generate info files for info" | ||||
|   ,"./Shake webmanpages      # generate web man pages for hakyll" | ||||
|   ,"./Shake webmanual        # generate combined web man page for hakyll" | ||||
|   ,"./Shake clean            # clean generated files" | ||||
|   ,"./Shake Clean            # clean harder" | ||||
|   ,"./Shake --help           # show options, eg --color" | ||||
| @ -93,8 +94,7 @@ main = do | ||||
| -- | ||||
| --     "Shake" %> \out -> do | ||||
| --       need [out <.> "hs"] | ||||
| --       unit $ cmd "./Shake.hs --version"  -- install libs via shebang line | ||||
| --       unit $ cmd "stack ghc Shake.hs" | ||||
| --       unit $ cmd "./Shake.hs"  -- running as stack script installs deps and compiles | ||||
| --       putLoud "You can now run ./Shake instead of ./Shake.hs" | ||||
| 
 | ||||
|     phony "all" $ need ["docs", "website"] | ||||
| @ -123,7 +123,7 @@ main = do | ||||
|       --   manuals rendered to markdown, ready for web output by hakyll (site/hledger.md) | ||||
|       webmanpages = ["site" </> manpageNameToUri m <.>"md" | m <- manpageNames] | ||||
|       --    manuals rendered to markdown and combined, ready for web output by hakyll | ||||
|       webmanual = "site/manual.md" | ||||
|       webmanall = "site/manual.md" | ||||
| 
 | ||||
|       -- hledger.1 -> hledger/doc, hledger_journal.5 -> hledger-lib/doc | ||||
|       manpageDir m | ||||
| @ -208,11 +208,12 @@ main = do | ||||
|     phony "website" $ do | ||||
|       need $ | ||||
|         webmanpages ++ | ||||
|         [webmanual | ||||
|         ,"releasemanual" | ||||
|         [webmanall | ||||
|         ,hakyllstd | ||||
|         ] | ||||
|       cmd Shell (Cwd "site") "hakyll-std/hakyll-std" "build" | ||||
|     -- website also links to old manuals, which are generated manually | ||||
|     -- with ./Shake websnapshot and committed | ||||
| 
 | ||||
|     -- use m4 and pandoc to process macros and filter content, leaving markdown suitable for web output | ||||
|     phony "webmanpages" $ need webmanpages | ||||
| @ -239,29 +240,30 @@ main = do | ||||
|         ">>" out | ||||
| 
 | ||||
|     -- adjust and combine man page mds for single-page web output, using pandoc | ||||
|     phony "webmanual" $ need [ webmanual ] | ||||
|     phony "webmanall" $ need [ webmanall ] | ||||
| 
 | ||||
|     webmanual %> \out -> do | ||||
|     webmanall %> \out -> do | ||||
|       need webmanpages | ||||
|       liftIO $ writeFile webmanual "* toc\n\n" | ||||
|       liftIO $ writeFile webmanall "* toc\n\n" | ||||
|       forM_ webmanpages $ \f -> do -- site/hledger.md, site/journal.md | ||||
|         cmd Shell ("printf '\\n\\n' >>") webmanual :: Action ExitCode | ||||
|         cmd Shell ("printf '\\n\\n' >>") webmanall :: Action ExitCode | ||||
|         cmd Shell "pandoc" f "-t markdown --atx-headers" | ||||
|           -- "--filter doc/pandoc-drop-man-blocks" | ||||
|           "--filter doc/pandoc-drop-toc" | ||||
|           -- "--filter doc/pandoc-capitalize-headers" | ||||
|           "--filter doc/pandoc-demote-headers" | ||||
|           ">>" webmanual :: Action ExitCode | ||||
| 
 | ||||
|     -- check out and render manual pages for the current release also | ||||
|     phony "releasemanual" $ need [ "releasemanual0.27" ] | ||||
| 
 | ||||
|     phony "releasemanual0.27" $ do | ||||
|       -- XXX under doc so hakyll-std will render it | ||||
|       cmd "mkdir -p site/doc/0.27" :: Action ExitCode | ||||
|       cmd Shell "git show 0.27:doc/manual.md >site/doc/0.27/manual.md" :: Action ExitCode | ||||
|       cmd Shell "patch site/doc/0.27/manual.md doc/manual0.27.diff " | ||||
|           ">>" webmanall :: Action ExitCode | ||||
| 
 | ||||
|     -- build the currently checked out web docs and save as a named snapshot | ||||
|     "site/doc/*/.snapshot" %> \out -> do | ||||
|       need [ webmanall ] | ||||
|       let snapshot = takeDirectory out | ||||
|       cmd Shell "mkdir -p" snapshot :: Action ExitCode | ||||
|       forM_ webmanpages $ \f -> do -- site/hledger.md, site/journal.md | ||||
|         cmd Shell "cp" f (snapshot </> takeFileName f) :: Action ExitCode | ||||
|       cmd Shell "cp" "site/manual.md" snapshot :: Action ExitCode | ||||
|       cmd Shell "cp -r site/images" snapshot :: Action ExitCode | ||||
|       cmd Shell "touch" out -- :: Action ExitCode | ||||
| 
 | ||||
|     -- build standard hakyll script used for site rendering | ||||
|     hakyllstd %> \out -> do | ||||
| @ -281,7 +283,9 @@ main = do | ||||
|     phony "clean" $ do | ||||
|       putNormal "Cleaning generated files" | ||||
|       removeFilesAfter "." webmanpages | ||||
|       removeFilesAfter "." [webmanual] | ||||
|       removeFilesAfter "." [webmanall] | ||||
|       -- removeFilesAfter "." ["site/doc/[0-9]*"] | ||||
|       cmd Shell "rm -rf site/doc/[0-9]*" | ||||
| 
 | ||||
|     phony "Clean" $ do | ||||
|       need ["clean"] | ||||
|  | ||||
							
								
								
									
										19
									
								
								doc/lib.m4
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								doc/lib.m4
									
									
									
									
									
								
							| @ -14,16 +14,19 @@ m4_dnl Links to dev and recent release versions of a manual. | ||||
| m4_dnl $1 is the manual's web slug: hledger, hledger-ui, journal, csv etc. | ||||
| m4_dnl The current version is hidden (or whatever) by highlightDocVersion in site.js. | ||||
| m4_dnl | ||||
| m4_define({{_docversionlinks_}}, | ||||
| <div class="versions"> | ||||
| m4_define({{_docversionlinks_}},m4_dnl | ||||
| This doc is for version **_version_**. | ||||
| Available versions: | ||||
| <a href="$1.html">_version_</a> | ||||
| | <a href="doc/1.0/$1.html">1.0</a> | ||||
| | <a href="doc/0.27/manual.html{{#}}$1">0.27</a> | ||||
| </div>)m4_dnl | ||||
| <span class="docversions">m4_dnl | ||||
| m4_dnl Too painful for static generation, insert from site.js instead | ||||
| m4_dnl Available versions: | ||||
| m4_dnl <a href="/$1.html">dev</a> | ||||
| m4_dnl | <a href="/doc/1.1/$1.html">1.1</a> | ||||
| m4_dnl | <a href="/doc/1.0/$1.html">1.0</a> | ||||
| m4_dnl | <a href="/doc/0.27/manual.html#$1">0.27</a> | ||||
| </span>)m4_dnl | ||||
| m4_dnl | ||||
| m4_define({{_toc_}}, {{* toc}})m4_dnl | ||||
| m4_define({{_toc_}},{{ | ||||
| * toc}})m4_dnl | ||||
| m4_dnl | ||||
| m4_dnl _table_({{ | ||||
| m4_dnl | cell1 | cell2 ... | ||||
|  | ||||
| @ -1,11 +0,0 @@ | ||||
| 4a4,5
 | ||||
| > <a name="hledger" />
 | ||||
| > 
 | ||||
| 6a7,12
 | ||||
| > <div class="versions">
 | ||||
| > This doc is for version **0.27**.
 | ||||
| > Available versions:
 | ||||
| > <a href="/manual.html">1.0</a>
 | ||||
| > | <a href="doc/0.27/manual.html">0.27</a>
 | ||||
| > </div>
 | ||||
| > 
 | ||||
							
								
								
									
										3
									
								
								site/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								site/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -12,4 +12,5 @@ journal.md | ||||
| timeclock.md | ||||
| timedot.md | ||||
| manual.md | ||||
| [0-9].* | ||||
| [0-9].* | ||||
| .snapshot | ||||
| @ -2,4 +2,4 @@ Static bits of the hledger.org website. | ||||
| 
 | ||||
| In some cases these are rendered to _site/* by hakyll (via the | ||||
| hakyll-std script), in others they are served directly from the git | ||||
| working copy. | ||||
| working copy. (?) | ||||
|  | ||||
							
								
								
									
										5
									
								
								site/doc/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								site/doc/README
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| Snapshots of past versions of the web content. | ||||
| These are in the "doc/" subdirectory so that hakyll-std will see them. | ||||
| At each release, a new snapshot should be generated and committed. | ||||
| Major releases should also be added to the "available | ||||
| versions" links in site.js. | ||||
| @ -1,12 +1,28 @@ | ||||
| $(document).ready( function() { | ||||
|   highlightDocVersion(); | ||||
|   addDocVersions(); | ||||
|   highlightCurrentDocVersion(); | ||||
| }); | ||||
| 
 | ||||
| function highlightDocVersion() { | ||||
|   $('.versions').each( function() { | ||||
| function addDocVersions() { | ||||
|   var parts = window.location.pathname.split('/'); | ||||
|   var page = parts.length > 0 ? parts[parts.length-1].slice(0,-5) : ''; | ||||
|   var hash = window.location.hash.slice(1); | ||||
|   var topic = (page=='manual' && hash) ? hash : page; | ||||
|   var newhash = (page=='manual' && topic!='manual') ? ('#'+topic) : ''; | ||||
|   var newpage = page=='manual' ? page : topic; | ||||
|   $('.docversions').html('Available versions: \ | ||||
| <a href="/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">dev</a> \ | ||||
| | <a href="/doc/1.1/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.1</a> \ | ||||
| | <a href="/doc/1.0/'+newpage+'.html'+(page=='manual' ? newhash : '')+'">1.0</a> \ | ||||
| | <a href="/doc/0.27/manual.html'+(topic=='manual' ? '' : ('#'+topic))+'">0.27</a> \ | ||||
| '); | ||||
| } | ||||
| 
 | ||||
| function highlightCurrentDocVersion() { | ||||
|   $('.docversions').each( function() { | ||||
|     var parts = window.location.pathname.split('/'); | ||||
|     var dir = parts.length > 1 ? parts[parts.length-2] : ''; | ||||
|     var ver = $.isNumeric(dir) ? dir : '1.1'; | ||||
|     var ver = $.isNumeric(dir) ? dir : 'dev'; | ||||
|     $(this).find('a').each( function() { | ||||
|       if ($(this).html() == ver) | ||||
|         $(this) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user