@@ -4,6 +4,7 @@
44{-# LANGUAGE ScopedTypeVariables #-}
55{-# LANGUAGE ViewPatterns #-}
66{-# LANGUAGE DeriveGeneric #-}
7+{-# LANGUAGE TypeApplications #-}
78module Obelisk.Command.Deploy where
89
910import Control.Lens
@@ -14,21 +15,22 @@ import Data.Aeson (FromJSON, ToJSON, encode, eitherDecode)
1415import Data.Bits
1516import qualified Data.ByteString.Lazy as BSL
1617import Data.Default
17−import Data.List (isSuffixOf)
18−import Data.Map (Map)
18+import qualified Data.HashMap.Strict as HM
1919import qualified Data.Map as Map
20−import Data.Maybe
2120import Data.Text (Text)
2221import qualified Data.Set as Set
2322import qualified Data.Text as T
2423import qualified Data.Text.IO as T
2524import GHC.Generics
25+import Nix.Convert
26+import Nix.Pretty
27+import Nix.Value
2628import System.Directory
2729import System.Environment (getEnvironment)
2830import System.FilePath
2931import System.IO
3032import System.Posix.Files
31−import System.Process (delegate_ctlc, env, proc, readCreateProcess, cwd)
33+import System.Process (delegate_ctlc, env, proc, cwd)
3234import Text.URI (URI)
3335import qualified Text.URI as URI
3436import Text.URI.Lens
@@ -159,14 +161,18 @@ deployPush deployPath getNixBuilders = do
159161deployUpdate :: MonadObelisk m => FilePath -> m ()
160162deployUpdate deployPath = updateThunkToLatest $ deployPath </> "src"
161163
162−keytoolToAndroidConfig :: KeytoolConfig -> Map Text NValue
163−keytoolToAndroidConfig conf = Map.fromList
164− [ ("storeFile", NValue_Path $ _keytoolConfig_keystore conf)
165− , ("storePassword", NValue_Text $ T.pack $ _keytoolConfig_storepass conf)
166− , ("keyAlias", NValue_Text $ T.pack $ _keytoolConfig_alias conf)
167− , ("keyPassword", NValue_Text $ T.pack $ _keytoolConfig_keypass conf)
168− ]
169−
164+keytoolToAndroidConfig :: KeytoolConfig -> HM.HashMap Text (NValueNF Identity)
165+keytoolToAndroidConfig conf = runIdentity $ do
166+ path <- toValue $ Path $ _keytoolConfig_keystore conf
167+ storepass <- toValue $ T.pack $ _keytoolConfig_storepass conf
168+ alias <- toValue $ T.pack $ _keytoolConfig_alias conf
169+ keypass <- toValue $ T.pack $ _keytoolConfig_keypass conf
170+ return $ HM.fromList
171+ [ ("storeFile", path)
172+ , ("storePassword", storepass)
173+ , ("keyAlias", alias)
174+ , ("keyPassword", keypass)
175+ ]
170176
171177deployMobile :: MonadObelisk m => String -> [String] -> m ()
172178deployMobile platform mobileArgs = withProjectRoot "." $ \root -> do
@@ -200,13 +206,15 @@ deployMobile platform mobileArgs = withProjectRoot "." $ \root -> do
200206 liftIO $ putStrLn $ show keytoolConfContents
201207 releaseKey <- case eitherDecode keytoolConfContents of
202208 Left err -> failWith $ T.pack err
203− Right conf -> return $ renderAttrset $ keytoolToAndroidConfig conf
209+ Right conf -> do
210+ let nvset = toValue @(HM.HashMap Text (NValueNF Identity)) @Identity @(NValueNF Identity) $ keytoolToAndroidConfig conf
211+ return $ printNix $ runIdentity nvset
204212 result <- nixCmd $ NixCmd_Build $ def
205213 & nixBuildConfig_outLink .~ OutLink_None
206214 & nixCmdConfig_target .~ Target
207215 { _target_path = Nothing
208216 , _target_attr = Nothing
209− , _target_expr = Just $ "with (import " <> srcDir <> " {}); " <> platform <> ".frontend.override (drv: { releaseKey = (if builtins.isNull drv.releaseKey then {} else drv.releaseKey) // " <> T.unpack releaseKey <> "; })"
217+ , _target_expr = Just $ "with (import " <> srcDir <> " {}); " <> platform <> ".frontend.override (drv: { releaseKey = (if builtins.isNull drv.releaseKey then {} else drv.releaseKey) // " <> releaseKey <> "; })"
210218 }
211219 putLog Notice $ T.pack $ "Your recently built android apk can be found at the following path: " <> (show result)
212220 callProcessAndLogOutput (Notice, Error) $ proc (result </> "bin" </> "deploy") mobileArgs