packages feed

hercules-ci-api-0.7.2.0: src/Hercules/API/Projects/Job.hs

{-# LANGUAGE DeriveAnyClass #-}

module Hercules.API.Projects.Job
  ( module Hercules.API.Projects.Job,
    JobStatus (..),
    JobPhase (..),
  )
where

import Hercules.API.Accounts.Account (Account)
import Hercules.API.Evaluation.Evaluation
  ( Evaluation,
  )
import Hercules.API.Inputs.ImmutableInput (ImmutableInput)
import Hercules.API.Prelude
import Hercules.API.Projects.Project (Project)
import Hercules.API.Projects.SimpleJob (JobPhase (..), JobStatus (..))
import Hercules.API.Repos.Repo (Repo)

data Job = Job
  { id :: Id Job,
    projectId :: Id Project,
    index :: Int64,
    repoId :: Id Repo,
    startTime :: UTCTime,
    endTime :: Maybe UTCTime,
    jobPhase :: JobPhase,
    isCancelled :: Bool,
    jobStatus :: JobStatus,
    evaluationStatus :: JobStatus,
    derivationStatus :: JobStatus,
    effectsStatus :: JobStatus,
    evaluationId :: Id Evaluation,
    source :: GitCommitSource,
    -- | This is only correct when querying a single Job.
    extraInputs :: Map Text ImmutableInput,
    jobType :: JobType,
    jobName :: Maybe Text,
    rerunOf :: Maybe (Id Job),
    rerunOfIndex :: Maybe Int,
    startedBy :: Maybe (Id Account),
    cancelledBy :: Maybe (Id Account),
    mayCancel :: Bool,
    mayRerun :: Bool
  }
  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON, ToSchema)

data JobType
  = Config
  | Legacy
  | OnPush
  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON, ToSchema)

data GitCommitSource = GitCommitSource
  { revision :: Text,
    ref :: Text,
    message :: Text,
    gitCommitterName :: Text,
    committer :: Maybe Account,
    link :: Text
  }
  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON, ToSchema)

data ProjectAndJobs = ProjectAndJobs
  { project :: Project,
    jobs :: [Job]
  }
  deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON, ToSchema)