Skip to content

Commit

Permalink
feat: possibility to override nx-gradle target names (#1084)
Browse files Browse the repository at this point in the history
* feat: possibility to override nx-gradle target names

* build: work in progress
  • Loading branch information
khalilou88 authored Jun 5, 2024
1 parent 3e36061 commit 5b45aa8
Show file tree
Hide file tree
Showing 9 changed files with 184 additions and 141 deletions.
9 changes: 8 additions & 1 deletion packages/common/src/lib/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,11 @@ export type NxMavenPluginOptions = {
testTargetName: string;
integrationTestTargetName: string;
};
export type NxGradlePluginOptions = { gradleRootDirectory: string };
export type NxGradlePluginOptions = {
gradleRootDirectory: string;
buildTargetName: string;
buildImageTargetName: string;
serveTargetName: string;
testTargetName: string;
integrationTestTargetName: string;
};
107 changes: 106 additions & 1 deletion packages/common/src/lib/utils/generators.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { joinPathFragments, names } from '@nx/devkit';
import { PluginConfiguration, joinPathFragments, names } from '@nx/devkit';
import { normalizeName } from '.';

export function generateSimpleProjectName(options: { name: string }) {
Expand Down Expand Up @@ -123,3 +123,108 @@ export const prettierrcNameOptions = [
'prettier.config.mjs',
'.prettierrc.toml',
];

export function getBuildTargetName(
plugin: PluginConfiguration | undefined,
): string {
if (typeof plugin === 'string') {
return 'build';
}

const options = plugin?.options;

if (
typeof options === 'object' &&
options &&
'buildTargetName' in options &&
typeof options.buildTargetName === 'string'
) {
return options.buildTargetName;
}

return 'build';
}

export function getBuildImageTargetName(
plugin: PluginConfiguration | undefined,
): string {
if (typeof plugin === 'string') {
return 'build-image';
}

const options = plugin?.options;

if (
typeof options === 'object' &&
options &&
'buildImageTargetName' in options &&
typeof options.buildImageTargetName === 'string'
) {
return options.buildImageTargetName;
}

return 'build-image';
}

export function getServeTargetName(
plugin: PluginConfiguration | undefined,
): string {
if (typeof plugin === 'string') {
return 'serve';
}

const options = plugin?.options;

if (
typeof options === 'object' &&
options &&
'serveTargetName' in options &&
typeof options.serveTargetName === 'string'
) {
return options.serveTargetName;
}

return 'serve';
}

export function getTestTargetName(
plugin: PluginConfiguration | undefined,
): string {
if (typeof plugin === 'string') {
return 'test';
}

const options = plugin?.options;

if (
typeof options === 'object' &&
options &&
'testTargetName' in options &&
typeof options.testTargetName === 'string'
) {
return options.testTargetName;
}

return 'test';
}

export function getIntegrationTestTargetName(
plugin: PluginConfiguration | undefined,
): string {
if (typeof plugin === 'string') {
return 'integration-test';
}

const options = plugin?.options;

if (
typeof options === 'object' &&
options &&
'integrationTestTargetName' in options &&
typeof options.integrationTestTargetName === 'string'
) {
return options.integrationTestTargetName;
}

return 'integration-test';
}
63 changes: 41 additions & 22 deletions packages/nx-gradle/src/generators/application/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ import {
generateProjectName,
generateProjectRoot,
generateSimpleProjectName,
getBuildImageTargetName,
getBuildTargetName,
getIntegrationTestTargetName,
getServeTargetName,
getTestTargetName,
isCustomPortFunction,
parseTags,
} from '@jnxplus/common';
Expand All @@ -30,10 +35,11 @@ import {
findQuarkusVersion,
getDsl,
getGradleRootDirectory,
getPlugin,
getVersionManagement,
} from '../../utils';
import { NxGradleAppGeneratorSchema } from './schema';
import { addMissingCode } from '../../utils/libs-versions-toml';
import { NxGradleAppGeneratorSchema } from './schema';

export default async function (
tree: Tree,
Expand All @@ -57,6 +63,11 @@ interface NormalizedSchema extends NxGradleAppGeneratorSchema {
gradleRootDirectory: string;
versionManagement: VersionManagementType;
basePackage: string;
buildTargetName: string;
buildImageTargetName: string;
serveTargetName: string;
testTargetName: string;
integrationTestTargetName: string;
}

function normalizeOptions(
Expand Down Expand Up @@ -112,6 +123,13 @@ function normalizeOptions(

const basePackage = generateBasePackage(options.groupId);

const plugin = getPlugin();
const buildTargetName = getBuildTargetName(plugin);
const buildImageTargetName = getBuildImageTargetName(plugin);
const serveTargetName = getServeTargetName(plugin);
const testTargetName = getTestTargetName(plugin);
const integrationTestTargetName = getIntegrationTestTargetName(plugin);

return {
...options,
projectName,
Expand All @@ -128,6 +146,11 @@ function normalizeOptions(
gradleRootDirectory,
versionManagement,
basePackage,
buildTargetName,
buildImageTargetName,
serveTargetName,
testTargetName,
integrationTestTargetName,
};
}

Expand Down Expand Up @@ -343,45 +366,45 @@ async function applicationGenerator(
projectType: 'application',
sourceRoot: `./${normalizedOptions.projectRoot}/src`,
targets: {
build: {
[normalizedOptions.buildTargetName]: {
executor: '@jnxplus/nx-gradle:run-task',
outputs: [`{projectRoot}/build`],
options: {
task: 'build',
},
},
'build-image': {},
serve: {
[normalizedOptions.buildImageTargetName]: {},
[normalizedOptions.serveTargetName]: {
executor: '@jnxplus/nx-gradle:run-task',
options: {
task: 'run',
},
},
test: {
[normalizedOptions.testTargetName]: {
executor: '@jnxplus/nx-gradle:run-task',
options: {
task: 'test',
},
},
'integration-test': {},
[normalizedOptions.integrationTestTargetName]: {},
},
tags: normalizedOptions.parsedTags,
};

const targets = projectConfiguration.targets ?? {};

if (options.framework === 'spring-boot') {
targets['build'].options = {
...targets['build'].options,
targets[`${normalizedOptions.buildTargetName}`].options = {
...targets[`${normalizedOptions.buildTargetName}`].options,
task: normalizedOptions.packaging === 'war' ? 'bootWar' : 'bootJar',
};

targets['serve'].options = {
...targets['serve'].options,
targets[`${normalizedOptions.serveTargetName}`].options = {
...targets[`${normalizedOptions.serveTargetName}`].options,
task: 'bootRun',
};

targets['build-image'] = {
targets[`${normalizedOptions.buildImageTargetName}`] = {
executor: '@jnxplus/nx-gradle:run-task',
options: {
task: 'bootBuildImage',
Expand All @@ -390,21 +413,21 @@ async function applicationGenerator(
}

if (options.framework === 'quarkus') {
targets['build'].options = {
...targets['build'].options,
targets[`${normalizedOptions.buildTargetName}`].options = {
...targets[`${normalizedOptions.buildTargetName}`].options,
task: 'quarkusBuild',
};

targets['serve'].options = {
...targets['serve'].options,
targets[`${normalizedOptions.serveTargetName}`].options = {
...targets[`${normalizedOptions.serveTargetName}`].options,
task: 'quarkusDev',
};

targets['build-image'] = {
targets[`${normalizedOptions.buildImageTargetName}`] = {
executor: '@jnxplus/nx-gradle:quarkus-build-image',
};

targets['integration-test'] = {
targets[`${normalizedOptions.integrationTestTargetName}`] = {
executor: '@jnxplus/nx-gradle:run-task',
options: {
task: 'quarkusIntTest',
Expand All @@ -413,16 +436,12 @@ async function applicationGenerator(
}

if (options.framework === 'micronaut') {
targets['build-image'] = {
targets[`${normalizedOptions.buildImageTargetName}`] = {
executor: '@jnxplus/nx-gradle:run-task',
options: {
task: 'dockerBuild',
},
};

targets['serve'].options = {
...targets['serve'].options,
};
}

clearEmpties(targets);
Expand Down
15 changes: 13 additions & 2 deletions packages/nx-gradle/src/generators/library/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import {
generateProjectName,
generateProjectRoot,
generateSimpleProjectName,
getBuildTargetName,
getTestTargetName,
parseProjects,
parseTags,
} from '@jnxplus/common';
Expand All @@ -27,6 +29,7 @@ import {
addProjectToGradleSetting,
getDsl,
getGradleRootDirectory,
getPlugin,
getVersionManagement,
} from '../../utils';
import { addMissingCode } from '../../utils/libs-versions-toml';
Expand All @@ -51,6 +54,8 @@ interface NormalizedSchema extends NxGradleLibGeneratorSchema {
kotlinExtension: string;
gradleRootDirectory: string;
versionManagement: VersionManagementType;
buildTargetName: string;
testTargetName: string;
}

function normalizeOptions(
Expand Down Expand Up @@ -94,6 +99,10 @@ function normalizeOptions(

const versionManagement = getVersionManagement(tree, gradleRootDirectory);

const plugin = getPlugin();
const buildTargetName = getBuildTargetName(plugin);
const testTargetName = getTestTargetName(plugin);

return {
...options,
projectName,
Expand All @@ -107,6 +116,8 @@ function normalizeOptions(
kotlinExtension,
gradleRootDirectory,
versionManagement,
buildTargetName,
testTargetName,
};
}

Expand Down Expand Up @@ -290,14 +301,14 @@ async function libraryGenerator(
projectType: 'library',
sourceRoot: `./${normalizedOptions.projectRoot}/src`,
targets: {
build: {
[normalizedOptions.buildTargetName]: {
executor: '@jnxplus/nx-gradle:run-task',
outputs: [`{projectRoot}/build`],
options: {
task: 'build',
},
},
test: {
[normalizedOptions.testTargetName]: {
executor: '@jnxplus/nx-gradle:run-task',
options: {
task: 'test',
Expand Down
9 changes: 8 additions & 1 deletion packages/nx-gradle/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
import {
ExecutorContext,
NxJsonConfiguration,
PluginConfiguration,
Tree,
joinPathFragments,
normalizePath,
Expand Down Expand Up @@ -60,7 +61,7 @@ export function getRootProjectName(settingsGradleContent: string) {
return matches[0];
}

export function getGradleRootDirectory(): string {
export function getPlugin(): PluginConfiguration | undefined {
const nxJsonPath = path.join(workspaceRoot, 'nx.json');

const nxJson = readJsonFile<NxJsonConfiguration>(nxJsonPath);
Expand All @@ -71,6 +72,12 @@ export function getGradleRootDirectory(): string {
: p.plugin === '@jnxplus/nx-gradle',
);

return plugin;
}

export function getGradleRootDirectory(): string {
const plugin = getPlugin();

if (typeof plugin === 'string') {
return '';
}
Expand Down
Loading

0 comments on commit 5b45aa8

Please sign in to comment.