fix(gradle): build nx graph for gradle projects regardless of build gradle file location (#29783) (#29802)
<!-- Please make sure you have read the submission guidelines before posting an PR --> <!-- https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr --> <!-- Please make sure that your commit message follows our format --> <!-- Example: `fix(nx): must begin with lowercase` --> <!-- If this is a particularly complex change or feature addition, you can request a dedicated Nx release for this pull request branch. Mention someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they will confirm if the PR warrants its own release for testing purposes, and generate it for you if appropriate. --> ## Current Behavior <!-- This is the behavior we have today --> With a project structure where build.gradle.kts is defined in a separate buildSrc directory, and not in the root project directory where `gradlew` is defined, the gradle project is not included in nx project graph. This is a valid gradle project configuration, with project-report tasks configured. Running ./gradlew projectReport works and builds the projectReport. ## Expected Behavior <!-- This is the behavior we should expect with the changes in this PR --> With the fix, as long as expected tasks - projectReport or projectReportAll - is defined, nx should be able to build the nx graph regardless of the location of the `build.gradle` or `build.gradle.kts` file. ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #29783
This commit is contained in:
parent
e4ea6b90df
commit
2a0d89ddc3
@ -184,6 +184,12 @@ describe('Nx Import Gradle', () => {
|
|||||||
`${directory}/gradlew`,
|
`${directory}/gradlew`,
|
||||||
`${directory}/gradlew.bat`
|
`${directory}/gradlew.bat`
|
||||||
);
|
);
|
||||||
|
const nxJson = readJson('nx.json');
|
||||||
|
const gradlePlugin = nxJson.plugins.find(
|
||||||
|
(plugin) => plugin.plugin === '@nx/gradle'
|
||||||
|
);
|
||||||
|
gradlePlugin.exclude = [];
|
||||||
|
updateJson('nx.json', () => nxJson);
|
||||||
expect(() => {
|
expect(() => {
|
||||||
runCLI(`show projects`);
|
runCLI(`show projects`);
|
||||||
runCLI('build groovy-app');
|
runCLI('build groovy-app');
|
||||||
|
|||||||
@ -22,17 +22,7 @@ export async function getProjectReportLines(
|
|||||||
): Promise<string[]> {
|
): Promise<string[]> {
|
||||||
let projectReportBuffer: Buffer;
|
let projectReportBuffer: Buffer;
|
||||||
|
|
||||||
// if there is no build.gradle or build.gradle.kts file, we cannot run the projectReport nor projectReportAll task
|
// Attempt to run projectReport or projectReportAll task, regardless of build.gradle or build.gradle.kts location
|
||||||
if (
|
|
||||||
!existsSync(join(dirname(gradlewFile), 'build.gradle')) &&
|
|
||||||
!existsSync(join(dirname(gradlewFile), 'build.gradle.kts'))
|
|
||||||
) {
|
|
||||||
logger.warn(
|
|
||||||
`Could not find build file near ${gradlewFile}. Please run 'nx generate @nx/gradle:init' to generate the necessary tasks.`
|
|
||||||
);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
projectReportBuffer = await execGradleAsync(gradlewFile, [
|
projectReportBuffer = await execGradleAsync(gradlewFile, [
|
||||||
'projectReportAll',
|
'projectReportAll',
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { existsSync } from 'node:fs';
|
import { existsSync } from 'node:fs';
|
||||||
import { join } from 'node:path';
|
import { join, relative } from 'node:path';
|
||||||
import { bold } from 'chalk';
|
import { bold } from 'chalk';
|
||||||
|
|
||||||
import { NxJsonConfiguration } from '../../../config/nx-json';
|
import { NxJsonConfiguration } from '../../../config/nx-json';
|
||||||
@ -83,7 +83,13 @@ function findPluginAndFilesWithError(
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
excludeFiles = excludeFiles.filter(Boolean);
|
excludeFiles = excludeFiles.filter(Boolean).map((excludeFile) => {
|
||||||
|
const file = excludeFile.file;
|
||||||
|
excludeFile.file = file.startsWith(workspaceRoot)
|
||||||
|
? relative(workspaceRoot, file)
|
||||||
|
: file;
|
||||||
|
return excludeFile;
|
||||||
|
});
|
||||||
return {
|
return {
|
||||||
pluginIndex,
|
pluginIndex,
|
||||||
excludeFiles,
|
excludeFiles,
|
||||||
|
|||||||
@ -409,7 +409,7 @@ export async function createProjectConfigurationsWithPlugins(
|
|||||||
e
|
e
|
||||||
: // This represents a single plugin erroring out with a hard error.
|
: // This represents a single plugin erroring out with a hard error.
|
||||||
new AggregateCreateNodesError([[null, e]], []);
|
new AggregateCreateNodesError([[null, e]], []);
|
||||||
if (pluginIndex) {
|
if (pluginIndex !== undefined) {
|
||||||
error.pluginIndex = pluginIndex;
|
error.pluginIndex = pluginIndex;
|
||||||
}
|
}
|
||||||
formatAggregateCreateNodesError(error, pluginName);
|
formatAggregateCreateNodesError(error, pluginName);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user