Check execution workspace candidates with pinned artifact builders
This commit is contained in:
+54
-17
@@ -37,8 +37,18 @@ let
|
||||
entry: load (ancestors ++ [ (sourceKey source) ]) (entry.source // { inherit (entry) kind; })
|
||||
) lock.resources;
|
||||
in
|
||||
source // { inherit directory children; };
|
||||
source // { inherit directory children lock; };
|
||||
root = load [ ] { inherit kind repository commit; };
|
||||
configuration =
|
||||
if builtins.pathExists (root.directory + "/quixos.check.json") then
|
||||
builtins.fromJSON (builtins.readFile (root.directory + "/quixos.check.json"))
|
||||
else
|
||||
{ };
|
||||
execution = (configuration.backend or "typescript") == "execution";
|
||||
runtime = builtins.getFlake (
|
||||
"git+${root.lock.quixos.repository}?rev=${root.lock.quixos.commit}&ref=refs/tags/quixos-reachability/${root.lock.quixos.commit}"
|
||||
);
|
||||
runtimePackages = runtime.packages.${system};
|
||||
flatten = node: [ node ] ++ pkgs.lib.concatMap flatten node.children;
|
||||
nodes = builtins.attrValues (
|
||||
builtins.listToAttrs (
|
||||
@@ -70,7 +80,8 @@ let
|
||||
${protocol}/bin/quixos-workspace-compile --root ${node.directory} \
|
||||
--source-root-commit ${pkgs.lib.escapeShellArg node.commit} \
|
||||
--checkout-root "$TMPDIR/checkouts" --snapshot-map ${snapshots} \
|
||||
--graph-out "$out/graph.json" --schemas-out "$out/package-schemas.json" > "$out/candidate.json"
|
||||
--graph-out "$out/graph.json" --schemas-out "$out/package-schemas.json" \
|
||||
${pkgs.lib.optionalString execution ''--execution-plan-out "$out/execution-plan.json"''} > "$out/candidate.json"
|
||||
''
|
||||
else
|
||||
''
|
||||
@@ -92,21 +103,37 @@ let
|
||||
"git+${node.repository}?rev=${node.commit}&ref=refs/tags/quixos-reachability/${node.commit}"
|
||||
);
|
||||
checked =
|
||||
package.quixosPackages.${system}.checkedServer
|
||||
or (throw "Package ${node.repository} lacks checkedServer; use the supported package scaffold.");
|
||||
artifact = checked {
|
||||
schema =
|
||||
if kind == "workspace" then
|
||||
pkgs.writeText "package-specialization-schema.json" (
|
||||
builtins.toJSON
|
||||
(builtins.fromJSON (builtins.readFile "${contract}/package-schemas.json"))
|
||||
.${candidate.revision.revisionId}
|
||||
)
|
||||
else
|
||||
"${compiled}/bindings.json";
|
||||
generator = protocol;
|
||||
packageRevisionId = candidate.revision.revisionId;
|
||||
};
|
||||
if execution then
|
||||
package.quixosPackages.${system}.checkedArtifacts
|
||||
or (throw "Package ${node.repository} lacks checkedArtifacts; execution workspaces cannot import legacy servers.")
|
||||
else
|
||||
package.quixosPackages.${system}.checkedServer
|
||||
or (throw "Package ${node.repository} lacks checkedServer; use the supported package scaffold.");
|
||||
artifact = checked (
|
||||
if execution then
|
||||
{
|
||||
plan = "${contract}/execution-plan.json";
|
||||
generator = protocol;
|
||||
core = runtimePackages.camino-replica-core;
|
||||
sharedRuntime = runtimePackages.camino-shared-runtime;
|
||||
typescript = runtimePackages.camino-replica-core.dependencies;
|
||||
packageRevisionId = candidate.revision.revisionId;
|
||||
}
|
||||
else
|
||||
{
|
||||
schema =
|
||||
if kind == "workspace" then
|
||||
pkgs.writeText "package-specialization-schema.json" (
|
||||
builtins.toJSON
|
||||
(builtins.fromJSON (builtins.readFile "${contract}/package-schemas.json"))
|
||||
.${candidate.revision.revisionId}
|
||||
)
|
||||
else
|
||||
"${compiled}/bindings.json";
|
||||
generator = protocol;
|
||||
packageRevisionId = candidate.revision.revisionId;
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
packageRevisionId = candidate.revision.revisionId;
|
||||
@@ -124,11 +151,21 @@ let
|
||||
)
|
||||
);
|
||||
in
|
||||
assert pkgs.lib.assertMsg (!execution || kind == "workspace")
|
||||
"Execution packages must be checked in their complete workspace; run qx-workspace check from the workspace root.";
|
||||
pkgs.runCommand (if contractOnly then "qx-contract" else "qx-checked-candidate") { } ''
|
||||
mkdir -p "$out"
|
||||
cp ${contract}/candidate.json "$out/candidate.json"
|
||||
cp ${contract}/graph.json "$out/graph.json"
|
||||
cp ${manifest} "$out/checks.json"
|
||||
${pkgs.lib.optionalString execution ''
|
||||
cp ${contract}/execution-plan.json "$out/execution-plan.json"
|
||||
${pkgs.lib.optionalString (!contractOnly) ''
|
||||
${pkgs.nodejs_24}/bin/node ${./check-execution.mjs} \
|
||||
${protocol}/libexec/quixos-protocol/execution-world.mjs \
|
||||
"$out/execution-plan.json" "$out/checks.json" "$out"
|
||||
''}
|
||||
''}
|
||||
${pkgs.lib.optionalString (
|
||||
kind != "workspace"
|
||||
) ''cp ${contract}/bindings.json "$out/bindings.json"''}
|
||||
|
||||
Reference in New Issue
Block a user