packages feed

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

module Hadolint.Rule.DL3054 (rule) where

import Data.Either
import qualified Data.Map as Map
import qualified Data.Text as Text
import Distribution.Parsec
import Distribution.SPDX.Extra
import Hadolint.Rule
import Language.Docker.Syntax


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

labelIsNotSPDXRule :: LabelName -> Rule args
labelIsNotSPDXRule label = simpleRule code severity message check
  where
    code = "DL3054"
    severity = DLWarningC
    message = "Label `" <> label <> "` is not a valid SPDX identifier."
    check (Label ls) = null $ getBadLicenseLabels label ls
    check _ = True


getBadLicenseLabels :: LabelName -> Pairs -> Pairs
getBadLicenseLabels lbl pairs =
    [ (l, v) | (l, v) <- pairs,
               l == lbl,
               isLeft (eitherParsec (Text.unpack v) :: Either String LicenseId)
    ]