48 lines
1.5 KiB
Haskell

module Main where
import MiniValidation.Manifest
( Environment (Production)
, MaintenanceWindow (MaintenanceWindow)
, ReleaseManifest (ReleaseManifest)
, RolloutStrategy (Canary)
, Validation (Failure, Success)
, readRawManifest
, renderManifest
, validateManifest
)
import System.Exit (die)
main :: IO ()
main =
case
( readRawManifest
[ "service=api-gateway"
, "env=production"
, "owners=platform,security"
, "replicas=3"
, "strategy=canary:20"
, "window=22-24"
]
, readRawManifest
[ "service=API"
, "env=prod"
, "owners=platform,platform"
, "replicas=1"
, "strategy=canary:75"
, "window=24-20"
]
) of
( Right validRawManifest
, Right invalidRawManifest
) ->
case (validateManifest validRawManifest, validateManifest invalidRawManifest) of
( Success (ReleaseManifest "api-gateway" Production ["platform", "security"] 3 (Canary 20) (MaintenanceWindow 22 24))
, Failure validationErrors
) | renderManifest
(ReleaseManifest "api-gateway" Production ["platform", "security"] 3 (Canary 20) (MaintenanceWindow 22 24))
== "service api-gateway, env production, owners platform/security, replicas 3, strategy canary 20%, window 22-24"
&& length validationErrors == 6 ->
putStrLn "test passed"
_ -> die "unexpected validation result"
_ -> die "unexpected manifest parse result"