on fb71a21 help sign in
hakyll/src/Text/Hakyll.hs
51 lines 1.9 kB history raw
1module Text.Hakyll
2 ( hakyll
3 ) where
5import Network.Hakyll.SimpleServer (simpleServer)
7import System.Environment (getArgs, getProgName)
8import System.Directory (doesDirectoryExist, removeDirectoryRecursive)
10-- | Main function to run hakyll.
11hakyll :: IO () -> IO ()
12hakyll buildFunction = do
13 args <- getArgs
14 case args of [] -> build buildFunction
15 ["clean"] -> clean
16 ["preview", p] -> build buildFunction >> server (read p)
17 ["preview"] -> build buildFunction >> server 8000
18 ["server", p] -> server (read p)
19 ["server"] -> server 8000
20 _ -> help
22-- | Build the site.
23build :: IO () -> IO ()
24build buildFunction = do putStrLn "Generating..."
25 buildFunction
27-- | Clean up directories.
28clean :: IO ()
29clean = do remove' "_cache"
30 remove' "_site"
31 where remove' dir = do putStrLn $ "Removing " ++ dir ++ "..."
32 exists <- doesDirectoryExist dir
33 if exists then removeDirectoryRecursive dir
34 else return ()
36-- | Show usage information.
37help :: IO ()
38help = do
39 name <- getProgName
40 putStrLn $ "This is a hakyll site generator program. You should always\n"
41 ++ "run it from the project root directory.\n"
42 ++ "\n"
43 ++ "Usage:\n"
44 ++ name ++ " Generate the site.\n"
45 ++ name ++ " clean Clean up and remove cache.\n"
46 ++ name ++ " help Show this message.\n"
47 ++ name ++ " preview [port] Generate site, then start a server.\n"
48 ++ name ++ " server [port] Run a local test server.\n"
50server :: Integer -> IO ()
51server p = do simpleServer (fromIntegral $ p) "_site"