packages feed

hercules-ci-api-agent 0.4.5.0 → 0.4.6.0

raw patch · 12 files changed

+205/−4 lines, 12 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Hercules.API.Agent.Effect.EffectTask: [serverSecrets] :: EffectTask -> Map Text (Map Text Value)
+ Hercules.API.Agent.Evaluate.EvaluateEvent: AttributeEffect :: AttributeEffectEvent -> EvaluateEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent: OnScheduleHandlerEvent :: OnScheduleHandlerEvent -> EvaluateEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: AttributeEffectEvent :: [Text] -> Text -> Map Text SecretRef -> AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: GitToken :: GitToken -> SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: MkGitToken :: GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: MkSimpleSecret :: Text -> SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: SimpleSecret :: SimpleSecret -> SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: [derivationPath] :: AttributeEffectEvent -> Text
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: [expressionPath] :: AttributeEffectEvent -> [Text]
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: [name] :: SimpleSecret -> Text
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: [secretsToUse] :: AttributeEffectEvent -> Map Text SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: data AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: data GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: data SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: data SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Control.DeepSeq.NFData Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Control.DeepSeq.NFData Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Control.DeepSeq.NFData Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Control.DeepSeq.NFData Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.FromJSON.FromJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.FromJSON.FromJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.FromJSON.FromJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.FromJSON.FromJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.ToJSON.ToJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.ToJSON.ToJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.ToJSON.ToJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance Data.Aeson.Types.ToJSON.ToJSON Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Classes.Eq Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Classes.Eq Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Classes.Eq Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Classes.Eq Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Generics.Generic Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Generics.Generic Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Generics.Generic Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Generics.Generic Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Show.Show Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.AttributeEffectEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Show.Show Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.GitToken
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Show.Show Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SecretRef
+ Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent: instance GHC.Show.Show Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent.SimpleSecret
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: OnScheduleHandlerEvent :: Text -> Map Text InputDeclaration -> Bool -> TimeConstraints -> OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: TimeConstraints :: Maybe Int -> Maybe [Int] -> Maybe [DayOfWeek] -> Maybe [Int] -> TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [dayOfMonth] :: TimeConstraints -> Maybe [Int]
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [dayOfWeek] :: TimeConstraints -> Maybe [DayOfWeek]
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [handlerExtraInputs] :: OnScheduleHandlerEvent -> Map Text InputDeclaration
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [handlerName] :: OnScheduleHandlerEvent -> Text
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [hour] :: TimeConstraints -> Maybe [Int]
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [isFlake] :: OnScheduleHandlerEvent -> Bool
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [minute] :: TimeConstraints -> Maybe Int
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: [when] :: OnScheduleHandlerEvent -> TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: data OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: data TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance Control.DeepSeq.NFData Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance Control.DeepSeq.NFData Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance Data.Aeson.Types.FromJSON.FromJSON Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance Data.Aeson.Types.FromJSON.FromJSON Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance Data.Aeson.Types.ToJSON.ToJSON Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance Data.Aeson.Types.ToJSON.ToJSON Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance GHC.Classes.Eq Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance GHC.Classes.Eq Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance GHC.Generics.Generic Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance GHC.Generics.Generic Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance GHC.Show.Show Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.OnScheduleHandlerEvent
+ Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent: instance GHC.Show.Show Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent.TimeConstraints
+ Hercules.API.Agent.Evaluate.EvaluateTask: OnSchedule :: OnSchedule -> Selector
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: MkOnSchedule :: Text -> Map Text ImmutableInput -> OnSchedule
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: [extraInputs] :: OnSchedule -> Map Text ImmutableInput
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: [name] :: OnSchedule -> Text
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: data OnSchedule
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: instance Control.DeepSeq.NFData Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule.OnSchedule
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: instance Data.Aeson.Types.FromJSON.FromJSON Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule.OnSchedule
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: instance Data.Aeson.Types.ToJSON.ToJSON Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule.OnSchedule
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: instance GHC.Classes.Eq Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule.OnSchedule
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: instance GHC.Generics.Generic Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule.OnSchedule
+ Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule: instance GHC.Show.Show Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule.OnSchedule
+ Hercules.API.Agent.Evaluate.ImmutableGitInput: [forgeType] :: ImmutableGitInput -> Maybe Text
+ Hercules.API.Agent.Evaluate.ImmutableGitInput: [name] :: ImmutableGitInput -> Maybe Text
+ Hercules.API.Agent.Evaluate.ImmutableGitInput: [owner] :: ImmutableGitInput -> Maybe Text
+ Hercules.API.Agent.Evaluate.ImmutableGitInput: [webURL] :: ImmutableGitInput -> Maybe Text
- Hercules.API.Agent.Effect.EffectTask: EffectTask :: Id (Task EffectTask) -> Text -> Text -> [Text] -> Text -> Id "project" -> Text -> Text -> Text -> Text -> Text -> Bool -> EffectTask
+ Hercules.API.Agent.Effect.EffectTask: EffectTask :: Id (Task EffectTask) -> Text -> Text -> [Text] -> Text -> Map Text (Map Text Value) -> Id "project" -> Text -> Text -> Text -> Text -> Text -> Bool -> EffectTask
- Hercules.API.Agent.Evaluate.ImmutableGitInput: ImmutableGitInput :: Text -> Text -> Text -> Text -> ImmutableGitInput
+ Hercules.API.Agent.Evaluate.ImmutableGitInput: ImmutableGitInput :: Text -> Text -> Text -> Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> ImmutableGitInput

