hwm-0.1.1: src/HWM/Integrations/Toolchain/Github.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
module HWM.Integrations.Toolchain.Github (ensureIsLatestTag) where
import Control.Monad.Error.Class (MonadError (..))
import qualified Data.Text as T
import HWM.Core.Formatting (Format (format))
import HWM.Core.Result (Issue)
import HWM.Core.Version (Version)
import Relude
import System.Exit (ExitCode (..))
import System.Process (readProcessWithExitCode)
ensureIsLatestTag :: (MonadIO m, MonadError Issue m) => Version -> m Text
ensureIsLatestTag targetTag = do
(exitCode, out, _err) <- liftIO $ readProcessWithExitCode "git" ["describe", "--tags", "--abbrev=0"] ""
case exitCode of
ExitSuccess -> do
let latestTag = T.strip (T.pack out)
if latestTag == format targetTag || latestTag == "v" <> format targetTag
then pure latestTag
else throwError $ fromString $ toString ("Safety abort! You are trying to upload to an older release '" <> format targetTag <> "', but your latest tag is actually '" <> latestTag <> "'.")
ExitFailure _ -> throwError $ fromString "Safety abort! Could not find any tags in the current Git history."