-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(gradle): add gradle init generator
- Loading branch information
Showing
14 changed files
with
392 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
{ | ||
"name": "Nx Gradle", | ||
"version": "0.1", | ||
"generators": { | ||
"init": { | ||
"factory": "./src/generators/init/init#initGeneratorInternal", | ||
"schema": "./src/generators/init/schema.json", | ||
"description": "Initializes a Gradle project in the current workspace" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
export * from './plugin'; | ||
export { initGenerator } from './src/generators/init/init'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
import { readNxJson, Tree, updateNxJson } from '@nx/devkit'; | ||
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; | ||
|
||
import { initGenerator } from './init'; | ||
|
||
describe('@nx/gradle:init', () => { | ||
let tree: Tree; | ||
|
||
beforeEach(() => { | ||
tree = createTreeWithEmptyWorkspace(); | ||
tree.write('settings.gradle', ''); | ||
}); | ||
|
||
it('should add the plugin', async () => { | ||
await initGenerator(tree, { | ||
skipFormat: true, | ||
addPlugin: true, | ||
skipPackageJson: false, | ||
}); | ||
const nxJson = readNxJson(tree); | ||
expect(nxJson.plugins).toMatchInlineSnapshot(` | ||
[ | ||
{ | ||
"options": { | ||
"buildTargetName": "build", | ||
"classesTargetName": "classes", | ||
"testTargetName": "test", | ||
}, | ||
"plugin": "@nx/gradle/plugin", | ||
}, | ||
] | ||
`); | ||
}); | ||
|
||
it('should not overwrite existing plugins', async () => { | ||
updateNxJson(tree, { | ||
plugins: ['foo'], | ||
}); | ||
await initGenerator(tree, { | ||
skipFormat: true, | ||
addPlugin: true, | ||
skipPackageJson: false, | ||
}); | ||
const nxJson = readNxJson(tree); | ||
expect(nxJson.plugins).toMatchInlineSnapshot(` | ||
[ | ||
"foo", | ||
{ | ||
"options": { | ||
"buildTargetName": "build", | ||
"classesTargetName": "classes", | ||
"testTargetName": "test", | ||
}, | ||
"plugin": "@nx/gradle/plugin", | ||
}, | ||
] | ||
`); | ||
}); | ||
|
||
it('should not add plugin if already in array', async () => { | ||
updateNxJson(tree, { | ||
plugins: ['@nx/gradle/plugin'], | ||
}); | ||
await initGenerator(tree, { | ||
skipFormat: true, | ||
addPlugin: true, | ||
skipPackageJson: false, | ||
}); | ||
const nxJson = readNxJson(tree); | ||
expect(nxJson.plugins).toMatchInlineSnapshot(` | ||
[ | ||
"@nx/gradle/plugin", | ||
] | ||
`); | ||
}); | ||
|
||
it('should not add plugin if NX_ADD_PLUGINS variable is set', async () => { | ||
await initGenerator(tree, { | ||
skipFormat: true, | ||
addPlugin: false, | ||
skipPackageJson: false, | ||
}); | ||
const nxJson = readNxJson(tree); | ||
expect(nxJson.plugins).toMatchInlineSnapshot(`undefined`); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
import { | ||
addDependenciesToPackageJson, | ||
formatFiles, | ||
GeneratorCallback, | ||
logger, | ||
readNxJson, | ||
runTasksInSerial, | ||
Tree, | ||
updateNxJson, | ||
} from '@nx/devkit'; | ||
import { updatePackageScripts } from '@nx/devkit/src/utils/update-package-scripts'; | ||
import { createNodes } from '../../plugin/nodes'; | ||
import { nxVersion } from '../../utils/versions'; | ||
import { InitGeneratorSchema } from './schema'; | ||
import { hasGradlePlugin } from '../../utils/has-gradle-plugin'; | ||
|
||
export function initGenerator(tree: Tree, options: InitGeneratorSchema) { | ||
return initGeneratorInternal(tree, { addPlugin: false, ...options }); | ||
} | ||
|
||
export async function initGeneratorInternal( | ||
tree: Tree, | ||
options: InitGeneratorSchema | ||
) { | ||
const tasks: GeneratorCallback[] = []; | ||
|
||
const nxJson = readNxJson(tree); | ||
const addPluginDefault = | ||
process.env.NX_ADD_PLUGINS !== 'false' && | ||
nxJson.useInferencePlugins !== false; | ||
|
||
options.addPlugin ??= addPluginDefault; | ||
|
||
if (!options.skipPackageJson && tree.exists('package.json')) { | ||
tasks.push( | ||
addDependenciesToPackageJson( | ||
tree, | ||
{}, | ||
{ | ||
'@nx/gradle': nxVersion, | ||
}, | ||
undefined, | ||
options.keepExistingVersions | ||
) | ||
); | ||
} | ||
|
||
if (options.addPlugin) { | ||
addPlugin(tree); | ||
addProjectReportToBuildGradle(tree); | ||
} | ||
|
||
if (options.updatePackageScripts) { | ||
await updatePackageScripts(tree, createNodes); | ||
} | ||
|
||
if (!options.skipFormat) { | ||
await formatFiles(tree); | ||
} | ||
|
||
return runTasksInSerial(...tasks); | ||
} | ||
|
||
function addPlugin(tree: Tree) { | ||
const nxJson = readNxJson(tree); | ||
|
||
if (!hasGradlePlugin(tree)) { | ||
nxJson.plugins ??= []; | ||
nxJson.plugins.push({ | ||
plugin: '@nx/gradle/plugin', | ||
options: { | ||
testTargetName: 'test', | ||
classesTargetName: 'classes', | ||
buildTargetName: 'build', | ||
}, | ||
}); | ||
updateNxJson(tree, nxJson); | ||
} | ||
} | ||
|
||
/** | ||
* This function adds the project-report plugin to the build.gradle or build.gradle.kts file | ||
*/ | ||
function addProjectReportToBuildGradle(tree: Tree) { | ||
let buildGradleFile: string; | ||
if (tree.exists('settings.gradle.kts')) { | ||
buildGradleFile = 'build.gradle.kts'; | ||
} else if (tree.exists('settings.gradle')) { | ||
buildGradleFile = 'build.gradle'; | ||
} else { | ||
throw new Error( | ||
'Could not find settings.gradle or settings.gradle.kts file in your gradle workspace.' | ||
); | ||
} | ||
let buildGradleContent = ''; | ||
if (tree.exists(buildGradleFile)) { | ||
buildGradleContent = tree.read(buildGradleFile).toString(); | ||
} | ||
if (buildGradleContent.includes('allprojects')) { | ||
if (!buildGradleContent.includes('"project-report')) { | ||
logger.warn(`Please add the project-report plugin to your ${buildGradleFile}: | ||
allprojects { | ||
apply { | ||
plugin("project-report") | ||
} | ||
}`); | ||
} | ||
} else { | ||
buildGradleContent += `\n\rallprojects { | ||
apply { | ||
plugin("project-report") | ||
} | ||
}`; | ||
tree.write(buildGradleFile, buildGradleContent); | ||
} | ||
} | ||
|
||
export default initGenerator; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
export interface InitGeneratorSchema { | ||
skipFormat?: boolean; | ||
skipPackageJson?: boolean; | ||
keepExistingVersions?: boolean; | ||
updatePackageScripts?: boolean; | ||
addPlugin?: boolean; | ||
} |
Oops, something went wrong.