packages feed

hix-0.9.0: lib/Hix/Managed/BuildOutput/GithubActionsPr.hs

module Hix.Managed.BuildOutput.GithubActionsPr where

import qualified Data.Map.Strict as Map
import qualified Data.Text as Text
import Exon (exon)
import System.Posix (epochTime)

import Hix.Data.Monad (M)
import Hix.Managed.BuildOutput.CommitMsg (commit)
import Hix.Managed.Data.BuildOutput (DepChanges)
import qualified Hix.OutputWriter
import Hix.OutputWriter (OutputWriter)

formatOutput :: Text -> [Text] -> [Text]
formatOutput key = \case
  [value] -> [[exon|#{key}=#{value}|]]
  value -> [exon|#{key}<<EOF|] : value ++ ["EOF"]

formatOutputs :: Map Text [Text] -> [Text]
formatOutputs =
  concatMap (uncurry formatOutput) . Map.toList

writeOutputs :: OutputWriter -> Map Text [Text] -> M ()
writeOutputs writer values =
  writer.textAppend (Text.unlines (formatOutputs values))

modifiedOutputs :: Text -> Text -> [Text] -> Map Text [Text]
modifiedOutputs date msg body =
  [
    ("branch", [[exon|hix-managed/bump-#{date}|]]),
    ("commit-message", [msg, ""] ++ body),
    ("title", [msg]),
    ("body", body),
    ("committer", ["hix <noreply@github.com>"]),
    ("signoff", ["false"]),
    ("delete-branch", ["true"])
  ]

githubActionsPr :: DepChanges -> M (Maybe (Map Text [Text]))
githubActionsPr changes =
  for (commit changes) \ (msg, body) -> do
    date <- liftIO epochTime
    pure (modifiedOutputs (show date) msg body)