Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/cli/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@
"commands_test_error_validatorNotFound": "validate script not found at: {path}",
"commands_test_error_outputFileMissing": "{option} option missing {argument} argument",
"commands_test_error_clientConfigMissingPath": "{option} option missing {argument} argument",
"commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'getCustomConfig' at {module}",
"commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'configure' at {module}",
"commands_test_error_clientConfigInvalidFileExt": "Custom client config file: {module} must be a JS/TS file",
"commands_test_error_clientConfigNotObject": "Custom client config must be an object",
"commands_test_error_redirectsExportNotArray": "Exported redirects must be an array",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/lang/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@
"commands_test_error_validatorNotFound": "validate script not found at: {path}",
"commands_test_error_outputFileMissing": "{option} option missing {argument} argument",
"commands_test_error_clientConfigMissingPath": "{option} option missing {argument} argument",
"commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'getCustomConfig' at {module}",
"commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'configure' at {module}",
"commands_test_error_clientConfigInvalidFileExt": "Custom client config file: {module} must be a JS/TS file",
"commands_test_error_clientConfigNotObject": "Custom client config must be an object",
"commands_test_error_redirectsExportNotArray": "Exported redirects must be an array",
Expand Down
9 changes: 5 additions & 4 deletions packages/cli/src/__tests__/unit/jobrunner.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,26 @@ import { buildWrapper } from "@polywrap/test-env-js";
import { testCases } from "./jobrunner-test-cases";
import { JobRunner } from "../../lib";
import path from "path";
import { ClientConfigBuilder, ClientConfig } from "@polywrap/client-config-builder-js";
import { ClientConfigBuilder } from "@polywrap/client-config-builder-js";
import { IClientConfigBuilder } from "@polywrap/client-config-builder-js/build/IClientConfigBuilder";

jest.setTimeout(200000);

