63 lines
1.5 KiB
Haskell
63 lines
1.5 KiB
Haskell
module Myriad.Util
|
|
( newContainerName
|
|
, imageName
|
|
, cvs
|
|
, when_
|
|
, unless_
|
|
, exec
|
|
, exec_
|
|
, logInfo
|
|
, logError
|
|
, mapMVar
|
|
, writeMVar
|
|
) where
|
|
|
|
import qualified Control.Monad.Logger as L
|
|
import Control.Monad.Reader
|
|
|
|
import qualified Data.ByteString.Lazy as BL
|
|
import Data.Snowflake
|
|
import Data.String.Conversions
|
|
import qualified Data.Text as T
|
|
|
|
import Control.Concurrent.MVar.Lifted
|
|
import System.Process.Typed
|
|
|
|
import Myriad.Core
|
|
|
|
newContainerName :: MonadIO m => LanguageConfig -> MyriadT m ContainerName
|
|
newContainerName LanguageConfig { name } = do
|
|
snowflakeGen <- asks snowflakeGen
|
|
snowflake <- liftIO $ nextSnowflake snowflakeGen
|
|
pure $ "comp_iler-" <> convertString name <> "-" <> show snowflake
|
|
|
|
imageName :: LanguageConfig -> ImageName
|
|
imageName LanguageConfig { name } = "1computer1/comp_iler:" <> convertString name
|
|
|
|
-- Shorthand because laziness
|
|
cvs :: ConvertibleStrings a b => a -> b
|
|
cvs = convertString
|
|
|
|
when_ :: Applicative f => Bool -> f a -> f ()
|
|
when_ p = when p . void
|
|
|
|
unless_ :: Applicative f => Bool -> f a -> f ()
|
|
unless_ p = unless p . void
|
|
|
|
exec :: [String] -> MyriadIO BL.ByteString
|
|
exec = readProcessInterleaved_ . shell . mconcat
|
|
|
|
exec_ :: [String] -> MyriadIO ()
|
|
exec_ = void . exec
|
|
|
|
logInfo :: [T.Text] -> MyriadIO ()
|
|
logInfo = L.logInfoN . mconcat
|
|
|
|
logError :: [T.Text] -> MyriadIO ()
|
|
logError = L.logErrorN . mconcat
|
|
|
|
mapMVar :: MVar a -> (a -> a) -> MyriadIO ()
|
|
mapMVar var f = modifyMVar_ var (pure . f)
|
|
|
|
writeMVar :: MVar a -> a -> MyriadIO ()
|
|
writeMVar var x = mapMVar var $ const x
|