@@ -115,9 +115,11 @@ findNextAvailableJob = runMaybeT
115115executeJob :: DateTime -> Job -> Run ServerEffects Unit
116116executeJob _ = case _ of
117117 PublishJob { payload: payload@{ name } } -> do
118+ -- `publish` will throw on error, or return `Nothing` if the pipeline
119+ -- exited with a valid status but without publishing a package (for instance,
120+ -- the package already existed), or return `Just` if a new version was
121+ -- published and we need to queue matrix jobs.
118122 maybeResult <- API .publish payload
119- -- The above operation will throw if not successful, and return a map of
120- -- dependencies of the package only if it has not been published before.
121123 for_ maybeResult \{ compiler, dependencies, version } -> do
122124 -- At this point this package has been verified with one compiler only.
123125 -- So we need to enqueue compilation jobs for (1) same package, all the other
@@ -127,45 +129,48 @@ executeJob _ = case _ of
127129 let solverData = { compiler, name, version, dependencies, compilerIndex }
128130 samePackageAllCompilers <- MatrixBuilder .solveForAllCompilers solverData
129131 sameCompilerAllDependants <- MatrixBuilder .solveDependantsForCompiler solverData
130- for (Array .fromFoldable $ Set .union samePackageAllCompilers sameCompilerAllDependants)
131- \{ compiler: solvedCompiler, resolutions, name: solvedPackage, version: solvedVersion } -> do
132- Log .info $ " Enqueuing matrix job: compiler "
133- <> Version .print solvedCompiler
134- <> " , package "
135- <> PackageName .print solvedPackage
136- <> " @"
137- <> Version .print solvedVersion
138- Db .insertMatrixJob
139- { payload: resolutions
140- , compilerVersion: solvedCompiler
141- , packageName: solvedPackage
142- , packageVersion: solvedVersion
143- }
132+ for (Array .fromFoldable $ Set .union samePackageAllCompilers sameCompilerAllDependants) \{ compiler: solvedCompiler, resolutions, name: solvedPackage, version: solvedVersion } -> do
133+ Log .info $ Array .fold
134+ [ " Enqueuing matrix job: compiler "
135+ , Version .print solvedCompiler
136+ , " , package "
137+ , PackageName .print solvedPackage
138+ , " @"
139+ , Version .print solvedVersion
140+ ]
141+ Db .insertMatrixJob
142+ { payload: resolutions
143+ , compilerVersion: solvedCompiler
144+ , packageName: solvedPackage
145+ , packageVersion: solvedVersion
146+ }
144147 UnpublishJob { payload } -> API .authenticated payload
145148 TransferJob { payload } -> API .authenticated payload
146149 MatrixJob details@{ packageName, packageVersion } -> do
147- maybeDependencies <- MatrixBuilder .runMatrixJob details
148- -- Unlike the publishing case, after verifying a compilation here we only need
149- -- to followup with trying to compile the packages that depend on this one
150- for_ maybeDependencies \dependencies -> do
151- -- TODO here we are building the compiler index, but we should really cache it
152- compilerIndex <- MatrixBuilder .readCompilerIndex
153- let solverData = { compiler: details.compilerVersion, name: packageName, version: packageVersion, dependencies, compilerIndex }
154- sameCompilerAllDependants <- MatrixBuilder .solveDependantsForCompiler solverData
155- for (Array .fromFoldable sameCompilerAllDependants)
156- \{ compiler: solvedCompiler, resolutions, name: solvedPackage, version: solvedVersion } -> do
157- Log .info $ " Enqueuing matrix job: compiler "
158- <> Version .print solvedCompiler
159- <> " , package "
160- <> PackageName .print solvedPackage
161- <> " @"
162- <> Version .print solvedVersion
163- Db .insertMatrixJob
164- { payload: resolutions
165- , compilerVersion: solvedCompiler
166- , packageName: solvedPackage
167- , packageVersion: solvedVersion
168- }
150+ -- After publishing a matrix job, we check if any dependents need to also have
151+ -- a job queued (for instance a new compiler version came out, we want to have
152+ -- packages trigger jobs for their dependents so it cascades through the registry)
153+ dependencies <- MatrixBuilder .runMatrixJob details
154+
155+ -- TODO here we are building the compiler index, but we should really cache it
156+ compilerIndex <- MatrixBuilder .readCompilerIndex
157+ let solverData = { compiler: details.compilerVersion, name: packageName, version: packageVersion, dependencies, compilerIndex }
158+ sameCompilerAllDependants <- MatrixBuilder .solveDependantsForCompiler solverData
159+ for_ (Array .fromFoldable sameCompilerAllDependants) \{ compiler: solvedCompiler, resolutions, name: solvedPackage, version: solvedVersion } -> do
160+ Log .info $ Array .fold
161+ [ " Enqueuing matrix job: compiler "
162+ , Version .print solvedCompiler
163+ , " , package "
164+ , PackageName .print solvedPackage
165+ , " @"
166+ , Version .print solvedVersion
167+ ]
168+ Db .insertMatrixJob
169+ { payload: resolutions
170+ , compilerVersion: solvedCompiler
171+ , packageName: solvedPackage
172+ , packageVersion: solvedVersion
173+ }
169174 PackageSetJob payload -> API .packageSetUpdate payload
170175
171176upgradeRegistryToNewCompiler :: forall r . Version -> Run (DB + LOG + EXCEPT String + REGISTRY + r ) Unit
@@ -178,12 +183,14 @@ upgradeRegistryToNewCompiler newCompilerVersion = do
178183 -- because from them we should be able to reach the whole of the registry,
179184 -- as they complete new jobs for their dependants will be queued up.
180185 when (Map .isEmpty manifest.dependencies) do
181- Log .info $ " Enqueuing matrix job for _new_ compiler "
182- <> Version .print newCompilerVersion
183- <> " , package "
184- <> PackageName .print manifest.name
185- <> " @"
186- <> Version .print manifest.version
186+ Log .info $ Array .fold
187+ [ " Enqueuing matrix job for _new_ compiler "
188+ , Version .print newCompilerVersion
189+ , " , package "
190+ , PackageName .print manifest.name
191+ , " @"
192+ , Version .print manifest.version
193+ ]
187194 void $ Db .insertMatrixJob
188195 { payload: Map .empty
189196 , compilerVersion: newCompilerVersion
0 commit comments