Collect hash during creating an archive
All checks were successful
Build / audit (push) Successful in 13m45s
Build / test (push) Successful in 13m48s

This commit is contained in:
2024-03-17 11:00:13 +01:00
parent cd28e6fb90
commit 3d81917627
3 changed files with 29 additions and 18 deletions

View File

@ -2,6 +2,7 @@
v. 2.0. If a copy of the MPL was not distributed with this file, You can
obtain one at https://mozilla.org/MPL/2.0/. -}
-- | Contains routines for downloading, cloning and uploading sources.
module SlackBuilder.Download
( cloneAndUpload
, extractRemote
@ -10,6 +11,7 @@ module SlackBuilder.Download
, hostedSources
, remoteFileExists
, responseBodySource
, sinkFileAndHash
, sinkHash
, updateSlackBuildVersion
, uploadCommand
@ -66,7 +68,7 @@ import Conduit
, (.|)
, ZipSink(..)
, await
, sourceFile
, sourceFile, MonadResource
)
import Data.Conduit.Tar (untar, FileInfo(..))
import Crypto.Hash (Digest, MD5, hashInit, hashFinalize, hashUpdate)
@ -244,9 +246,14 @@ download uri packagePath = runReq defaultHttpConfig go
target = packagePath </> fromMaybe downloadFileName attachmentName
digest <- runConduitRes
$ responseBodySource response
.| getZipSink (ZipSink (sinkFile target) *> ZipSink sinkHash)
.| sinkFileAndHash target
pure (targetFileName, digest)
-- | Writes a file to the destination path and accumulates its MD5 checksum.
sinkFileAndHash :: MonadResource m => FilePath -> ConduitT ByteString Void m (Digest MD5)
sinkFileAndHash target = getZipSink
$ ZipSink (sinkFile target) *> ZipSink sinkHash
-- | Downloads a compressed tar archive and extracts its contents on the fly to
-- a directory.
--

View File

@ -2,6 +2,7 @@
v. 2.0. If a copy of the MPL was not distributed with this file, You can
obtain one at https://mozilla.org/MPL/2.0/. -}
-- | Contains data describing packages and how they are should be updated,
module SlackBuilder.Package
( DownloadPlaceholder(..)
, Download(..)