packages feed

hwm-0.0.1: src/HWM/CLI/Command/Status.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}

module HWM.CLI.Command.Status (showStatus) where

import HWM.Core.Formatting (Color (..), Format (..), chalk, genMaxLen, monadStatus, padDots, statusIcon, subPathSign)
import HWM.Core.Pkg (Pkg (..))
import qualified HWM.Domain.Config as C
import HWM.Domain.ConfigT (ConfigT, config)
import HWM.Domain.Matrix (getBuildEnvironment, getBuildEnvroments, printEnvironments)
import HWM.Domain.Workspace (memberPkgs, pkgGroupName)
import HWM.Integrations.Toolchain.Package (validatePackage)
import HWM.Runtime.UI (putLine, sectionTableM, sectionWorkspace)
import Relude

-- | Main status command - displays project info and package statuses
showStatus :: ConfigT ()
showStatus = do
  cfg <- asks config
  active <- getBuildEnvironment Nothing
  environments <- getBuildEnvroments
  sectionTableM
    0
    "project"
    [ ("name", pure $ chalk Magenta (C.name cfg)),
      ("version", pure $ chalk Green (format $ C.version cfg))
    ]
  printEnvironments active environments
  sectionWorkspace
    $ for_ (C.workspace cfg)
    $ \g -> do
      putLine ""
      putLine $ "• " <> chalk Bold (pkgGroupName g)
      pkgs <- memberPkgs g
      let maxLen = genMaxLen (map pkgMemberId pkgs)
      for_ pkgs $ \pkg -> do
        status <- monadStatus (validatePackage pkg)
        putLine $ subPathSign <> padDots maxLen (pkgMemberId pkg) <> statusIcon status