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"