UNPKG

@nx/gradle

Version:

The Nx Plugin for Gradle allows Gradle tasks to be run through Nx

132 lines (129 loc) 4.86 kB
"use strict"; 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;