Skip to content

Commit f4dee3e

Browse files
authored
Merge branch 'master' into f-f/add-dashboard
2 parents 3567c89 + 84b700f commit f4dee3e

16 files changed

Lines changed: 331 additions & 33 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ result*
2020

2121
TODO.md
2222
.spec-results
23+
/generated-docs
2324

2425
# Generated bundle
2526
dashboard/app.js

app-e2e/src/Test/E2E/Endpoint/Startup.purs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import Registry.Test.Assert as Assert
1414
import Registry.Test.Utils as Utils
1515
import Test.E2E.Support.Client as Client
1616
import Test.E2E.Support.Env (E2ESpec)
17+
import Test.E2E.Support.Env as Env
1718
import Test.Spec as Spec
1819

1920
spec :: E2ESpec
@@ -47,3 +48,26 @@ spec = do
4748
<> show (Array.length matrixJobs)
4849
<> " matrix jobs for packages: "
4950
<> String.joinWith ", " (map PackageName.print matrixPackages)
51+
52+
Spec.it "cascades matrix jobs to dependant packages after dependency-free jobs complete" do
53+
-- Wait for ALL pending jobs: the dependency-free matrix jobs and any
54+
-- cascade jobs they trigger.
55+
Env.waitForAllPendingJobs
56+
57+
-- Check that effect got a matrix job with the new compiler (0.15.11).
58+
-- effect depends on prelude, so after prelude's 0.15.11 matrix job
59+
-- succeeds, the cascade should enqueue a job for effect.
60+
allJobs <- Client.getJobsWith Client.IncludeCompleted
61+
let
62+
effectName = Utils.unsafePackageName "effect"
63+
newCompiler = Utils.unsafeVersion "0.15.11"
64+
effectCascadeJobs = Array.filter
65+
( case _ of
66+
MatrixJob { packageName, compilerVersion } ->
67+
packageName == effectName && compilerVersion == newCompiler
68+
_ -> false
69+
)
70+
allJobs
71+
72+
when (Array.null effectCascadeJobs) do
73+
Assert.fail "Expected cascade matrix job for effect with compiler 0.15.11, but found none."

app-e2e/src/Test/E2E/Support/Fixtures.purs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ import Registry.Version (Version)
4343

4444
type PackageFixture = { name :: PackageName, version :: Version }
4545

46-
-- | effect@4.0.0 fixture package
46+
-- | effect@4.0.1 fixture package (4.0.0 is pre-populated in startup fixtures for cascade testing)
4747
effect :: PackageFixture
48-
effect = { name: Utils.unsafePackageName "effect", version: Utils.unsafeVersion "4.0.0" }
48+
effect = { name: Utils.unsafePackageName "effect", version: Utils.unsafeVersion "4.0.1" }
4949

5050
-- | console@6.1.0 fixture package
5151
console :: PackageFixture
@@ -59,8 +59,8 @@ prelude = { name: Utils.unsafePackageName "prelude", version: Utils.unsafeVersio
5959
slug :: PackageFixture
6060
slug = { name: Utils.unsafePackageName "slug", version: Utils.unsafeVersion "3.0.0" }
6161

62-
-- | Standard publish data for effect@4.0.0, used by E2E tests.
63-
-- | This matches the fixtures in app/fixtures/github-packages/effect-4.0.0
62+
-- | Standard publish data for effect@4.0.1, used by E2E tests.
63+
-- | This matches the fixtures in app/fixtures/github-packages/effect-4.0.1
6464
effectPublishData :: Operation.PublishData
6565
effectPublishData =
6666
{ name: effect.name
@@ -69,7 +69,7 @@ effectPublishData =
6969
, repo: "purescript-effect"
7070
, subdir: Nothing
7171
}
72-
, ref: "v4.0.0"
72+
, ref: "v4.0.1"
7373
, compiler: Just $ Utils.unsafeVersion "0.15.10"
7474
, resolutions: Nothing
7575
, version: effect.version

app/fixtures/github-packages/console-6.1.0/bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"package.json"
1717
],
1818
"dependencies": {
19-
"purescript-effect": "^4.0.0",
19+
"purescript-effect": "^4.0.1",
2020
"purescript-prelude": "^6.0.0"
2121
}
2222
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"name":"effect","version":"4.0.0","license":"BSD-3-Clause","location":{"githubOwner":"purescript","githubRepo":"purescript-effect"},"ref":"v4.0.0","description":"Native side effects","dependencies":{"prelude":">=6.0.0 <7.0.0"}}
5.77 KB
Binary file not shown.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"location": {
3+
"githubOwner": "purescript",
4+
"githubRepo": "purescript-effect"
5+
},
6+
"published": {
7+
"4.0.0": {
8+
"bytes": 5904,
9+
"compilers": [
10+
"0.15.10"
11+
],
12+
"hash": "sha256-6a6UH+Q1C86LCmHWiIq/Xh/2+vHRS69ZeEsQAXrfFQs=",
13+
"publishedTime": "2022-08-18T20:04:00.000Z",
14+
"ref": "v4.0.0"
15+
}
16+
},
17+
"unpublished": {}
18+
}

