Move package configuration to the configuration file
This commit is contained in:
90
src/Main.hs
90
src/Main.hs
@ -19,9 +19,8 @@ import qualified Toml
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text.IO as Text
|
||||
import Control.Monad.Trans.Reader (ReaderT(..), asks)
|
||||
import SlackBuilder.Package (PackageDescription(..))
|
||||
import SlackBuilder.Package (PackageDescription(..), renderTextWithVersion)
|
||||
import qualified SlackBuilder.Package as Package
|
||||
import Text.URI.QQ (uri)
|
||||
import Data.Foldable (find, traverse_)
|
||||
import GHC.Records (HasField(..))
|
||||
import System.Console.ANSI
|
||||
@ -31,15 +30,11 @@ import System.Console.ANSI
|
||||
, Color(..)
|
||||
, ConsoleLayer(..)
|
||||
)
|
||||
import Data.Maybe (fromJust, mapMaybe)
|
||||
import Data.Maybe (mapMaybe)
|
||||
import qualified Text.URI as URI
|
||||
|
||||
findUpdatable :: Text -> [PackageSettings] -> DownloaderSettings
|
||||
findUpdatable packageName = getField @"downloader" . fromJust
|
||||
. find ((== packageName) . getField @"name" . getField @"downloader")
|
||||
|
||||
githubAutoUpdatables :: [PackageSettings] -> [PackageDescription]
|
||||
githubAutoUpdatables = mapMaybe go
|
||||
autoUpdatable :: [PackageSettings] -> [PackageDescription]
|
||||
autoUpdatable = mapMaybe go
|
||||
where
|
||||
go PackageSettings{ downloader = setting, downloaders } = do
|
||||
latest' <- packageUpdaterFromSettings setting
|
||||
@ -68,83 +63,18 @@ packageUpdaterFromSettings DownloaderSettings{..} = do
|
||||
| Just packagistSettings <- packagist =
|
||||
let packagistArguments = uncurry PackageOwner packagistSettings
|
||||
in Just $ latestPackagist packagistArguments
|
||||
| Just textSettings <- text =
|
||||
let textArguments = uncurry TextArguments textSettings
|
||||
in Just $ latestText textArguments version
|
||||
| otherwise = Nothing
|
||||
getVersionSettings
|
||||
| Just template' <- template =
|
||||
Just $ repackageWithTemplate repackage $ Package.DownloadTemplate template'
|
||||
| Just CloneSettings{..} <- clone =
|
||||
flip cloneFromGit tagTemplate <$> URI.mkURI remote
|
||||
| Just CloneSettings{..} <- clone
|
||||
= flip cloneFromGit (renderTextWithVersion tagTemplate version)
|
||||
<$> URI.mkURI remote
|
||||
| otherwise = Nothing
|
||||
|
||||
autoUpdatable :: [PackageSettings] -> [PackageDescription]
|
||||
autoUpdatable packageSettings = githubAutoUpdatables packageSettings ++
|
||||
[ PackageDescription
|
||||
{ latest =
|
||||
let setting = findUpdatable "webex" packageSettings
|
||||
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
|
||||
template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestText textArguments (getField @"version" setting)
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
, is64 = getField @"is64" setting
|
||||
}
|
||||
, name = "webex"
|
||||
, downloaders = mempty
|
||||
}
|
||||
, PackageDescription
|
||||
{ latest =
|
||||
let setting = findUpdatable "dmd" packageSettings
|
||||
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
|
||||
template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestText textArguments (getField @"version" setting)
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
, is64 = getField @"is64" setting
|
||||
}
|
||||
, name = "dmd"
|
||||
, downloaders = mempty
|
||||
}
|
||||
, PackageDescription
|
||||
{ latest =
|
||||
let setting = findUpdatable "d-tools" packageSettings
|
||||
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
|
||||
template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
|
||||
in Package.Updater
|
||||
{ detectLatest = latestText textArguments (getField @"version" setting)
|
||||
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
|
||||
, is64 = getField @"is64" setting
|
||||
}
|
||||
, name = "d-tools"
|
||||
, downloaders =
|
||||
let dubArguments = PackageOwner{ owner = "dlang", name = "dub" }
|
||||
dscannerArguments = PackageOwner{ owner = "dlang-community", name = "D-Scanner" }
|
||||
dcdArguments = PackageOwner{ owner = "dlang-community", name = "DCD" }
|
||||
latestDub = Package.Updater
|
||||
{ detectLatest = latestGitHub dubArguments "(v)\\."
|
||||
, getVersion = reuploadWithTemplate dubTemplate
|
||||
, is64 = False
|
||||
}
|
||||
latestDscanner = Package.Updater
|
||||
{ detectLatest = latestGitHub dscannerArguments "(v)\\."
|
||||
, getVersion = cloneFromGit dscannerURI "v"
|
||||
, is64 = False
|
||||
}
|
||||
dcdURI = [uri|https://github.com/dlang-community/DCD.git|]
|
||||
latestDcd = Package.Updater
|
||||
{ detectLatest = latestGitHub dcdArguments "(v)\\."
|
||||
, getVersion = cloneFromGit dcdURI "v"
|
||||
, is64 = False
|
||||
}
|
||||
dubTemplate = Package.DownloadTemplate "https://codeload.github.com/dlang/dub/tar.gz/v{version}"
|
||||
dscannerURI = [uri|https://github.com/dlang-community/D-Scanner.git|]
|
||||
in Map.fromList
|
||||
[ ("DUB", latestDub)
|
||||
, ("DSCANNER", latestDscanner)
|
||||
, ("DCD", latestDcd)
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
up2Date :: Maybe Text -> SlackBuilderT ()
|
||||
up2Date selectedPackage = do
|
||||
packages' <- SlackBuilderT $ asks (getField @"packages")
|
||||
|
Reference in New Issue
Block a user