@nx/gradle
Version:
132 lines (129 loc) • 4.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initGenerator = initGenerator;
exports.addBuildGradleFileNextToSettingsGradle = addBuildGradleFileNextToSettingsGradle;
exports.updateNxJsonConfiguration = updateNxJsonConfiguration;
const devkit_1 = require("@nx/devkit");
const versions_1 = require("../../utils/versions");
const has_gradle_plugin_1 = require("../../utils/has-gradle-plugin");
const path_1 = require("path");
async function initGenerator(tree, options) {
const tasks = [];
if (!options.skipPackageJson && tree.exists('package.json')) {
tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
'@nx/gradle': versions_1.nxVersion,
}, undefined, options.keepExistingVersions));
}
await addBuildGradleFileNextToSettingsGradle(tree);
addPlugin(tree);
updateNxJsonConfiguration(tree);
if (!options.skipFormat) {
await (0, devkit_1.formatFiles)(tree);
}
return (0, devkit_1.runTasksInSerial)(...tasks);
}
function addPlugin(tree) {
const nxJson = (0, devkit_1.readNxJson)(tree);
if (!(0, has_gradle_plugin_1.hasGradlePlugin)(tree)) {
nxJson.plugins ??= [];
nxJson.plugins.push({
plugin: '@nx/gradle',
options: {
testTargetName: 'test',
classesTargetName: 'classes',
buildTargetName: 'build',
includeSubprojectsTasks: false,
},
});
(0, devkit_1.updateNxJson)(tree, nxJson);
}
}
/**
* This function creates and populate build.gradle file next to the settings.gradle file.
*/
async function addBuildGradleFileNextToSettingsGradle(tree) {
const settingsGradleFiles = await (0, devkit_1.globAsync)(tree, [
'**/settings.gradle?(.kts)',
]);
settingsGradleFiles.forEach((settingsGradleFile) => {
addProjectReportToBuildGradle(settingsGradleFile, tree);
});
}
/**
* - creates a build.gradle file next to the settings.gradle file if it does not exist.
* - adds the project-report plugin to the build.gradle file if it does not exist.
* - adds a task to generate project reports for all subprojects and included builds.
*/
function addProjectReportToBuildGradle(settingsGradleFile, tree) {
const filename = (0, path_1.basename)(settingsGradleFile);
let gradleFilePath = 'build.gradle';
if (filename.endsWith('.kts')) {
gradleFilePath = 'build.gradle.kts';
}
gradleFilePath = (0, path_1.join)((0, path_1.dirname)(settingsGradleFile), gradleFilePath);
let buildGradleContent = '';
if (!tree.exists(gradleFilePath)) {
tree.write(gradleFilePath, buildGradleContent); // create a build.gradle file near settings.gradle file if it does not exist
}
else {
buildGradleContent = tree.read(gradleFilePath).toString();
}
if (buildGradleContent.includes('allprojects')) {
if (!buildGradleContent.includes('"project-report"')) {
devkit_1.logger.warn(`Please add the project-report plugin to your ${gradleFilePath}:
allprojects {
apply {
plugin("project-report")
}
}`);
}
}
else {
buildGradleContent += `\n\rallprojects {
apply {
plugin("project-report")
}
}`;
}
if (!buildGradleContent.includes(`tasks.register("projectReportAll")`)) {
if (gradleFilePath.endsWith('.kts')) {
buildGradleContent += `\n\rtasks.register("projectReportAll") {
// All project reports of subprojects
allprojects.forEach {
dependsOn(it.tasks.get("projectReport"))
}
// All projectReportAll of included builds
gradle.includedBuilds.forEach {
dependsOn(it.task(":projectReportAll"))
}
}`;
}
else {
buildGradleContent += `\n\rtasks.register("projectReportAll") {
// All project reports of subprojects
allprojects.forEach {
dependsOn(it.tasks.getAt("projectReport"))
}
// All projectReportAll of included builds
gradle.includedBuilds.forEach {
dependsOn(it.task(":projectReportAll"))
}
}`;
}
}
if (buildGradleContent) {
tree.write(gradleFilePath, buildGradleContent);
}
}
function updateNxJsonConfiguration(tree) {
const nxJson = (0, devkit_1.readNxJson)(tree);
if (!nxJson.namedInputs) {
nxJson.namedInputs = {};
}
const defaultFilesSet = nxJson.namedInputs.default ?? [];
nxJson.namedInputs.default = Array.from(new Set([...defaultFilesSet, '{projectRoot}/**/*']));
const productionFileSet = nxJson.namedInputs.production ?? [];
nxJson.namedInputs.production = Array.from(new Set([...productionFileSet, 'default', '!{projectRoot}/src/test/**/*']));
(0, devkit_1.updateNxJson)(tree, nxJson);
}
exports.default = initGenerator;