summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-09-29 21:24:40 +0200
committerEugen Wissner <belka@caraus.de>2024-09-29 21:24:40 +0200
commit8168804d71c8f1248f7f339e88fecf9fb82a9af1 (patch)
tree571c32c84805af9e094d8b6141d40e65334a0162 /src
parentd9bfd2941cf6fd2302293cb9186e829bad490415 (diff)
downloadslackbuilder-8168804d71c8f1248f7f339e88fecf9fb82a9af1.tar.gz
Include repackaging command into configuration
Diffstat (limited to 'src')
-rw-r--r--src/Main.hs27
-rw-r--r--src/SlackBuilder/Update.hs57
2 files changed, 49 insertions, 35 deletions
diff --git a/src/Main.hs b/src/Main.hs
index 14b89e5..50ac048 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -24,7 +24,6 @@ import qualified SlackBuilder.Package as Package
import Text.URI.QQ (uri)
import Data.Foldable (find, traverse_)
import GHC.Records (HasField(..))
-import System.Process (CmdSpec(..))
import System.Console.ANSI
( setSGR
, SGR(..)
@@ -43,7 +42,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(v)\\."
- , getVersion = reuploadWithTemplate template []
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "universal-ctags"
@@ -56,7 +55,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestPackagist packagistArguments
- , getVersion = downloadWithTemplate template
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "composer"
@@ -69,7 +68,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(v)*"
- , getVersion = downloadWithTemplate template
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "jitsi-meet-desktop"
@@ -82,7 +81,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(php-)8.2.\\d"
- , getVersion = downloadWithTemplate template
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "php82"
@@ -95,7 +94,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(v)\\."
- , getVersion = reuploadWithTemplate template [RawCommand "go" ["mod", "vendor"]]
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "kitty"
@@ -108,7 +107,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(v)\\."
- , getVersion = reuploadWithTemplate template []
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "rdiff-backup"
@@ -121,7 +120,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestText textArguments "(Linux—)*"
- , getVersion = downloadWithTemplate template
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "webex"
@@ -134,7 +133,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(v)\\."
- , getVersion = reuploadWithTemplate template []
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "librsync"
@@ -147,7 +146,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestText textArguments "\\."
- , getVersion = downloadWithTemplate template
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "dmd"
@@ -160,7 +159,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestText textArguments "\\."
- , getVersion = reuploadWithTemplate template []
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "d-tools"
@@ -170,7 +169,7 @@ autoUpdatable packageSettings =
dcdArguments = PackageOwner{ owner = "dlang-community", name = "DCD" }
latestDub = Package.Updater
{ detectLatest = latestGitHub dubArguments "(v)\\."
- , getVersion = reuploadWithTemplate dubTemplate []
+ , getVersion = reuploadWithTemplate dubTemplate
, is64 = False
}
latestDscanner = Package.Updater
@@ -199,7 +198,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(v)\\."
- , getVersion = downloadWithTemplate template
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "simde"
@@ -212,7 +211,7 @@ autoUpdatable packageSettings =
template = Package.DownloadTemplate $ getField @"template" setting
in Package.Updater
{ detectLatest = latestGitHub ghArguments "(release-)\\d.[02468].\\d"
- , getVersion = downloadWithTemplate template
+ , getVersion = repackageWithTemplate (getField @"repackage" setting) template
, is64 = getField @"is64" setting
}
, name = "nginx"
diff --git a/src/SlackBuilder/Update.hs b/src/SlackBuilder/Update.hs
index 003afb7..773903d 100644
--- a/src/SlackBuilder/Update.hs
+++ b/src/SlackBuilder/Update.hs
@@ -8,6 +8,7 @@ module SlackBuilder.Update
, downloadWithTemplate
, getAndLogLatest
, handleException
+ , repackageWithTemplate
, reuploadWithTemplate
, updatePackageIfRequired
) where
@@ -142,6 +143,12 @@ cloneFromGit repo tagPrefix packagePath version = do
, download = uri'
}
+repackageWithTemplate :: Maybe [String] -> Package.DownloadTemplate -> Text -> Text -> SlackBuilderT Package.Download
+repackageWithTemplate Nothing template' = downloadWithTemplate template'
+repackageWithTemplate (Just (cmd : arguments)) template' =
+ reuploadWithTemplate' template' (RawCommand cmd arguments)
+repackageWithTemplate (Just []) template' = reuploadWithTemplate template'
+
downloadWithTemplate :: Package.DownloadTemplate -> Text -> Text -> SlackBuilderT Package.Download
downloadWithTemplate downloadTemplate packagePath version = do
repository' <- SlackBuilderT $ asks repository
@@ -149,8 +156,19 @@ downloadWithTemplate downloadTemplate packagePath version = do
checksum <- download uri' $ repository' </> Text.unpack packagePath
pure $ Package.Download uri' $ snd checksum
-reuploadWithTemplate :: Package.DownloadTemplate -> [CmdSpec] -> Text -> Text -> SlackBuilderT Package.Download
-reuploadWithTemplate downloadTemplate commands packagePath version = do
+reuploadWithTemplate :: Package.DownloadTemplate -> Text -> Text -> SlackBuilderT Package.Download
+reuploadWithTemplate downloadTemplate packagePath version = do
+ repository' <- SlackBuilderT $ asks repository
+ uri' <- liftIO $ Package.renderDownloadWithVersion downloadTemplate version
+ let packagePathRelativeToCurrent = repository' </> Text.unpack packagePath
+ (downloadedFileName, checksum) <- download uri' packagePathRelativeToCurrent
+
+ download' <- handleReupload packagePath
+ $ packagePathRelativeToCurrent </> downloadedFileName
+ pure $ Package.Download download' checksum
+
+reuploadWithTemplate' :: Package.DownloadTemplate -> CmdSpec -> Text -> Text -> SlackBuilderT Package.Download
+reuploadWithTemplate' downloadTemplate commands packagePath version = do
repository' <- SlackBuilderT $ asks repository
uri' <- liftIO $ Package.renderDownloadWithVersion downloadTemplate version
let downloadFileName = Text.unpack
@@ -158,22 +176,16 @@ reuploadWithTemplate downloadTemplate commands packagePath version = do
$ NonEmpty.last $ snd $ fromJust $ URI.uriPath uri'
packagePathRelativeToCurrent = repository' </> Text.unpack packagePath
- (relativeTarball', checksum) <- case commands of
- [] -> do
- (downloadedFileName, checksum) <- download uri' packagePathRelativeToCurrent
- pure (packagePathRelativeToCurrent </> downloadedFileName, checksum)
- _ -> do
- changedArchiveRootName <- extractRemote uri' packagePathRelativeToCurrent
- let relativeTarball = packagePathRelativeToCurrent
- </> fromMaybe downloadFileName changedArchiveRootName
- prepareSource relativeTarball
+ changedArchiveRootName <- extractRemote uri' packagePathRelativeToCurrent
+ let relativeTarball = packagePathRelativeToCurrent
+ </> fromMaybe downloadFileName changedArchiveRootName
+ (relativeTarball', checksum) <- prepareSource relativeTarball
- download' <- handleReupload relativeTarball'
+ download' <- handleReupload packagePath relativeTarball'
pure $ Package.Download download' checksum
where
- category' = Text.pack $ takeBaseName $ Text.unpack packagePath
prepareSource tarballPath =
- liftIO (traverse (defaultCreateProcess tarballPath) commands)
+ liftIO (defaultCreateProcess tarballPath commands)
>> liftIO (tarCompress tarballPath)
<* liftIO (removeDirectoryRecursive tarballPath)
tarCompress tarballPath =
@@ -182,13 +194,6 @@ reuploadWithTemplate downloadTemplate commands packagePath version = do
in fmap (appendTarExtension tarballPath,)
$ withCurrentDirectory (takeDirectory tarballPath)
$ createLzmaTarball archiveBaseFilename (appendTarExtension archiveBaseFilename)
- handleReupload relativeTarball = do
- liftIO $ putStrLn $ "Upload the source tarball " <> relativeTarball
- uploadSource relativeTarball category'
-
- hostedSources $ NonEmpty.cons category'
- $ pure $ Text.pack $ takeFileName relativeTarball
-
defaultCreateProcess cwd' cmdSpec
= flip withCreateProcess (const . const . const waitForProcess)
$ CreateProcess
@@ -209,6 +214,16 @@ reuploadWithTemplate downloadTemplate commands packagePath version = do
, child_group = Nothing
}
+handleReupload :: Text -> String -> SlackBuilderT URI
+handleReupload packagePath relativeTarball = do
+ liftIO $ putStrLn $ "Upload the source tarball " <> relativeTarball
+ uploadSource relativeTarball category'
+
+ hostedSources $ NonEmpty.cons category'
+ $ pure $ Text.pack $ takeFileName relativeTarball
+ where
+ category' = Text.pack $ takeBaseName $ Text.unpack packagePath
+
updatePackage :: PackageUpdateData -> PackageInfo -> SlackBuilderT ()
updatePackage PackageUpdateData{..} info = do
let packagePath = category <> "/" <> getField @"name" description