Build composable Camino packages with explicit type and source dependencies
This commit is contained in:
@@ -34,7 +34,8 @@ let
|
||||
'';
|
||||
lock = builtins.fromJSON (builtins.readFile lockFile);
|
||||
children = map (
|
||||
entry: load (ancestors ++ [ (sourceKey source) ]) (entry.source // { inherit (entry) kind; })
|
||||
entry:
|
||||
load (ancestors ++ [ (sourceKey source) ]) (entry.source // { inherit (entry) kind binding; })
|
||||
) lock.resources;
|
||||
in
|
||||
source // { inherit directory children lock; };
|
||||
@@ -50,6 +51,12 @@ let
|
||||
);
|
||||
runtimePackages = runtime.packages.${system};
|
||||
flatten = node: [ node ] ++ pkgs.lib.concatMap flatten node.children;
|
||||
capabilityFlatten =
|
||||
node:
|
||||
if node.kind == "build" then
|
||||
[ ]
|
||||
else
|
||||
[ node ] ++ pkgs.lib.concatMap capabilityFlatten node.children;
|
||||
nodes = builtins.attrValues (
|
||||
builtins.listToAttrs (
|
||||
map (node: {
|
||||
@@ -94,6 +101,51 @@ let
|
||||
}
|
||||
'';
|
||||
contract = compile root;
|
||||
buildDependencies =
|
||||
node:
|
||||
builtins.listToAttrs (
|
||||
map (dependency: {
|
||||
name = dependency.binding;
|
||||
value = {
|
||||
src = dependency.directory;
|
||||
source = { inherit (dependency) repository commit; };
|
||||
flake = builtins.getFlake "git+${dependency.repository}?rev=${dependency.commit}&ref=refs/tags/quixos-reachability/${dependency.commit}";
|
||||
};
|
||||
}) (builtins.filter (dependency: dependency.kind == "build") node.children)
|
||||
);
|
||||
reactContracts =
|
||||
node:
|
||||
let
|
||||
interfaces = builtins.attrValues (
|
||||
builtins.listToAttrs (
|
||||
map (dependency: {
|
||||
name = sourceKey dependency;
|
||||
value = dependency;
|
||||
}) (builtins.filter (dependency: dependency.kind == "interface") (capabilityFlatten node))
|
||||
)
|
||||
);
|
||||
in
|
||||
pkgs.lib.concatMap (
|
||||
dependency:
|
||||
if !builtins.pathExists (dependency.directory + "/flake.nix") then
|
||||
[ ]
|
||||
else
|
||||
let
|
||||
source = builtins.getFlake "git+${dependency.repository}?rev=${dependency.commit}&ref=refs/tags/quixos-reachability/${dependency.commit}";
|
||||
build = source.quixosInterfaces.${system}.reactTypes or null;
|
||||
in
|
||||
if build == null then
|
||||
[ ]
|
||||
else
|
||||
[
|
||||
(build {
|
||||
interface = "${compile dependency}/candidate.json";
|
||||
generator = protocol;
|
||||
typescript = runtimePackages.camino-replica-core.dependencies;
|
||||
dependencies = buildDependencies dependency;
|
||||
})
|
||||
]
|
||||
) interfaces;
|
||||
checkPackage =
|
||||
node:
|
||||
let
|
||||
@@ -126,11 +178,13 @@ let
|
||||
sharedRuntime = runtimePackages.camino-shared-runtime;
|
||||
typescript = runtimePackages.camino-replica-core.dependencies;
|
||||
packageRevisionId = candidate.revision.revisionId;
|
||||
dependencies = buildDependencies node;
|
||||
}
|
||||
// pkgs.lib.optionalAttrs (componentEntries != [ ]) {
|
||||
react = {
|
||||
sdk = runtimePackages.camino-react;
|
||||
runtime = runtimePackages.camino-react-runtime;
|
||||
contracts = reactContracts node;
|
||||
};
|
||||
}
|
||||
else
|
||||
@@ -157,7 +211,18 @@ let
|
||||
if contractOnly then
|
||||
[ ]
|
||||
else
|
||||
map checkPackage (builtins.filter (node: node.kind == "package") nodes);
|
||||
map checkPackage (
|
||||
builtins.filter (node: node.kind == "package") (
|
||||
builtins.attrValues (
|
||||
builtins.listToAttrs (
|
||||
map (node: {
|
||||
name = sourceKey node;
|
||||
value = node;
|
||||
}) (capabilityFlatten root)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
manifest = pkgs.writeText "qx-candidate-checks.json" (builtins.toJSON checks);
|
||||
bindingOptions = pkgs.writeText "qx-typescript-options.json" (
|
||||
builtins.toJSON (
|
||||
|
||||
Reference in New Issue
Block a user