Files

CHANGELOG.md view
@@ -5,6 +5,14 @@  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## 0.4.6.0 - 2022-11-15++### Added++ - `onSchedule` event handler types and operations+ - `GitToken` secrets type, secrets types+ - `ImmutableGitInput` repository metadata attributes+ ## 0.4.5.0 - 2022-05-17  ### Added
hercules-ci-api-agent.cabal view
@@ -1,7 +1,7 @@ cabal-version: 1.12  name:           hercules-ci-api-agent-version:        0.4.5.0+version:        0.4.6.0 synopsis:       API definition for Hercules CI Agent to talk to hercules-ci.com or Hercules CI Enterprise category:       API, CI, Testing, DevOps, Nix homepage:       https://github.com/hercules-ci/hercules-ci-agent#readme@@ -31,6 +31,7 @@       Hercules.API.Agent.Evaluate.EvaluateEvent       Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeErrorEvent       Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEvent+      Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent       Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeIFDEvent       Hercules.API.Agent.Evaluate.EvaluateEvent.BuildRequest       Hercules.API.Agent.Evaluate.EvaluateEvent.BuildRequired@@ -39,9 +40,11 @@       Hercules.API.Agent.Evaluate.EvaluateEvent.JobConfig       Hercules.API.Agent.Evaluate.EvaluateEvent.Message       Hercules.API.Agent.Evaluate.EvaluateEvent.OnPushHandlerEvent+      Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent       Hercules.API.Agent.Evaluate.EvaluateEvent.PushedAll       Hercules.API.Agent.Evaluate.EvaluateTask       Hercules.API.Agent.Evaluate.EvaluateTask.OnPush+      Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule       Hercules.API.Agent.Evaluate.ImmutableInput       Hercules.API.Agent.Evaluate.ImmutableGitInput       Hercules.API.Agent.LifeCycle@@ -103,8 +106,10 @@   other-modules:       Spec       AesonSupport-      Hercules.API.Agent.LifeCycle.AgentInfoSpec+      Hercules.API.Agent.Effect.EffectTaskSpec+      Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEventSpec       Hercules.API.Agent.Evaluate.EvaluateEvent.DerivationInfoSpec+      Hercules.API.Agent.LifeCycle.AgentInfoSpec       Hercules.Formats.CachixCacheSpec       Hercules.Formats.SecretSpec   hs-source-dirs:@@ -120,6 +125,7 @@     , exceptions     , hashable     , hercules-ci-api-agent+    , hercules-ci-api-core     , hspec     , http-api-data     , http-media
src/Hercules/API/Agent/Effect/EffectTask.hs view
@@ -3,6 +3,10 @@  module Hercules.API.Agent.Effect.EffectTask where +import Control.Applicative+import Control.Lens (at, (%~))+import qualified Data.Aeson as A+import Data.Aeson.Lens (_Object) import Hercules.API.Prelude import Hercules.API.Task (Task) @@ -12,6 +16,7 @@     logToken :: Text,     inputDerivationOutputPaths :: [Text],     token :: Text,+    serverSecrets :: Map Text (Map Text A.Value),     projectId :: Id "project",     projectPath :: Text,     siteName :: Text,@@ -20,4 +25,10 @@     ref :: Text,     isDefaultBranch :: Bool   }-  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)+  deriving (Generic, Show, Eq, NFData, ToJSON)++instance FromJSON EffectTask where+  parseJSON v = A.genericParseJSON A.defaultOptions (fixup v)+    where+      fixup :: A.Value -> A.Value+      fixup = _Object . at "serverSecrets" %~ (<|> Just (A.object []))
src/Hercules/API/Agent/Evaluate/EvaluateEvent.hs view
@@ -2,6 +2,7 @@  module Hercules.API.Agent.Evaluate.EvaluateEvent where +import Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent (AttributeEffectEvent) import Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeErrorEvent (AttributeErrorEvent) import Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEvent (AttributeEvent) import Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeIFDEvent (AttributeIFDEvent)@@ -11,11 +12,13 @@ import Hercules.API.Agent.Evaluate.EvaluateEvent.JobConfig (JobConfig) import Hercules.API.Agent.Evaluate.EvaluateEvent.Message (Message) import Hercules.API.Agent.Evaluate.EvaluateEvent.OnPushHandlerEvent (OnPushHandlerEvent)+import Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent (OnScheduleHandlerEvent) import Hercules.API.Agent.Evaluate.EvaluateEvent.PushedAll (PushedAll) import Hercules.API.Prelude  data EvaluateEvent   = Attribute AttributeEvent+  | AttributeEffect AttributeEffectEvent   | AttributeError AttributeErrorEvent   | AttributeIFD AttributeIFDEvent   | Message Message@@ -25,4 +28,5 @@   | BuildRequest BuildRequest   | JobConfig JobConfig   | OnPushHandlerEvent OnPushHandlerEvent+  | OnScheduleHandlerEvent OnScheduleHandlerEvent   deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)
+ src/Hercules/API/Agent/Evaluate/EvaluateEvent/AttributeEffectEvent.hs view
@@ -0,0 +1,27 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DeriveAnyClass #-}++module Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent where++import Hercules.API.Prelude++data AttributeEffectEvent = AttributeEffectEvent+  { expressionPath :: [Text],+    derivationPath :: Text,+    secretsToUse :: Map Text SecretRef+  }+  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)++-- | The right hand side of the @secretsToUse@; how to get the secret.+data SecretRef+  = -- | Retrieve a secret from @secrets.json@.+    SimpleSecret SimpleSecret+  | -- | Retrieve a token for the current repository.+    GitToken GitToken+  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)++data SimpleSecret = MkSimpleSecret {name :: Text}+  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)++data GitToken = MkGitToken {}+  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)
+ src/Hercules/API/Agent/Evaluate/EvaluateEvent/OnScheduleHandlerEvent.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE DeriveAnyClass #-}++module Hercules.API.Agent.Evaluate.EvaluateEvent.OnScheduleHandlerEvent where++import Hercules.API.Agent.Evaluate.EvaluateEvent.InputDeclaration (InputDeclaration)+import Hercules.API.DayOfWeek (DayOfWeek)+import Hercules.API.Prelude++data OnScheduleHandlerEvent = OnScheduleHandlerEvent+  { handlerName :: Text,+    handlerExtraInputs :: Map Text InputDeclaration,+    isFlake :: Bool,+    when :: TimeConstraints+  }+  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)++data TimeConstraints = TimeConstraints+  { minute :: Maybe Int,+    hour :: Maybe [Int],+    dayOfWeek :: Maybe [DayOfWeek],+    dayOfMonth :: Maybe [Int]+  }+  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)
src/Hercules/API/Agent/Evaluate/EvaluateTask.hs view
@@ -5,6 +5,7 @@  import Data.Aeson (Value) import Hercules.API.Agent.Evaluate.EvaluateTask.OnPush (OnPush)+import Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule (OnSchedule) import Hercules.API.Agent.Evaluate.ImmutableInput (ImmutableInput) import Hercules.API.Prelude import Hercules.API.Task (Task)@@ -39,6 +40,7 @@ data Selector   = ConfigOrLegacy   | OnPush OnPush+  | OnSchedule OnSchedule   deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)  type Identifier = Text
+ src/Hercules/API/Agent/Evaluate/EvaluateTask/OnSchedule.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE DeriveAnyClass #-}++module Hercules.API.Agent.Evaluate.EvaluateTask.OnSchedule where++import Hercules.API.Agent.Evaluate.ImmutableInput (ImmutableInput)+import Hercules.API.Prelude++data OnSchedule = MkOnSchedule+  { name :: Text,+    -- | extraInputs+    extraInputs :: Map Text ImmutableInput+  }+  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)
src/Hercules/API/Agent/Evaluate/ImmutableGitInput.hs view
@@ -8,6 +8,10 @@   { rev :: Text,     ref :: Text,     sshURL :: Text,-    httpURL :: Text+    httpURL :: Text,+    webURL :: Maybe Text,+    forgeType :: Maybe Text,+    owner :: Maybe Text,+    name :: Maybe Text   }   deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON, ToSchema)
+ test/Hercules/API/Agent/Effect/EffectTaskSpec.hs view
@@ -0,0 +1,57 @@+{-# LANGUAGE BlockArguments #-}++module Hercules.API.Agent.Effect.EffectTaskSpec where++import Data.Aeson (Value, eitherDecode, encode)+import qualified Data.Aeson as A+import qualified Data.ByteString.Lazy as BL+import qualified Data.Map as M+import Hercules.API.Agent.Effect.EffectTask (EffectTask (..))+import Hercules.API.Id (Id (Id))+import Test.Hspec (Spec, describe, it, shouldBe)+import Prelude++objectV1 :: EffectTask+objectV1 =+  EffectTask+    { id = Id (read "ba2cb3c7-a234-4688-bd25-981a0ccc1497"),+      derivationPath = "/nix/store/foo.drv",+      logToken = "it me logToken",+      inputDerivationOutputPaths = ["/nix/store/bar-bin", "/nix/store/qux-dev"],+      token = "the task token",+      serverSecrets = mempty,+      projectId = Id (read "b85bfc97-86e2-48fc-8153-72d05687eed2"),+      projectPath = "github/the-org/the-repo",+      siteName = "github",+      ownerName = "the-org",+      repoName = "the-repo",+      ref = "refs/heads/the-feature",+      isDefaultBranch = True+    }++objectV2 :: EffectTask+objectV2 = objectV1 {serverSecrets = M.singleton "hi" (M.singleton "token" (A.String "hi token"))}++jsonV1 :: BL.ByteString+jsonV1 = "{\"derivationPath\":\"/nix/store/foo.drv\",\"id\":\"ba2cb3c7-a234-4688-bd25-981a0ccc1497\",\"inputDerivationOutputPaths\":[\"/nix/store/bar-bin\",\"/nix/store/qux-dev\"],\"isDefaultBranch\":true,\"logToken\":\"it me logToken\",\"ownerName\":\"the-org\",\"projectId\":\"b85bfc97-86e2-48fc-8153-72d05687eed2\",\"projectPath\":\"github/the-org/the-repo\",\"ref\":\"refs/heads/the-feature\",\"repoName\":\"the-repo\",\"siteName\":\"github\",\"token\":\"the task token\"}"++jsonV2 :: BL.ByteString+jsonV2 = "{\"derivationPath\":\"/nix/store/foo.drv\",\"id\":\"ba2cb3c7-a234-4688-bd25-981a0ccc1497\",\"inputDerivationOutputPaths\":[\"/nix/store/bar-bin\",\"/nix/store/qux-dev\"],\"isDefaultBranch\":true,\"logToken\":\"it me logToken\",\"ownerName\":\"the-org\",\"projectId\":\"b85bfc97-86e2-48fc-8153-72d05687eed2\",\"projectPath\":\"github/the-org/the-repo\",\"ref\":\"refs/heads/the-feature\",\"repoName\":\"the-repo\",\"siteName\":\"github\",\"token\":\"the task token\",\"serverSecrets\":{\"hi\":{\"token\":\"hi token\"}}}"++spec :: Spec+spec = do+  describe "AttributeEventSpec" do+    describe "FromJSON" do+      it "parses v1 correctly" do+        eitherDecode jsonV1 `shouldBe` Right objectV1+      it "parses v2 correctly" do+        eitherDecode jsonV2 `shouldBe` Right objectV2+    describe "ToJSON" do+      it "encodes correctly" do+        json (encode objectV2) `shouldBe` json jsonV2++json :: BL.ByteString -> Value+json lbs =+  case eitherDecode lbs of+    Left e -> Prelude.error e+    Right r -> r
+ test/Hercules/API/Agent/Evaluate/EvaluateEvent/AttributeEffectEventSpec.hs view
@@ -0,0 +1,40 @@+module Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEventSpec where++import Data.Aeson (Value, eitherDecode, encode)+import qualified Data.ByteString.Lazy as BL+import qualified Data.Map as M+import Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent (AttributeEffectEvent (AttributeEffectEvent), GitToken (MkGitToken), SecretRef (..), SimpleSecret (MkSimpleSecret))+import qualified Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent+import Test.Hspec+import Prelude++objectV1 :: AttributeEffectEvent+objectV1 =+  AttributeEffectEvent+    { expressionPath = ["effects", "doIt"],+      derivationPath = "/nix/store/bar.drv",+      secretsToUse =+        M.fromList+          [ ("foo", (SimpleSecret MkSimpleSecret {name = "default-foo"})),+            ("bar", (GitToken MkGitToken {}))+          ]+    }++jsonV1 :: BL.ByteString+jsonV1 = "{\"derivationPath\":\"/nix/store/bar.drv\",\"expressionPath\":[\"effects\",\"doIt\"],\"secretsToUse\":{\"bar\":{\"contents\":[],\"tag\":\"GitToken\"},\"foo\":{\"contents\":{\"name\":\"default-foo\"},\"tag\":\"SimpleSecret\"}}}"++spec :: Spec+spec = do+  describe "AttributeEventSpec" $ do+    describe "FromJSON" $ do+      it "parses v1 correctly" $ do+        eitherDecode jsonV1 `shouldBe` Right objectV1+    describe "ToJSON" $ do+      it "encodes correctly" $ do+        json (encode objectV1) `shouldBe` json jsonV1++json :: BL.ByteString -> Value+json lbs =+  case eitherDecode lbs of+    Left e -> error e+    Right r -> r
test/Spec.hs view
@@ -2,6 +2,8 @@  module Spec where +import qualified Hercules.API.Agent.Effect.EffectTaskSpec+import qualified Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEventSpec import qualified Hercules.API.Agent.Evaluate.EvaluateEvent.DerivationInfoSpec import qualified Hercules.API.Agent.LifeCycle.AgentInfoSpec import qualified Hercules.Formats.CachixCacheSpec@@ -10,10 +12,14 @@  spec :: Spec spec = describe "hercules-ci-api" do+  describe "Hercules.API.Agent.Effect.EffectTaskSpec" do+    Hercules.API.Agent.Effect.EffectTaskSpec.spec   describe "Hercules.API.Agent.LifeCycle.AgentInfo" do     Hercules.API.Agent.LifeCycle.AgentInfoSpec.spec   describe "Hercules.API.Agent.Evaluate.EvaluateEvent.DerivationInfo" do     Hercules.API.Agent.Evaluate.EvaluateEvent.DerivationInfoSpec.spec+  describe "Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEvent" do+    Hercules.API.Agent.Evaluate.EvaluateEvent.AttributeEffectEventSpec.spec   describe "Hercules.Formats.CachixCache" do     Hercules.Formats.CachixCacheSpec.spec   describe "Hercules.Formats.Secret" do