stack-lib (empty) → 0.1.0.0
raw patch · 10 files changed
+218/−0 lines, 10 filesdep +basedep +monad-loggerdep +pathsetup-changed
Dependencies added: base, monad-logger, path, stack, time, transformers
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- src/Stack/Lib/Build.hs +18/−0
- src/Stack/Lib/Class/IsAbstractResolver.hs +6/−0
- src/Stack/Lib/LowerLevel/Build.hs +13/−0
- src/Stack/Lib/LowerLevel/GlobalOpts.hs +20/−0
- src/Stack/Lib/LowerLevel/Runners.hs +36/−0
- src/Stack/Lib/Snapshots.hs +12/−0
- src/Stack/Lib/Type/Resolver.hs +34/−0
- stack-lib.cabal +47/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Clinton Mead (c) 2017++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Clinton Mead nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Stack/Lib/Build.hs view
@@ -0,0 +1,18 @@+module Stack.Lib.Build (build, buildWithResolver, buildWithResolvers) where++import Stack.Types.Config (globalResolver)+import Stack.Types.Config.Build (defaultBuildOptsCLI)+import Stack.Lib.LowerLevel.Runners (defaultGlobalOpts)+import Stack.Lib.Class.IsAbstractResolver (IsAbstractResolver(toAbstractResolver))+import Stack.Lib.LowerLevel.Build (buildWithOptions)++import Control.Monad (mapM_)++buildWithResolver :: IsAbstractResolver resolver => resolver -> IO ()+buildWithResolver resolver = buildWithOptions defaultGlobalOpts{globalResolver = Just (toAbstractResolver resolver)} defaultBuildOptsCLI++buildWithResolvers :: (Foldable f, IsAbstractResolver resolver) => f resolver -> IO ()+buildWithResolvers = mapM_ buildWithResolver++build :: IO ()+build = buildWithOptions defaultGlobalOpts defaultBuildOptsCLI
+ src/Stack/Lib/Class/IsAbstractResolver.hs view
@@ -0,0 +1,6 @@+module Stack.Lib.Class.IsAbstractResolver (IsAbstractResolver(toAbstractResolver), AbstractResolver) where++import Stack.Types.Resolver (AbstractResolver)++class IsAbstractResolver t where+ toAbstractResolver :: t -> AbstractResolver
+ src/Stack/Lib/LowerLevel/Build.hs view
@@ -0,0 +1,13 @@+module Stack.Lib.LowerLevel.Build (buildWithOptions) where++import Stack.Prelude (RIO)+import Stack.Types.Config (EnvConfig)++import Stack.Types.Config (GlobalOpts)+import Stack.Types.Config.Build (BuildOptsCLI)+import Stack.Lib.LowerLevel.Runners+import qualified Stack.Build++buildWithOptions :: GlobalOpts -> BuildOptsCLI -> IO ()+buildWithOptions globalOpts buildOptsCLI =+ runStackWithGlobalOpts globalOpts ((Stack.Build.build (const (pure ())) Nothing buildOptsCLI) :: RIO EnvConfig ())
+ src/Stack/Lib/LowerLevel/GlobalOpts.hs view
@@ -0,0 +1,20 @@+module Stack.Lib.LowerLevel.GlobalOpts (defaultGlobalOpts) where++import Control.Monad.Logger (LogLevel(LevelInfo))+import Stack.Types.Runner (ColorWhen(ColorNever))+import Stack.Types.Config (GlobalOpts(..), StackYamlLoc(SYLDefault))++defaultGlobalOpts :: GlobalOpts+defaultGlobalOpts = GlobalOpts {+ globalReExecVersion = Nothing,+ globalDockerEntrypoint = Nothing,+ globalLogLevel = LevelInfo,+ globalTimeInLog = True,+ globalConfigMonoid = mempty,+ globalResolver = Nothing,+ globalCompiler = Nothing,+ globalTerminal = False,+ globalColorWhen = ColorNever,+ globalTermWidth = Nothing,+ globalStackYaml = SYLDefault+}
+ src/Stack/Lib/LowerLevel/Runners.hs view
@@ -0,0 +1,36 @@+module Stack.Lib.LowerLevel.Runners (+ runStack,+ runStackWithResolver,+ RunStack(runStackWithGlobalOpts),+ defaultGlobalOpts+ )+where++import Stack.Prelude (RIO, runRIO)+import Stack.Types.Config (EnvConfig, Config, GlobalOpts(globalResolver, globalCompiler), lcConfig, lcLoadBuildConfig)+import Stack.Runners (loadConfigWithOpts)+import Stack.Setup (setupEnv)++import Stack.Lib.Type.Resolver (Resolver)+import Stack.Lib.LowerLevel.GlobalOpts (defaultGlobalOpts)+import Stack.Lib.Class.IsAbstractResolver (toAbstractResolver)++class RunStack config where+ runStackWithGlobalOpts :: GlobalOpts -> RIO config a -> IO a++instance RunStack EnvConfig where+ runStackWithGlobalOpts globalOpts rio = loadConfigWithOpts globalOpts f where+ f loadConfig = do+ buildConfig <- lcLoadBuildConfig loadConfig (globalCompiler globalOpts)+ envConfig <- runRIO buildConfig (setupEnv Nothing)+ runRIO envConfig rio++instance RunStack Config where+ runStackWithGlobalOpts globalOpts rio = loadConfigWithOpts globalOpts f where+ f loadConfig = runRIO (lcConfig loadConfig) rio++runStackWithResolver :: RunStack config => Resolver -> RIO config a -> IO a+runStackWithResolver resolver = runStackWithGlobalOpts defaultGlobalOpts{globalResolver = Just (toAbstractResolver resolver)}++runStack :: RunStack config => RIO config a -> IO a+runStack = runStackWithGlobalOpts defaultGlobalOpts
+ src/Stack/Lib/Snapshots.hs view
@@ -0,0 +1,12 @@+module Stack.Lib.Snapshots (getSnapshots) where++import qualified Stack.Config++import Stack.Prelude (RIO)+import Stack.Types.Config (Config)++import Stack.Types.Resolver (Snapshots)+import Stack.Lib.LowerLevel.Runners (runStack)++getSnapshots :: IO Snapshots+getSnapshots = runStack (Stack.Config.getSnapshots :: RIO Config Snapshots)
+ src/Stack/Lib/Type/Resolver.hs view
@@ -0,0 +1,34 @@+module Stack.Lib.Type.Resolver (+ Resolver(..)+ ) where++import Data.Ord (Ordering(LT, EQ, GT))+import Data.Time.Calendar (Day)++import qualified Stack.Types.Resolver as STR+import Stack.Lib.Class.IsAbstractResolver (IsAbstractResolver(toAbstractResolver))++data Resolver = LatestNightly | LatestLTS | LatestLTSMajor !Int | ExactLTS !Int !Int | ExactNightly !Day deriving Eq++instance Ord Resolver where+ LatestNightly `compare` LatestNightly = EQ+ LatestNightly `compare` _ = GT+ _ `compare` LatestNightly = LT+ ExactNightly day1 `compare` ExactNightly day2 = day1 `compare` day2+ ExactNightly{} `compare` _ = GT+ _ `compare` ExactNightly{} = LT+ LatestLTS `compare` LatestLTS = EQ+ LatestLTS `compare` _ = GT+ _ `compare` LatestLTS = LT+ LatestLTSMajor x1 `compare` LatestLTSMajor x2 = x1 `compare` x2+ ExactLTS x1 y1 `compare` ExactLTS x2 y2 = (x1, y1) `compare` (x2, y2)+ LatestLTSMajor x1 `compare` ExactLTS x2 _y2 = if x1 >= x2 then GT else LT+ ExactLTS x1 _y1 `compare` LatestLTSMajor x2 = if x1 > x2 then GT else LT++instance IsAbstractResolver Resolver where+ toAbstractResolver resolver = case resolver of+ LatestNightly -> STR.ARLatestNightly+ LatestLTS -> STR.ARLatestLTS+ LatestLTSMajor x -> STR.ARLatestLTSMajor x+ ExactLTS x y -> STR.ARResolver (STR.ResolverSnapshot (STR.LTS x y))+ ExactNightly date -> STR.ARResolver (STR.ResolverSnapshot (STR.Nightly date))
+ stack-lib.cabal view
@@ -0,0 +1,47 @@+-- This file has been generated from package.yaml by hpack version 0.20.0.+--+-- see: https://github.com/sol/hpack+--+-- hash: 8a944b11e33bfaea9fdb1a2f7d530401e314bb15d90dee1c554f19bbe2594ecd++name: stack-lib+version: 0.1.0.0+synopsis: Wrapper to use stack as a library+description: Some wrapper functions around [stack](https://hackage.haskell.org/package/stack) intended to make it easier to use [stack](https://hackage.haskell.org/package/stack) as a library.+category: Development+homepage: https://github.com/clintonmead/stack-lib#readme+bug-reports: https://github.com/clintonmead/stack-lib/issues+author: Clinton Mead+maintainer: clintonmead@gmail.com+copyright: Copyright: (c) 2017 Clinton Mead+license: BSD3+license-file: LICENSE+build-type: Simple+cabal-version: >= 1.10++source-repository head+ type: git+ location: https://github.com/clintonmead/stack-lib++library+ hs-source-dirs:+ src+ ghc-options: -Wall+ build-depends:+ base >=4.7 && <5+ , monad-logger+ , path+ , stack+ , time+ , transformers+ exposed-modules:+ Stack.Lib.Build+ Stack.Lib.Class.IsAbstractResolver+ Stack.Lib.LowerLevel.Build+ Stack.Lib.LowerLevel.GlobalOpts+ Stack.Lib.LowerLevel.Runners+ Stack.Lib.Snapshots+ Stack.Lib.Type.Resolver+ other-modules:+ Paths_stack_lib+ default-language: Haskell2010