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 +8/−0
- hercules-ci-api-agent.cabal +8/−2
- src/Hercules/API/Agent/Effect/EffectTask.hs +12/−1
- src/Hercules/API/Agent/Evaluate/EvaluateEvent.hs +4/−0
- src/Hercules/API/Agent/Evaluate/EvaluateEvent/AttributeEffectEvent.hs +27/−0
- src/Hercules/API/Agent/Evaluate/EvaluateEvent/OnScheduleHandlerEvent.hs +23/−0
- src/Hercules/API/Agent/Evaluate/EvaluateTask.hs +2/−0
- src/Hercules/API/Agent/Evaluate/EvaluateTask/OnSchedule.hs +13/−0
- src/Hercules/API/Agent/Evaluate/ImmutableGitInput.hs +5/−1
- test/Hercules/API/Agent/Effect/EffectTaskSpec.hs +57/−0
- test/Hercules/API/Agent/Evaluate/EvaluateEvent/AttributeEffectEventSpec.hs +40/−0
- test/Spec.hs +6/−0
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