summaryrefslogtreecommitdiff
path: root/src/Job
diff options
context:
space:
mode:
Diffstat (limited to 'src/Job')
-rw-r--r--src/Job/Types.hs35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/Job/Types.hs b/src/Job/Types.hs
index 4024317..262a267 100644
--- a/src/Job/Types.hs
+++ b/src/Job/Types.hs
@@ -1,5 +1,6 @@
module Job.Types where
+import Data.Containers.ListUtils
import Data.Kind
import Data.Text (Text)
import Data.Text qualified as T
@@ -7,6 +8,8 @@ import Data.Text qualified as T
import System.FilePath.Glob
import System.Process
+import {-# SOURCE #-} Config
+import Destination
import Repo
@@ -17,9 +20,10 @@ data Job' d = Job
{ jobId :: JobId' d
, jobName :: JobName
, jobCheckout :: [ JobCheckout d ]
- , jobRecipe :: [ CreateProcess ]
+ , jobRecipe :: Maybe [ Either CreateProcess Text ]
, jobArtifacts :: [ ( ArtifactName, Pattern ) ]
- , jobUses :: [ ( JobName, ArtifactName ) ]
+ , jobUses :: [ ArtifactSpec ]
+ , jobPublish :: [ JobPublish d ]
}
type Job = Job' Evaluated
@@ -38,6 +42,9 @@ stringJobName (JobName name) = T.unpack name
textJobName :: JobName -> Text
textJobName (JobName name) = name
+jobRequiredArtifacts :: Job' d -> [ ArtifactSpec ]
+jobRequiredArtifacts job = nubOrd $ jobUses job ++ (map jpArtifact $ jobPublish job)
+
type family JobRepo d :: Type where
JobRepo Declared = Maybe ( RepoName, Maybe Text )
@@ -49,19 +56,38 @@ data JobCheckout d = JobCheckout
, jcDestination :: Maybe FilePath
}
+type family JobDestination d :: Type where
+ JobDestination Declared = DestinationName
+ JobDestination Evaluated = Destination
+
+data JobPublish d = JobPublish
+ { jpArtifact :: ArtifactSpec
+ , jpDestination :: JobDestination d
+ , jpPath :: Maybe FilePath
+ }
+
data ArtifactName = ArtifactName Text
deriving (Eq, Ord, Show)
+type ArtifactSpec = ( JobName, ArtifactName )
+
data JobSet' d = JobSet
- { jobsetCommit :: Maybe Commit
+ { jobsetId :: JobSetId' d
+ , jobsetConfig :: Maybe Config
+ , jobsetCommit :: Maybe Commit
+ , jobsetExplicitlyRequested :: [ JobId' d ]
, jobsetJobsEither :: Either String [ Job' d ]
}
type JobSet = JobSet' Evaluated
type DeclaredJobSet = JobSet' Declared
+type family JobSetId' d :: Type where
+ JobSetId' Declared = ()
+ JobSetId' Evaluated = JobSetId
+
jobsetJobs :: JobSet -> [ Job ]
jobsetJobs = either (const []) id . jobsetJobsEither
@@ -69,6 +95,9 @@ jobsetJobs = either (const []) id . jobsetJobsEither
newtype JobId = JobId [ JobIdPart ]
deriving (Eq, Ord)
+newtype JobSetId = JobSetId [ JobIdPart ]
+ deriving (Eq, Ord)
+
data JobIdPart
= JobIdName JobName
| JobIdCommit (Maybe RepoName) CommitId