From 223c5522fdc2ea35e6e878ee01a940dfc4049f7d Mon Sep 17 00:00:00 2001 From: Deep Singhvi Date: Tue, 19 Mar 2024 16:12:58 -0400 Subject: [PATCH] (feat): set `ir-version` override when running generators (#3212) * (fix): configure ir version overrides in generators.yml * set ir version * fixes compile * fix compile --- .../generators-yml/GeneratorsConfiguration.ts | 1 + .../convertGeneratorsConfiguration.ts | 3 +- .../schemas/GeneratorInvocationSchema.ts | 1 + .../cli/generation/ir-migrations/src/index.ts | 5 ++- ...eIntermediateRepresentationForGenerator.ts | 20 +++++++++ .../src/runLocalGenerationForWorkspace.ts | 2 +- .../src/createAndStartJob.ts | 42 +++++++++++++------ .../src/runRemoteGenerationForAPIWorkspace.ts | 3 +- .../src/runRemoteGenerationForGenerator.ts | 7 +++- .../commands/test/runDockerForWorkspace.ts | 3 +- .../exhaustive/additional_init_exports | 2 +- 11 files changed, 69 insertions(+), 20 deletions(-) diff --git a/packages/cli/configuration/src/generators-yml/GeneratorsConfiguration.ts b/packages/cli/configuration/src/generators-yml/GeneratorsConfiguration.ts index 85185fdaffa..4c957630e28 100644 --- a/packages/cli/configuration/src/generators-yml/GeneratorsConfiguration.ts +++ b/packages/cli/configuration/src/generators-yml/GeneratorsConfiguration.ts @@ -34,6 +34,7 @@ export interface GeneratorGroup { export interface GeneratorInvocation { name: string; + irVersionOverride: string | undefined; version: string; config: unknown; outputMode: FernFiddle.remoteGen.OutputMode; diff --git a/packages/cli/configuration/src/generators-yml/convertGeneratorsConfiguration.ts b/packages/cli/configuration/src/generators-yml/convertGeneratorsConfiguration.ts index fe3d934be91..8f1c5491e4d 100644 --- a/packages/cli/configuration/src/generators-yml/convertGeneratorsConfiguration.ts +++ b/packages/cli/configuration/src/generators-yml/convertGeneratorsConfiguration.ts @@ -153,7 +153,8 @@ async function convertGenerator({ generator.output?.location === "local-file-system" ? resolve(dirname(absolutePathToGeneratorsConfiguration), generator.output.path) : undefined, - language: getLanguageFromGeneratorName(generator.name) + language: getLanguageFromGeneratorName(generator.name), + irVersionOverride: generator["ir-version"] ?? undefined }; } diff --git a/packages/cli/configuration/src/generators-yml/schemas/GeneratorInvocationSchema.ts b/packages/cli/configuration/src/generators-yml/schemas/GeneratorInvocationSchema.ts index 3a37790e868..c5aa1c6fac8 100644 --- a/packages/cli/configuration/src/generators-yml/schemas/GeneratorInvocationSchema.ts +++ b/packages/cli/configuration/src/generators-yml/schemas/GeneratorInvocationSchema.ts @@ -8,6 +8,7 @@ export const GeneratorInvocationSchema = z.strictObject({ output: z.optional(GeneratorOutputSchema), github: z.optional(GithubConfigurationSchema), config: z.unknown(), + "ir-version": z.optional(z.string()), // Feature flag used to enable better IR naming. "smart-casing": z.optional(z.boolean()), // Temporary way to unblock example serialization diff --git a/packages/cli/generation/ir-migrations/src/index.ts b/packages/cli/generation/ir-migrations/src/index.ts index 67a6363ad90..1b79391c042 100644 --- a/packages/cli/generation/ir-migrations/src/index.ts +++ b/packages/cli/generation/ir-migrations/src/index.ts @@ -1,3 +1,6 @@ export { getMinimumVersionForGenerator } from "./getMinimumVersionForGenerator"; -export { migrateIntermediateRepresentationForGenerator } from "./migrateIntermediateRepresentationForGenerator"; +export { + migrateIntermediateRepresentationForGenerator, + migrateIntermediateRepresentationToVersionForGenerator +} from "./migrateIntermediateRepresentationForGenerator"; export { migrateIntermediateRepresentationThroughVersion } from "./migrateIntermediateRepresentationThroughVersion"; diff --git a/packages/cli/generation/ir-migrations/src/migrateIntermediateRepresentationForGenerator.ts b/packages/cli/generation/ir-migrations/src/migrateIntermediateRepresentationForGenerator.ts index cb43c55e9e7..6c436bf5fb0 100644 --- a/packages/cli/generation/ir-migrations/src/migrateIntermediateRepresentationForGenerator.ts +++ b/packages/cli/generation/ir-migrations/src/migrateIntermediateRepresentationForGenerator.ts @@ -19,3 +19,23 @@ export function migrateIntermediateRepresentationForGenerator({ }); return migrated.jsonify(); } + +export function migrateIntermediateRepresentationToVersionForGenerator({ + intermediateRepresentation, + context, + targetGenerator, + irVersion +}: { + intermediateRepresentation: IntermediateRepresentation; + context: TaskContext; + targetGenerator: GeneratorNameAndVersion; + irVersion: string; +}): Promise { + const migrated = getIntermediateRepresentationMigrator().migrateThroughVersion({ + version: irVersion, + intermediateRepresentation, + context, + targetGenerator + }); + return migrated.jsonify(); +} diff --git a/packages/cli/generation/local-generation/local-workspace-runner/src/runLocalGenerationForWorkspace.ts b/packages/cli/generation/local-generation/local-workspace-runner/src/runLocalGenerationForWorkspace.ts index 306762e5662..3db110956bd 100644 --- a/packages/cli/generation/local-generation/local-workspace-runner/src/runLocalGenerationForWorkspace.ts +++ b/packages/cli/generation/local-generation/local-workspace-runner/src/runLocalGenerationForWorkspace.ts @@ -50,7 +50,7 @@ export async function runLocalGenerationForWorkspace({ workspaceTempDir, keepDocker, context: interactiveTaskContext, - irVersionOverride: undefined, + irVersionOverride: generatorInvocation.irVersionOverride, outputVersionOverride: undefined, writeSnippets: false, writeUnitTests: false diff --git a/packages/cli/generation/remote-generation/remote-workspace-runner/src/createAndStartJob.ts b/packages/cli/generation/remote-generation/remote-workspace-runner/src/createAndStartJob.ts index 4cdd541f7ac..28ed92ed3a8 100644 --- a/packages/cli/generation/remote-generation/remote-workspace-runner/src/createAndStartJob.ts +++ b/packages/cli/generation/remote-generation/remote-workspace-runner/src/createAndStartJob.ts @@ -2,7 +2,10 @@ import { FernToken } from "@fern-api/auth"; import { generatorsYml } from "@fern-api/configuration"; import { createFiddleService, getFiddleOrigin } from "@fern-api/core"; import { stringifyLargeObject } from "@fern-api/fs-utils"; -import { migrateIntermediateRepresentationForGenerator } from "@fern-api/ir-migrations"; +import { + migrateIntermediateRepresentationForGenerator, + migrateIntermediateRepresentationToVersionForGenerator +} from "@fern-api/ir-migrations"; import { IntermediateRepresentation } from "@fern-api/ir-sdk"; import { TaskContext } from "@fern-api/task-context"; import { APIWorkspace } from "@fern-api/workspace-loader"; @@ -26,7 +29,8 @@ export async function createAndStartJob({ context, shouldLogS3Url, token, - whitelabel + whitelabel, + irVersionOverride }: { workspace: APIWorkspace; organization: string; @@ -37,6 +41,7 @@ export async function createAndStartJob({ shouldLogS3Url: boolean; token: FernToken; whitelabel: FernFiddle.WhitelabelConfig | undefined; + irVersionOverride: string | undefined; }): Promise { const job = await createJob({ workspace, @@ -48,7 +53,7 @@ export async function createAndStartJob({ token, whitelabel }); - await startJob({ intermediateRepresentation, job, context, generatorInvocation }); + await startJob({ intermediateRepresentation, job, context, generatorInvocation, irVersionOverride }); return job; } @@ -188,21 +193,34 @@ async function startJob({ intermediateRepresentation, generatorInvocation, job, - context + context, + irVersionOverride }: { intermediateRepresentation: IntermediateRepresentation; generatorInvocation: generatorsYml.GeneratorInvocation; job: FernFiddle.remoteGen.CreateJobResponse; context: TaskContext; + irVersionOverride: string | undefined; }): Promise { - const migratedIntermediateRepresentation = await migrateIntermediateRepresentationForGenerator({ - intermediateRepresentation, - context, - targetGenerator: { - name: generatorInvocation.name, - version: generatorInvocation.version - } - }); + const migratedIntermediateRepresentation = + irVersionOverride == null + ? await migrateIntermediateRepresentationForGenerator({ + intermediateRepresentation, + context, + targetGenerator: { + name: generatorInvocation.name, + version: generatorInvocation.version + } + }) + : await migrateIntermediateRepresentationToVersionForGenerator({ + intermediateRepresentation, + context, + irVersion: irVersionOverride, + targetGenerator: { + name: generatorInvocation.name, + version: generatorInvocation.version + } + }); const formData = new FormData(); diff --git a/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForAPIWorkspace.ts b/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForAPIWorkspace.ts index 23504932641..6ddfcc77423 100644 --- a/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForAPIWorkspace.ts +++ b/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForAPIWorkspace.ts @@ -48,7 +48,8 @@ export async function runRemoteGenerationForAPIWorkspace({ audiences: generatorGroup.audiences, shouldLogS3Url, token, - whitelabel + whitelabel, + irVersionOverride: generatorInvocation.irVersionOverride }); if (remoteTaskHandlerResponse != null && remoteTaskHandlerResponse.createdSnippets) { snippetsProducedBy.push(generatorInvocation); diff --git a/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForGenerator.ts b/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForGenerator.ts index 5f9b9633f87..ade1c363778 100644 --- a/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForGenerator.ts +++ b/packages/cli/generation/remote-generation/remote-workspace-runner/src/runRemoteGenerationForGenerator.ts @@ -17,7 +17,8 @@ export async function runRemoteGenerationForGenerator({ audiences, shouldLogS3Url, token, - whitelabel + whitelabel, + irVersionOverride }: { organization: string; workspace: FernWorkspace; @@ -28,6 +29,7 @@ export async function runRemoteGenerationForGenerator({ shouldLogS3Url: boolean; token: FernToken; whitelabel: FernFiddle.WhitelabelConfig | undefined; + irVersionOverride: string | undefined; }): Promise { const intermediateRepresentation = await generateIntermediateRepresentation({ workspace, @@ -46,7 +48,8 @@ export async function runRemoteGenerationForGenerator({ intermediateRepresentation, shouldLogS3Url, token, - whitelabel + whitelabel, + irVersionOverride }); interactiveTaskContext.logger.debug(`Job ID: ${job.jobId}`); diff --git a/packages/seed/src/commands/test/runDockerForWorkspace.ts b/packages/seed/src/commands/test/runDockerForWorkspace.ts index 6178691e171..08c2c9e1f9f 100644 --- a/packages/seed/src/commands/test/runDockerForWorkspace.ts +++ b/packages/seed/src/commands/test/runDockerForWorkspace.ts @@ -53,7 +53,8 @@ export async function runDockerForWorkspace({ absolutePathToLocalOutput: absolutePathToOutput, language, smartCasing: false, - disableExamples: false + disableExamples: false, + irVersionOverride: irVersion } ] }; diff --git a/seed/python-sdk/exhaustive/additional_init_exports b/seed/python-sdk/exhaustive/additional_init_exports index 68257a57a34..39ada5cccb1 160000 --- a/seed/python-sdk/exhaustive/additional_init_exports +++ b/seed/python-sdk/exhaustive/additional_init_exports @@ -1 +1 @@ -Subproject commit 68257a57a34e7cbc24e380004338aa023115c7d1 +Subproject commit 39ada5cccb116c211d76966344a2da18c944def8