From 0eea258fc118be22af8cd5adef30973ad744ead8 Mon Sep 17 00:00:00 2001 From: Alex Pascal Date: Fri, 10 May 2024 12:32:27 -0700 Subject: [PATCH 1/2] Write tools config in `genkit init`. --- .../nextjs.genkit-tools.config.js.template | 6 +++++ genkit-tools/cli/src/commands/init.ts | 25 +++++++++++++++++++ genkit-tools/common/src/runner/runner.ts | 10 +++++--- 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 genkit-tools/cli/config/nextjs.genkit-tools.config.js.template diff --git a/genkit-tools/cli/config/nextjs.genkit-tools.config.js.template b/genkit-tools/cli/config/nextjs.genkit-tools.config.js.template new file mode 100644 index 0000000000..0b44568054 --- /dev/null +++ b/genkit-tools/cli/config/nextjs.genkit-tools.config.js.template @@ -0,0 +1,6 @@ +module.exports = { + runner: { + mode: 'harness', + files: [$GENKIT_HARNESS_FILES], + }, +}; diff --git a/genkit-tools/cli/src/commands/init.ts b/genkit-tools/cli/src/commands/init.ts index eff440b9b2..8175b94234 100644 --- a/genkit-tools/cli/src/commands/init.ts +++ b/genkit-tools/cli/src/commands/init.ts @@ -150,6 +150,8 @@ const sampleTemplatePaths: Record = { nextjs: '../../config/nextjs.genkit.ts.template', }; +const nextjsToolsConfigTemplatePath = '../../config/nextjs.genkit-tools.config.js.template'; + /** Supported runtimes for the init command. */ const supportedRuntimes: Runtime[] = ['node']; @@ -250,6 +252,7 @@ export const init = new Command('init') ) { generateSampleFile(platform, modelOptions[model].plugin, plugins); } + generateToolsConfig(platform); } catch (error) { logger.error(error); process.exit(1); @@ -325,6 +328,28 @@ async function updatePackageJson() { fs.writeFileSync(packageJsonPath, JSON.stringify(newPackageJson, null, 2)); } +/** + * Generates an appropriate tools config for the given platform. + * @param platform platform + */ +function generateToolsConfig(platform: Platform) { + if (platform === 'nextjs') { + const templatePath = path.join(__dirname, nextjsToolsConfigTemplatePath); + let template = fs.readFileSync(templatePath, 'utf8'); + if (fs.existsSync('src/app')) { + template = template.replace('$GENKIT_HARNESS_FILES', `'./src/app/*.ts'`); + } else if (fs.existsSync('app')) { + template = template.replace('$GENKIT_HARNESS_FILES', `'./app/*.js'`); + } else { + throw new Error( + 'Unable to resolve source folder (app or src/app) of you next.js app.' + ); + } + const configPath = path.join(process.cwd(), 'genkit-tools.conf.js'); + fs.writeFileSync(configPath, template, 'utf8'); + } +} + /** * Generates a sample index.ts file. * @param platform Deployment platform. diff --git a/genkit-tools/common/src/runner/runner.ts b/genkit-tools/common/src/runner/runner.ts index 57d338cafb..c1ee24be40 100644 --- a/genkit-tools/common/src/runner/runner.ts +++ b/genkit-tools/common/src/runner/runner.ts @@ -110,11 +110,13 @@ export class Runner { } if (this.autoReload) { const config = await findToolsConfig(); - this.buildCommand = config?.builder?.cmd; - if (!this.buildCommand && detectRuntime(process.cwd()) === 'node') { - this.buildCommand = 'npm run build'; + if (config?.runner?.mode !== 'harness') { + this.buildCommand = config?.builder?.cmd; + if (!this.buildCommand && detectRuntime(process.cwd()) === 'node') { + this.buildCommand = 'npm run build'; + } + this.build(); } - this.build(); this.watchForChanges(); } return this.startApp(); From 7fff4f84750e2e64ab75ea74bfacb276ce780afd Mon Sep 17 00:00:00 2001 From: Alex Pascal Date: Fri, 10 May 2024 12:35:56 -0700 Subject: [PATCH 2/2] Update init.ts --- genkit-tools/cli/src/commands/init.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/genkit-tools/cli/src/commands/init.ts b/genkit-tools/cli/src/commands/init.ts index 8175b94234..6b56568088 100644 --- a/genkit-tools/cli/src/commands/init.ts +++ b/genkit-tools/cli/src/commands/init.ts @@ -150,7 +150,8 @@ const sampleTemplatePaths: Record = { nextjs: '../../config/nextjs.genkit.ts.template', }; -const nextjsToolsConfigTemplatePath = '../../config/nextjs.genkit-tools.config.js.template'; +const nextjsToolsConfigTemplatePath = + '../../config/nextjs.genkit-tools.config.js.template'; /** Supported runtimes for the init command. */ const supportedRuntimes: Runtime[] = ['node'];