Merge pull request #1166 from luigy/master

[WIP] improve stack detection for yesod-bin
This commit is contained in:
Michael Snoyman 2016-02-21 15:51:43 +02:00
commit b09d029fb7

View File

@ -6,11 +6,12 @@ module Keter
import Data.Yaml import Data.Yaml
import qualified Data.HashMap.Strict as Map import qualified Data.HashMap.Strict as Map
import qualified Data.Text as T import qualified Data.Text as T
import System.Environment (getEnvironment)
import System.Exit import System.Exit
import System.Process import System.Process
import Control.Monad import Control.Monad
import System.Directory hiding (findFiles) import System.Directory hiding (findFiles)
import Data.Maybe (mapMaybe) import Data.Maybe (mapMaybe,isJust,maybeToList)
import Data.Monoid import Data.Monoid
import System.FilePath ((</>)) import System.FilePath ((</>))
import qualified Codec.Archive.Tar as Tar import qualified Codec.Archive.Tar as Tar
@ -48,6 +49,8 @@ keter cabal noBuild noCopyTo buildArgs = do
_ -> return value _ -> return value
Just _ -> error $ ketercfg ++ " is not an object" Just _ -> error $ ketercfg ++ " is not an object"
env' <- getEnvironment
cwd' <- getCurrentDirectory
files <- getDirectoryContents "." files <- getDirectoryContents "."
project <- project <-
case mapMaybe (T.stripSuffix ".cabal" . T.pack) files of case mapMaybe (T.stripSuffix ".cabal" . T.pack) files of
@ -74,15 +77,27 @@ keter cabal noBuild noCopyTo buildArgs = do
collapse' (x:xs) = x : collapse' xs collapse' (x:xs) = x : collapse' xs
collapse' [] = [] collapse' [] = []
unless noBuild $ if elem "stack.yaml" files unless noBuild $ do
then do run "stack" ["clean"] stackQueryRunSuccess <- do
createDirectoryIfMissing True "./dist/bin" (ec,_,_) <- readProcessWithExitCode "stack" ["query"] ""
run "stack" return (ec == ExitSuccess)
((words "--local-bin-path ./dist/bin build --copy-bins")
<> buildArgs) let inStackExec = isJust $ lookup "STACK_EXE" env'
else do run cabal ["clean"] mStackYaml = lookup "STACK_YAML" env'
run cabal ["configure"] useStack = inStackExec || isJust mStackYaml || stackQueryRunSuccess
run cabal ("build" : buildArgs)
if useStack
then do let stackYaml = maybeToList $ fmap ("--stack-yaml="<>) mStackYaml
localBinPath = cwd' </> "dist/bin"
run "stack" $ stackYaml <> ["clean"]
createDirectoryIfMissing True localBinPath
run "stack"
(stackYaml
<> ["--local-bin-path",localBinPath,"build","--copy-bins"]
<> buildArgs)
else do run cabal ["clean"]
run cabal ["configure"]
run cabal ("build" : buildArgs)
_ <- try' $ removeDirectoryRecursive "static/tmp" _ <- try' $ removeDirectoryRecursive "static/tmp"