78 lines
2.1 KiB
Nix
78 lines
2.1 KiB
Nix
# Fresh artifact builder. Candidate plans and runtime dependencies are supplied by the workspace compiler.
|
|
{
|
|
pkgs,
|
|
src,
|
|
plan,
|
|
protocol,
|
|
core,
|
|
sharedRuntime,
|
|
typescript ? core.dependencies,
|
|
packageRevisionId,
|
|
portable ? null,
|
|
remote ? null,
|
|
service ? { },
|
|
nodeModules ? null,
|
|
components ? null,
|
|
group ? false,
|
|
}:
|
|
let
|
|
compiler = "${protocol}/libexec/quixos-protocol/execution-world.mjs";
|
|
config = pkgs.writeText "camino-artifact-build.json" (
|
|
builtins.toJSON {
|
|
inherit
|
|
plan
|
|
compiler
|
|
packageRevisionId
|
|
core
|
|
sharedRuntime
|
|
nodeModules
|
|
service
|
|
group
|
|
;
|
|
components =
|
|
if components == null then
|
|
null
|
|
else
|
|
{
|
|
inherit (components) sdk runtime entries;
|
|
dependencies = components.sdk.dependencies;
|
|
bindingOutput = components.bindingOutput or "src/gen/client.ts";
|
|
contracts = components.contracts or [ ];
|
|
};
|
|
source = src;
|
|
portable =
|
|
if portable == null then
|
|
null
|
|
else
|
|
{
|
|
inherit (portable) entry;
|
|
entries = portable.entries or { };
|
|
registryExport = portable.registryExport or "registry";
|
|
bindingOutput = portable.bindingOutput or "src/gen/qx.ts";
|
|
targets =
|
|
portable.targets or [
|
|
"browser"
|
|
"server"
|
|
];
|
|
};
|
|
remote =
|
|
if remote == null then
|
|
null
|
|
else
|
|
{
|
|
inherit (remote) entry;
|
|
registryExport = remote.registryExport or "registry";
|
|
bindingOutput = remote.bindingOutput or "src/gen/remote.ts";
|
|
};
|
|
node = "${pkgs.nodejs_24}/bin/node";
|
|
tsc = "${typescript}/node_modules/typescript/bin/tsc";
|
|
esbuild = "${pkgs.esbuild}/bin/esbuild";
|
|
shell = "${pkgs.runtimeShell}";
|
|
serviceAdapter = ./portable-service.mjs;
|
|
}
|
|
);
|
|
in
|
|
pkgs.runCommand "camino-checked-artifacts" { passthru.buildConfig = config; } ''
|
|
${pkgs.nodejs_24}/bin/node ${./.}/build-artifacts.mjs ${config}
|
|
''
|