packages feed

hadolint-2.0.0: src/Hadolint/Rule/DL3053.hs

module Hadolint.Rule.DL3053 (rule) where

import qualified Data.Map as Map
import Data.Maybe
import Data.Time.RFC3339
import Hadolint.Rule
import Language.Docker.Syntax


rule :: LabelSchema -> Rule args
rule labelschema = mconcat $
  fmap labelIsNotRFC3339Rule (Map.keys (Map.filter (== Rfc3339) labelschema))
{-# INLINEABLE rule #-}


labelIsNotRFC3339Rule :: LabelName -> Rule args
labelIsNotRFC3339Rule label = simpleRule code severity message check
  where
    code = "DL3053"
    severity = DLWarningC
    message = "Label `" <> label <> "` is not a valid time format - must be conform to RFC3339."
    check (Label ls) = null $ getBadTimeformatLabels label ls
    check _ = True

getBadTimeformatLabels :: LabelName -> Pairs -> Pairs
getBadTimeformatLabels lbl pairs = [(l, v) | (l, v) <- pairs,
                                             l == lbl,
                                             isNothing $ parseTimeRFC3339 v]