{-# LANGUAGE RecordWildCards #-} -- | Which jobs to generate. Also helper for diagnostics output. module HaskellCI.Jobs where import HaskellCI.Prelude import qualified Data.Set as S import qualified Distribution.Pretty as C import HaskellCI.Compiler import HaskellCI.Config import HaskellCI.Diagnostics import HaskellCI.Package import HaskellCI.TestedWith data JobVersions = JobVersions { versions :: Set CompilerVersion -- ^ all jobs , osxVersions :: Set Version -- ^ osx jobs: GHC only , omittedOsxVersions :: Set Version } describeJobs :: MonadDiagnostics m => TestedWithJobs -> JobVersions -> [Package] -> m () describeJobs twj JobVersions {..} pkgs = do putStrLnInfo $ "Generating Travis-CI config for testing for GHC versions: " ++ ghcVersions case twj of TestedWithUniform -> pure () TestedWithAny -> for_ pkgs $ \pkg -> do -- this omits HEAD version. let vr = pkgJobs pkg let vs = showVersions vr putStrLnInfo $ pkgName pkg ++ " " ++ ": " ++ vs unless (null osxVersions) $ do putStrLnInfo $ "Also OSX jobs for: " ++ ghcOsxVersions unless (S.null omittedOsxVersions) $ putStrLnWarn $ "Not all GHC versions specified with --osx are generated: " ++ ghcOmittedOsxVersions where showVersions :: Set CompilerVersion -> String showVersions = unwords . map dispGhcVersionShort . S.toList showVersionsV :: Set Version -> String showVersionsV = unwords . map C.prettyShow . S.toList ghcVersions :: String ghcVersions = showVersions versions ghcOsxVersions :: String ghcOsxVersions = showVersionsV osxVersions ghcOmittedOsxVersions :: String ghcOmittedOsxVersions = showVersionsV omittedOsxVersions makeJobVersions :: Config -> Set CompilerVersion -> JobVersions makeJobVersions Config {..} versions' = JobVersions {..} where -- All jobs versions :: Set CompilerVersion versions | cfgGhcHead = S.insert GHCHead versions' | otherwise = versions' osxVersions' :: Set Version osxVersions' = cfgOsx osxVersions, omittedOsxVersions :: Set Version (osxVersions, omittedOsxVersions) = S.partition (\x -> GHC x `S.member` versions') osxVersions'