From 135d088f21498bba2f11cb37d43fd57fb57265e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= <20689156+shortcuts@users.noreply.github.com> Date: Mon, 21 Mar 2022 16:46:09 +0100 Subject: [PATCH] chore: add clean models to preGen (#271) --- config/clients.config.json | 5 ++- scripts/config.ts | 4 ++ scripts/generate.ts | 61 ++++++++++++++++++++++++++---- scripts/pre-gen/setHostsOptions.ts | 5 ++- 4 files changed, 65 insertions(+), 10 deletions(-) diff --git a/config/clients.config.json b/config/clients.config.json index 6fcbd37f77..d1a36c2209 100644 --- a/config/clients.config.json +++ b/config/clients.config.json @@ -1,6 +1,7 @@ { "java": { "folder": "clients/algoliasearch-client-java-2", + "modelFolder": "algoliasearch-core/com/algolia/model", "customGenerator": "algolia-java", "tests": { "extension": ".test.java", @@ -9,12 +10,14 @@ }, "javascript": { "folder": "clients/algoliasearch-client-javascript", + "modelFolder": "model", "tests": { "extension": ".test.ts", "outputFolder": "src" } }, "php": { - "folder": "clients/algoliasearch-client-php" + "folder": "clients/algoliasearch-client-php", + "modelFolder": "lib/Model" } } diff --git a/scripts/config.ts b/scripts/config.ts index 76fcee8c61..30638510d8 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -4,6 +4,10 @@ export function getLanguageFolder(language: string): string { return clientsConfig[language].folder; } +export function getLanguageModelFolder(language: string): string { + return clientsConfig[language].modelFolder; +} + export function getTestExtension(language: string): string | undefined { return clientsConfig[language]?.tests?.extension; } diff --git a/scripts/generate.ts b/scripts/generate.ts index 8473c9719a..753f3553a1 100644 --- a/scripts/generate.ts +++ b/scripts/generate.ts @@ -1,21 +1,66 @@ +import path from 'path'; + import { buildJSClientUtils } from './buildClients'; import { buildSpecs } from './buildSpecs'; -import { buildCustomGenerators, CI, run, runIfExists } from './common'; -import { getCustomGenerator, getLanguageFolder } from './config'; +import { + buildCustomGenerators, + CI, + run, + runIfExists, + toAbsolutePath, +} from './common'; +import { + getCustomGenerator, + getLanguageFolder, + getLanguageModelFolder, +} from './config'; import { formatter } from './formatter'; import { createSpinner } from './oraLog'; import { setHostsOptions } from './pre-gen/setHostsOptions'; import type { Generator } from './types'; -async function preGen( - { language, client, key, output }: Generator, +/** + * Remove `model` folder for the current language and client. + */ +async function removeExistingModel( + { language, client, output }: Generator, verbose?: boolean ): Promise { - await runIfExists(`./scripts/pre-gen/${language}.sh`, `${output} ${key}`, { - verbose, - }); + const baseModelFolder = getLanguageModelFolder(language); + + let clientModel = ''; + switch (language) { + case 'java': + clientModel = client; + break; + default: + break; + } + + await run( + `rm -rf ${toAbsolutePath( + path.resolve('..', output, baseModelFolder, clientModel) + )}`, + { + verbose, + } + ); +} + +async function preGen(gen: Generator, verbose?: boolean): Promise { + // Run bash pre-gen script + await runIfExists( + `./scripts/pre-gen/${gen.language}.sh`, + `${gen.output} ${gen.key}`, + { + verbose, + } + ); + + await removeExistingModel(gen); - await setHostsOptions({ client, key }); + // Updates `openapitools.json` file based on the spec `servers` + await setHostsOptions({ client: gen.client, key: gen.key }); } async function generateClient( diff --git a/scripts/pre-gen/setHostsOptions.ts b/scripts/pre-gen/setHostsOptions.ts index eeae43775d..9182722459 100644 --- a/scripts/pre-gen/setHostsOptions.ts +++ b/scripts/pre-gen/setHostsOptions.ts @@ -122,7 +122,10 @@ export async function setHostsOptions({ ...additionalProperties, }; - await writeFile(openapitoolsPath, JSON.stringify(openapitools, null, 2)); + await writeFile( + openapitoolsPath, + JSON.stringify(openapitools, null, 2).concat('\n') + ); } catch (e) { throw new Error(`Error reading yaml file ${generator}: ${e}`); }