app/src/App/Server/JobExecutor.purs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,11 @@ findNextAvailableJob = runMaybeT
119119

120120
jobTimeout :: Job -> Duration.Minutes
121121
jobTimeout = case _ of
122-
PackageSetJob _ -> Duration.Minutes 30.0
122+
MatrixJob _ -> Duration.Minutes 60.0
123+
PackageSetJob _ -> Duration.Minutes 90.0
123124
PublishJob _ -> Duration.Minutes 10.0
124-
_ -> Duration.Minutes 5.0
125+
TransferJob _ -> Duration.Minutes 10.0
126+
UnpublishJob _ -> Duration.Minutes 10.0
125127

126128
executeJob :: DateTime -> Job -> Run ServerEffects Unit
127129
executeJob _ = case _ of
@@ -195,7 +197,7 @@ upgradeRegistryToNewCompiler newCompilerVersion = do
195197
-- as they complete new jobs for their dependants will be queued up.
196198
when (Map.isEmpty manifest.dependencies) do
197199
Log.info $ Array.fold
198-
[ "Enqueuing matrix job for _new_ compiler "
200+
[ "Enqueuing matrix job for new compiler "
199201
, Version.print newCompilerVersion
200202
, ", package "
201203
, PackageName.print manifest.name

app/src/App/Server/MatrixBuilder.purs

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import Registry.App.Prelude
1414

1515
import Data.Array as Array
1616
import Data.Array.NonEmpty as NonEmptyArray
17+
import Data.FoldableWithIndex (foldMapWithIndex)
1718
import Data.Map as Map
1819
import Data.Set as Set
1920
import Data.Set.NonEmpty as NonEmptySet
@@ -187,9 +188,11 @@ solveForAllCompilers { compilerIndex, name, version, compiler, dependencies } =
187188
newJobs <- for compilers \target -> do
188189
Log.debug $ "Trying compiler " <> Version.print target <> " for package " <> PackageName.print name
189190
case Solver.solveWithCompiler (Range.exact target) compilerIndex dependencies of
190-
Left _solverErrors -> do
191-
Log.info $ "Failed to solve with compiler " <> Version.print target
192-
-- Log.debug $ Solver.printSolverError solverErrors
191+
Left solverErrors -> do
192+
Log.info $ "Failed to solve with compiler " <> Version.print target <> ": " <> PackageName.print name <> "@" <> Version.print version
193+
Log.debug $ "Solver errors:\n" <> foldMapWithIndex
194+
(\i error -> "[Error " <> show (i + 1) <> "]\n" <> Solver.printSolverError error <> "\n")
195+
solverErrors
193196
pure Nothing
194197
Right (Tuple solvedCompiler resolutions) -> case solvedCompiler == target of
195198
true -> do
@@ -211,28 +214,37 @@ solveDependantsForCompiler { compilerIndex, name, version, compiler } = do
211214
manifestIndex <- Registry.readAllManifests
212215
let dependentManifests = ManifestIndex.dependants manifestIndex name version
213216
newJobs <- for dependentManifests \(Manifest manifest) -> do
214-
-- we first verify if we have already attempted this package with this compiler,
215-
-- either in the form of having it in the metadata already, or as a failed compilation
216-
-- (i.e. if we find compilers in the metadata for this version we only check this one
217-
-- if it's newer, because all the previous ones have been tried)
217+
-- We skip if this compiler is already in the package's metadata compilers
218+
-- list (meaning it was already successfully tested). Failed compilations
219+
-- are not recorded in metadata, but the DB deduplication in insertMatrixJob
220+
-- prevents re-enqueuing jobs that already exist.
218221
shouldAttemptToCompile <- Registry.readMetadata manifest.name >>= case _ of
219-
Nothing -> pure false
220-
Just metadata -> pure $ case Map.lookup version (un Metadata metadata).published of
221-
Nothing -> false
222-
Just { compilers } -> any (_ > compiler) compilers
222+
Nothing -> do
223+
Log.debug $ "Skipping " <> PackageName.print manifest.name <> "@" <> Version.print manifest.version <> ": no metadata found"
224+
pure false
225+
Just metadata -> do
226+
let
227+
result = case Map.lookup manifest.version (un Metadata metadata).published of
228+
Nothing -> false
229+
Just { compilers } -> all (_ /= compiler) compilers
230+
unless result do
231+
Log.debug $ "Skipping " <> PackageName.print manifest.name <> "@" <> Version.print manifest.version <> ": compiler " <> Version.print compiler <> " already tested or version not published"
232+
pure result
223233
case shouldAttemptToCompile of
224234
false -> pure Nothing
225235
true -> do
226236
-- if all good then run the solver
227237
Log.debug $ "Trying compiler " <> Version.print compiler <> " for package " <> PackageName.print manifest.name
228238
case Solver.solveWithCompiler (Range.exact compiler) compilerIndex manifest.dependencies of
229-
Left _solverErrors -> do
230-
Log.info $ "Failed to solve with compiler " <> Version.print compiler
231-
-- Log.debug $ Solver.printSolverError solverErrors
239+
Left solverErrors -> do
240+
Log.info $ "Failed to solve with compiler " <> Version.print compiler <> ": " <> PackageName.print manifest.name <> "@" <> Version.print manifest.version
241+
Log.debug $ "Solver errors:\n" <> foldMapWithIndex
242+
(\i error -> "[Error " <> show (i + 1) <> "]\n" <> Solver.printSolverError error <> "\n")
243+
solverErrors
232244
pure Nothing
233245
Right (Tuple solvedCompiler resolutions) -> case compiler == solvedCompiler of
234246
true -> do
235-
Log.debug $ "Solved with compiler " <> Version.print solvedCompiler
247+
Log.debug $ "Solved " <> PackageName.print manifest.name <> "@" <> Version.print manifest.version <> " with compiler " <> Version.print solvedCompiler
236248
pure $ Just { compiler, resolutions, name: manifest.name, version: manifest.version }
237249
false -> do
238250
Log.debug $ Array.fold

app/test/App/API.purs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,12 @@ spec = do
174174
copyFixture "registry"
175175
copyFixture "registry-storage"
176176
copyFixture "github-packages"
177-
-- We remove effect-4.0.0.tar.gz since the unit test publishes it from
178-
-- scratch and will fail if it's already in storage. We have it in
179-
-- storage for the separate integration tests.
177+
-- We remove effect fixtures since the unit test publishes effect from
178+
-- scratch and will fail if it's already registered. We have these in
179+
-- fixtures for the separate integration tests.
180180
FS.Extra.remove $ Path.concat [ testFixtures, "registry-storage", "effect-4.0.0.tar.gz" ]
181+
FS.Extra.remove $ Path.concat [ testFixtures, "registry", "metadata", "effect.json" ]
182+
FS.Extra.remove $ Path.concat [ testFixtures, "registry-index", "ef" ]
181183

182184
let
183185
readFixtures = do

0 commit comments

Comments
 (0)