diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index da8cdfd9ec..2176ec1947 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -20,6 +20,7 @@ "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", "commands_build_options_l": "Log file to save console output to", + "commands_build_info_interface_no_strategy": "Interface projects do not use build strategies. Building without a strategy...", "commands_infra_description": "Modular Infrastructure-As-Code Orchestrator", "commands_infra_actions_subtitle": "Infra allows you to execute the following commands:", "commands_infra_options_options": "options", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index da8cdfd9ec..2176ec1947 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -20,6 +20,7 @@ "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", "commands_build_options_l": "Log file to save console output to", + "commands_build_info_interface_no_strategy": "Interface projects do not use build strategies. Building without a strategy...", "commands_infra_description": "Modular Infrastructure-As-Code Orchestrator", "commands_infra_actions_subtitle": "Infra allows you to execute the following commands:", "commands_infra_options_options": "options", diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 6e77995d05..a3c3efdfd5 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -13,6 +13,7 @@ import { parseClientConfigOption, parseManifestFileOption, parseLogFileOption, + Logger, } from "../lib"; import { CodeGenerator } from "../lib/codegen"; import { @@ -21,6 +22,7 @@ import { SupportedStrategies, DockerImageBuildStrategy, LocalBuildStrategy, + EmptyBuildStrategy, } from "../lib/build-strategies"; import path from "path"; @@ -115,11 +117,20 @@ async function validateManifestModules(polywrapManifest: PolywrapManifest) { } } -function createBuildStrategy( +async function createBuildStrategy( strategy: BuildCommandOptions["strategy"], outputDir: string, - project: PolywrapProject -): BuildStrategy { + project: PolywrapProject, + logger: Logger +): Promise { + const isInterfaceProject = + (await project.getManifest()).project.type === "interface"; + + if (isInterfaceProject) { + logger.info(intlMsg.commands_build_info_interface_no_strategy()); + return new EmptyBuildStrategy({ outputDir, project }); + } + switch (strategy) { case SupportedStrategies.LOCAL: return new LocalBuildStrategy({ outputDir, project }); @@ -159,7 +170,12 @@ async function run(options: BuildCommandOptions) { const polywrapManifest = await project.getManifest(); await validateManifestModules(polywrapManifest); - const buildStrategy = createBuildStrategy(strategy, outputDir, project); + const buildStrategy = await createBuildStrategy( + strategy, + outputDir, + project, + logger + ); const schemaComposer = new SchemaComposer({ project, diff --git a/packages/cli/src/lib/build-strategies/strategies/EmptyStrategy.ts b/packages/cli/src/lib/build-strategies/strategies/EmptyStrategy.ts new file mode 100644 index 0000000000..6a4ce41182 --- /dev/null +++ b/packages/cli/src/lib/build-strategies/strategies/EmptyStrategy.ts @@ -0,0 +1,11 @@ +import { BuildStrategy } from "../BuildStrategy"; + +export class EmptyBuildStrategy extends BuildStrategy { + getStrategyName(): string { + return "empty"; + } + + public async buildSources(): Promise { + return; + } +} diff --git a/packages/cli/src/lib/build-strategies/strategies/index.ts b/packages/cli/src/lib/build-strategies/strategies/index.ts index e9f431e872..fb6b412d57 100644 --- a/packages/cli/src/lib/build-strategies/strategies/index.ts +++ b/packages/cli/src/lib/build-strategies/strategies/index.ts @@ -1,3 +1,4 @@ export * from "./DockerVMStrategy"; export * from "./LocalStrategy"; export * from "./DockerImageStrategy"; +export * from "./EmptyStrategy";