describe("workflow JobRunner", () => {
let defaultConfig: ClientConfig;
let configBuilder: IClientConfigBuilder;

beforeAll(async () => {
await buildWrapper(
path.join(GetPathToTestWrappers(), "wasm-as", "simple-calculator")
);
defaultConfig = new ClientConfigBuilder().addDefaults().build();
configBuilder = new ClientConfigBuilder().addDefaults();
});

for (const testCase of testCases) {
it(testCase.name, async () => {
const ids = Object.keys(testCase.workflow.jobs);
const jobRunner = new JobRunner(
defaultConfig,
configBuilder,
testCase.onExecution
);
await jobRunner.run(testCase.workflow.jobs, ids);
Expand Down
12 changes: 7 additions & 5 deletions packages/cli/src/commands/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import path from "path";
import readline from "readline";
import { PolywrapClient } from "@polywrap/client-js";
import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js";
import { ClientConfig } from "@polywrap/client-config-builder-js";
import { IClientConfigBuilder } from "@polywrap/client-config-builder-js";

const defaultOutputDir = "./build";
const defaultStrategy = SupportedStrategies.VM;
Expand All @@ -38,7 +38,7 @@ const pathStr = intlMsg.commands_build_options_o_path();
type BuildCommandOptions = {
manifestFile: string;
outputDir: string;
clientConfig: Partial<ClientConfig>;
configBuilder: IClientConfigBuilder;
codegen: boolean; // defaults to true
watch?: boolean;
strategy: SupportedStrategies;
Expand Down Expand Up @@ -89,7 +89,7 @@ export const build: Command = {
options.manifestFile,
defaultPolywrapManifest
),
clientConfig: await parseClientConfigOption(options.clientConfig),
configBuilder: await parseClientConfigOption(options.clientConfig),
outputDir: parseDirOption(options.outputDir, defaultOutputDir),
strategy: options.strategy,
logFile: parseLogFileOption(options.logFile),
Expand Down Expand Up @@ -138,7 +138,7 @@ async function run(options: BuildCommandOptions) {
watch,
manifestFile,
outputDir,
clientConfig,
configBuilder,
strategy,
codegen,
verbose,
Expand All @@ -148,7 +148,9 @@ async function run(options: BuildCommandOptions) {
const logger = createLogger({ verbose, quiet, logFile });

// Get Client
const client = new PolywrapClient(clientConfig);
const client = new PolywrapClient(configBuilder.buildCoreConfig(), {
noDefaults: true,
});

const project = new PolywrapProject({
rootDir: path.dirname(manifestFile),
Expand Down
12 changes: 7 additions & 5 deletions packages/cli/src/commands/codegen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator";
import { PolywrapClient } from "@polywrap/client-js";
import path from "path";
import fs from "fs";
import { ClientConfig } from "@polywrap/client-config-builder-js";
import { IClientConfigBuilder } from "@polywrap/client-config-builder-js";

const defaultCodegenDir = "./src/wrap";
const defaultPublishDir = "./build";
Expand All @@ -34,7 +34,7 @@ type CodegenCommandOptions = {
codegenDir: string;
publishDir: string;
script?: string;
clientConfig: Partial<ClientConfig>;
configBuilder: IClientConfigBuilder;
verbose?: boolean;
quiet?: boolean;
logFile?: string;
Expand Down Expand Up @@ -81,7 +81,7 @@ export const codegen: Command = {
.action(async (options) => {
await run({
...options,
clientConfig: await parseClientConfigOption(options.clientConfig),
configBuilder: await parseClientConfigOption(options.clientConfig),
codegenDir: parseDirOption(options.codegenDir, defaultCodegenDir),
script: parseCodegenScriptOption(options.script),
manifestFile: parseManifestFileOption(
Expand All @@ -100,7 +100,7 @@ async function run(options: CodegenCommandOptions) {
manifestFile,
codegenDir,
script,
clientConfig,
configBuilder,
publishDir,
verbose,
quiet,
Expand All @@ -109,7 +109,9 @@ async function run(options: CodegenCommandOptions) {
const logger = createLogger({ verbose, quiet, logFile });

// Get Client
const client = new PolywrapClient(clientConfig);
const client = new PolywrapClient(configBuilder.buildCoreConfig(), {
noDefaults: true,
});

const project = await getProjectFromManifest(manifestFile, logger);

Expand Down
12 changes: 7 additions & 5 deletions packages/cli/src/commands/docgen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator";
import { PolywrapClient } from "@polywrap/client-js";
import chalk from "chalk";
import { Argument } from "commander";
import { ClientConfig } from "@polywrap/client-config-builder-js";
import { IClientConfigBuilder } from "@polywrap/client-config-builder-js";

const commandToPathMap: Record<string, string> = {
schema: schemaScriptPath,
Expand All @@ -36,7 +36,7 @@ const pathStr = intlMsg.commands_codegen_options_o_path();
type DocgenCommandOptions = {
manifestFile: string;
docgenDir: string;
clientConfig: Partial<ClientConfig>;
configBuilder: IClientConfigBuilder;
imports: boolean;
verbose?: boolean;
quiet?: boolean;
Expand Down Expand Up @@ -108,7 +108,7 @@ export const docgen: Command = {
defaultProjectManifestFiles
),
docgenDir: parseDirOption(options.docgenDir, defaultDocgenDir),
clientConfig: await parseClientConfigOption(options.clientConfig),
configBuilder: await parseClientConfigOption(options.clientConfig),
logFile: parseLogFileOption(options.logFile),
});
});
Expand All @@ -119,7 +119,7 @@ async function run(command: DocType, options: DocgenCommandOptions) {
const {
manifestFile,
docgenDir,
clientConfig,
configBuilder,
imports,
verbose,
quiet,
Expand All @@ -144,7 +144,9 @@ async function run(command: DocType, options: DocgenCommandOptions) {
// Resolve custom script
const customScript = require.resolve(commandToPathMap[command]);

const client = new PolywrapClient(clientConfig);
const client = new PolywrapClient(configBuilder.buildCoreConfig(), {
noDefaults: true,
});

const schemaComposer = new SchemaComposer({
project,
Expand Down
10 changes: 5 additions & 5 deletions packages/cli/src/commands/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ import { createLogger } from "./utils/createLogger";
import path from "path";
import yaml from "yaml";
import fs from "fs";
import { ClientConfig } from "@polywrap/client-config-builder-js";
import { IClientConfigBuilder } from "@polywrap/client-config-builder-js";

type WorkflowCommandOptions = {
clientConfig: Partial<ClientConfig>;
configBuilder: IClientConfigBuilder;
manifest: string;
jobs?: string[];
validationScript?: string;
Expand Down Expand Up @@ -74,7 +74,7 @@ export const test: Command = {
options.manifestFile,
defaultWorkflowManifest
),
clientConfig: await parseClientConfigOption(options.clientConfig),
configBuilder: await parseClientConfigOption(options.clientConfig),
outputFile: options.outputFile
? parseWorkflowOutputFilePathOption(options.outputFile)
: undefined,
Expand All @@ -87,7 +87,7 @@ export const test: Command = {
const _run = async (options: WorkflowCommandOptions) => {
const {
manifest,
clientConfig,
configBuilder,
outputFile,
verbose,
quiet,
Expand Down Expand Up @@ -127,7 +127,7 @@ const _run = async (options: WorkflowCommandOptions) => {
workflowOutput.push(output);
};

const jobRunner = new JobRunner(clientConfig, onExecution);
const jobRunner = new JobRunner(configBuilder, onExecution);
await jobRunner.run(workflow.jobs, jobs ?? Object.keys(workflow.jobs));

if (outputFile) {
Expand Down
24 changes: 6 additions & 18 deletions packages/cli/src/lib/option-parsers/client-config.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import { validateClientConfig } from "../helpers";
import { intlMsg } from "../intl";
import { importTypescriptModule } from "../system";
import { getTestEnvClientConfig } from "../test-env";

import { Uri } from "@polywrap/core-js";
import {
ClientConfigBuilder,
ClientConfig,
} from "@polywrap/client-config-builder-js";
import { ClientConfigBuilder } from "@polywrap/client-config-builder-js";
import path from "path";
import { IClientConfigBuilder } from "@polywrap/client-config-builder-js";

export async function parseClientConfigOption(
clientConfig: string | undefined
): Promise<Partial<ClientConfig<Uri>>> {
): Promise<IClientConfigBuilder> {
const builder = new ClientConfigBuilder().addDefaults();

try {
Expand All @@ -38,24 +34,16 @@ export async function parseClientConfigOption(
process.exit(1);
}

if (!configModule || !configModule.getCustomConfig) {
if (!configModule || !configModule.configure) {
const configsModuleMissingExportMessage = intlMsg.commands_test_error_clientConfigModuleMissingExport(
{ module: configModule }
);
console.error(configsModuleMissingExportMessage);
process.exit(1);
}

const customConfig = await configModule.getCustomConfig();

try {
validateClientConfig(customConfig);
return builder.add(customConfig).build();
} catch (e) {
console.error(e.message);
process.exit(1);
}
return await configModule.configure(builder);
} else {
return builder.build();
return builder;
}
}
21 changes: 12 additions & 9 deletions packages/cli/src/lib/workflow/JobRunner.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
import { JobResult, Status, Step } from "./types";

import { PolywrapClient } from "@polywrap/client-js";
import { CoreClient, MaybeAsync } from "@polywrap/core-js";
import { CoreClient, CoreClientConfig, MaybeAsync } from "@polywrap/core-js";
import { WorkflowJobs } from "@polywrap/polywrap-manifest-types-js";
import {
ClientConfigBuilder,
ClientConfig,
IClientConfigBuilder,
} from "@polywrap/client-config-builder-js";

export class JobRunner {
private jobOutput: Map<string, JobResult>;
private client: CoreClient;

constructor(
private clientConfig: Partial<ClientConfig>,
private configBuilder: IClientConfigBuilder,
private onExecution?: (id: string, JobResult: JobResult) => MaybeAsync<void>
) {
this.jobOutput = new Map();
this.client = new PolywrapClient(this.clientConfig);
this.client = new PolywrapClient(this.configBuilder.buildCoreConfig(), {
noDefaults: true,
});
}

async run(jobs: WorkflowJobs, ids: string[]): Promise<void> {
Expand Down Expand Up @@ -182,12 +184,13 @@ export class JobRunner {
let finalClient = this.client;

if (step.config) {
const finalConfig = new ClientConfigBuilder()
.add(this.clientConfig)
.add(step.config)
.build();
const finalConfig = (step.config as Partial<CoreClientConfig>).resolver
? (step.config as CoreClientConfig)
: this.configBuilder
.add(step.config as Partial<ClientConfig>)
.buildCoreConfig();

finalClient = new PolywrapClient(finalConfig);
finalClient = new PolywrapClient(finalConfig, { noDefaults: true });
}

const invokeResult = await finalClient.invoke({
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/lib/workflow/types.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { ClientConfig } from "@polywrap/client-config-builder-js";
import { Uri } from "@polywrap/core-js";
import { CoreClientConfig, Uri } from "@polywrap/core-js";

export interface Step {
uri: string | Uri;
method: string;
args?: {
[k: string]: unknown;
};
config?: ClientConfig;
config?: ClientConfig | CoreClientConfig;
}

export enum Status {
Expand Down
Loading