- [x] change init to create `createNodes` instead - [x] unit tests - [x] test-ci - [x] test on windows - [x] help metadata - [x] external nodes TODO: - add publish executor? - publish to maven central? <!-- 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 --> currently, it uses [project report plugin](https://docs.gradle.org/current/userguide/project_report_plugin.html). - pro: no need to maintain this plugin - con: this plugin gives limited information ## Expected Behavior <!-- This is the behavior we should expect with the changes in this PR --> change the project report plugin to @nxn/gradle/plugin-v1 now the @nx/gradle plugin will use project graph plugin (dev.nx.gradle.project-graph) created in this pr. this plugin will create json file that is exactly what nx project grpah expected. ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #
103 lines
2.9 KiB
TypeScript
103 lines
2.9 KiB
TypeScript
import { CreateNodesContext, readJsonFile } from '@nx/devkit';
|
|
import { TempFs } from '@nx/devkit/internal-testing-utils';
|
|
import { createNodesV2 } from './plugin';
|
|
import { type ProjectGraphReport } from './src/plugin/utils/get-project-graph-from-gradle-plugin';
|
|
import { join } from 'path';
|
|
|
|
let gradleReport: ProjectGraphReport;
|
|
jest.mock('./src/plugin/utils/get-project-graph-from-gradle-plugin', () => {
|
|
return {
|
|
GRADLE_BUILD_FILES: new Set(['build.gradle', 'build.gradle.kts']),
|
|
populateProjectGraph: jest.fn().mockImplementation(() => void 0),
|
|
getCurrentProjectGraphReport: jest
|
|
.fn()
|
|
.mockImplementation(() => gradleReport),
|
|
};
|
|
});
|
|
|
|
describe('@nx/gradle/plugin', () => {
|
|
let createNodesFunction = createNodesV2[1];
|
|
let context: CreateNodesContext;
|
|
let tempFs: TempFs;
|
|
|
|
beforeEach(async () => {
|
|
tempFs = new TempFs('gradle-plugin');
|
|
gradleReport = readJsonFile(
|
|
join(__dirname, 'src/plugin/utils/__mocks__/gradle_tutorial.json')
|
|
);
|
|
context = {
|
|
nxJsonConfiguration: {
|
|
namedInputs: {
|
|
default: ['{projectRoot}/**/*'],
|
|
production: ['!{projectRoot}/**/*.spec.ts'],
|
|
},
|
|
},
|
|
workspaceRoot: tempFs.tempDir,
|
|
configFiles: [],
|
|
};
|
|
tempFs.createFileSync('package.json', JSON.stringify({ name: 'repo' }));
|
|
tempFs.createFileSync(
|
|
'my-app/project.json',
|
|
JSON.stringify({ name: 'my-app' })
|
|
);
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.resetModules();
|
|
tempFs.cleanup();
|
|
tempFs = null;
|
|
});
|
|
|
|
it('should create nodes', async () => {
|
|
tempFs.createFileSync('gradlew', '');
|
|
|
|
const nodes = await createNodesFunction(
|
|
['gradlew', 'proj/build.gradle'],
|
|
undefined,
|
|
context
|
|
);
|
|
|
|
expect(nodes).toMatchInlineSnapshot(`
|
|
[
|
|
[
|
|
"proj/build.gradle",
|
|
{
|
|
"externalNodes": {},
|
|
"projects": {
|
|
"proj": {
|
|
"metadata": {
|
|
"targetGroups": {
|
|
"help": [
|
|
"buildEnvironment",
|
|
],
|
|
},
|
|
"technologies": [
|
|
"gradle",
|
|
],
|
|
},
|
|
"name": "gradle-tutorial",
|
|
"root": "proj",
|
|
"targets": {
|
|
"buildEnvironment": {
|
|
"cache": true,
|
|
"command": "./gradlew :buildEnvironment",
|
|
"metadata": {
|
|
"description": "Displays all buildscript dependencies declared in root project 'gradle-tutorial'.",
|
|
"technologies": [
|
|
"gradle",
|
|
],
|
|
},
|
|
"options": {
|
|
"cwd": "proj",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
]
|
|
`);
|
|
});
|
|
});
|