diff --git a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.spec.ts b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.spec.ts index 69d4db4..1054b36 100644 --- a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.spec.ts +++ b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.spec.ts @@ -13,6 +13,7 @@ describe('Command Runner Builder', () => { let context: (dir: string) => ExecutorContext; let schema: GenerateApiLibSourcesExecutorSchema; let dockerSchema: GenerateApiLibSourcesExecutorSchema; + let dockerAltSchema: GenerateApiLibSourcesExecutorSchema; beforeEach(async () => { schema = { @@ -24,6 +25,12 @@ describe('Command Runner Builder', () => { sourceSpecPathOrUrl: 'open-api-spec.yml', useDockerBuild: true, }; + dockerAltSchema = { + generator: 'typescript-fetch', + dockerImage: 'alt/openapi-generator-cli:not-the-latest', + sourceSpecPathOrUrl: 'open-api-spec.yml', + useDockerBuild: true, + }; context = (dir: string) => ({ root: '/root', @@ -70,7 +77,7 @@ describe('Command Runner Builder', () => { '--rm', ...['-v', `${process.cwd()}:/local`], ...['-w', '/local'], - 'openapitools/openapi-generator-cli', + 'openapitools/openapi-generator-cli:latest', 'generate', ...['-i', 'open-api-spec.yml'], ...['-g', 'typescript-fetch'], @@ -82,4 +89,25 @@ describe('Command Runner Builder', () => { expect(success).toBe(true); allSpawned(); }); + + it('can run in docker with alt image', async () => { + const allSpawned = mockSpawn({ + command: 'docker', + args: [ + 'run', + '--rm', + ...['-v', `${process.cwd()}:/local`], + ...['-w', '/local'], + 'alt/openapi-generator-cli:not-the-latest', + 'generate', + ...['-i', 'open-api-spec.yml'], + ...['-g', 'typescript-fetch'], + ...['-o', './tmp/src/dockeralt'], + ], + exitCode: 0, + }); + const { success } = await executor(dockerAltSchema, context('dockeralt')); + expect(success).toBe(true); + allSpawned(); + }); }); diff --git a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.ts b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.ts index 9a044e1..12a5dfa 100644 --- a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.ts +++ b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/executor.ts @@ -19,6 +19,7 @@ export default async function runExecutor( await generateSources( options.useDockerBuild ?? false, + options.dockerImage ?? 'openapitools/openapi-generator-cli:latest', options.sourceSpecPathOrUrl, options.sourceSpecUrlAuthorizationHeaders, options.generator, @@ -33,6 +34,7 @@ export default async function runExecutor( async function generateSources( useDockerBuild: boolean, + dockerImage: string, apiSpecPathOrUrl: string, apiSpecAuthorizationHeaders: string, generator: string, @@ -47,7 +49,7 @@ async function generateSources( const { command, args } = useDockerBuild ? { command: 'docker', - args: ['run', '--rm', '-v', `${process.cwd()}:/local`, '-w', '/local', 'openapitools/openapi-generator-cli'], + args: ['run', '--rm', '-v', `${process.cwd()}:/local`, '-w', '/local', dockerImage], } : { command: 'npx', args: ['openapi-generator-cli'] }; diff --git a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.d.ts b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.d.ts index 53fdfd6..fb11111 100644 --- a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.d.ts +++ b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.d.ts @@ -2,6 +2,7 @@ export interface GenerateApiLibSourcesExecutorSchema { generator: string; sourceSpecPathOrUrl: string; useDockerBuild?: boolean; + dockerImage?: string; sourceSpecUrlAuthorizationHeaders?: string; additionalProperties?: string; globalProperties?: string; diff --git a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.json b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.json index 8e778d0..8bd2a39 100644 --- a/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.json +++ b/packages/nx-plugin-openapi/src/executors/generate-api-lib-sources/schema.json @@ -10,6 +10,11 @@ "description": "Should the build occur inside of a docker container", "default": false }, + "dockerImage": { + "type": "string", + "description": "Which docker image should be used for the build?", + "default": "openapitools/openapi-generator-cli:latest" + }, "generator": { "type": "string", "description": "The OpenAPITools generator you want to use", diff --git a/packages/nx-plugin-openapi/src/generators/api-lib/generator.ts b/packages/nx-plugin-openapi/src/generators/api-lib/generator.ts index c830d36..3b866e7 100644 --- a/packages/nx-plugin-openapi/src/generators/api-lib/generator.ts +++ b/packages/nx-plugin-openapi/src/generators/api-lib/generator.ts @@ -1,11 +1,17 @@ // Nrwl import { - addProjectConfiguration, formatFiles, generateFiles, GeneratorCallback, + addProjectConfiguration, + formatFiles, + generateFiles, + GeneratorCallback, getWorkspaceLayout, - joinPathFragments, names, + joinPathFragments, + names, offsetFromRoot, ProjectType, - readWorkspaceConfiguration, Tree, updateJson + readWorkspaceConfiguration, + Tree, + updateJson, } from '@nrwl/devkit'; import { runTasksInSerial } from '@nrwl/workspace/src/utilities/run-tasks-in-serial'; // Third Parties @@ -16,9 +22,6 @@ import init from '../init/generator'; // Schemas import { ApiLibGeneratorSchema } from './schema'; - - - const projectType: ProjectType = 'library'; interface NormalizedSchema extends ApiLibGeneratorSchema { @@ -82,6 +85,7 @@ function normalizeOptions(host: Tree, options: ApiLibGeneratorSchema): Normalize const getExecutorOptions = (options: NormalizedSchema): GenerateApiLibSourcesExecutorSchema => { const executorOptions: GenerateApiLibSourcesExecutorSchema = { useDockerBuild: options.useDockerBuild, + dockerImage: options.dockerImage, generator: options.generator, sourceSpecPathOrUrl: options.isRemoteSpec ? options.sourceSpecUrl diff --git a/packages/nx-plugin-openapi/src/generators/api-lib/schema.d.ts b/packages/nx-plugin-openapi/src/generators/api-lib/schema.d.ts index 5fdae2c..68ea3ae 100644 --- a/packages/nx-plugin-openapi/src/generators/api-lib/schema.d.ts +++ b/packages/nx-plugin-openapi/src/generators/api-lib/schema.d.ts @@ -1,6 +1,7 @@ export interface ApiLibGeneratorSchema { name: string; useDockerBuild?: boolean; + dockerImage?: string; generator?: string; tags?: string; directory?: string; diff --git a/packages/nx-plugin-openapi/src/generators/api-lib/schema.json b/packages/nx-plugin-openapi/src/generators/api-lib/schema.json index d622882..dd16d73 100644 --- a/packages/nx-plugin-openapi/src/generators/api-lib/schema.json +++ b/packages/nx-plugin-openapi/src/generators/api-lib/schema.json @@ -21,6 +21,12 @@ "default": false, "x-prompt": "Should the build occur inside of a docker container?" }, + "dockerImage": { + "type": "string", + "description": "Which docker image should be used for the build", + "default": "openapitools/openapi-generator-cli:latest", + "x-prompt": "Which docker image should be used for the build?" + }, "generator": { "type": "string", "description": "The generator this lib will use to build an API SDK (e.g.: typescript-fetch)",