Skip to content

Commit 74aa8c7

Browse files
authored
add basic gradle support (#33)
1 parent 6a4e09a commit 74aa8c7

File tree

4 files changed

+118
-1
lines changed

4 files changed

+118
-1
lines changed

gradle.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import g2js from 'gradle-to-js/lib/parser.js';
2+
import { getDefaultSpringBootVersions, Package } from './shared.js';
3+
4+
export const getJSFromFile = async (filename) => {
5+
try {
6+
return g2js.parseFile(filename);
7+
} catch (err) {
8+
return [];
9+
}
10+
};
11+
12+
// export const getGradleProperties = async (parsedGradle) => {
13+
// const properties = parsedGradle.project?.properties;
14+
// if (properties) {
15+
// return Object.keys(properties);
16+
// }
17+
// return [];
18+
// };
19+
//
20+
// const getSpringBootProperties = async (filename) => {
21+
// await getSpringDefaultProperties(filename);
22+
// return getJsonFromFile(`${cachePath}/properties_${filename}.json`);
23+
// };
24+
25+
export const getGradleDependenciesWithVersions = async (parsedGradle) => {
26+
if (Array.isArray(parsedGradle.dependencies)) {
27+
return parsedGradle.dependencies.filter(dep => dep.version);
28+
}
29+
return [];
30+
};
31+
32+
export const getGradleSpringBootVersion = async (parsedGradle) => {
33+
const springBootPlugin = parsedGradle?.plugins?.filter(plugin => plugin.id === 'org.springframework.boot');
34+
if (Array.isArray(springBootPlugin) && springBootPlugin.length) {
35+
return springBootPlugin[0].version;
36+
}
37+
console.log('No Spring Boot version found.');
38+
return '';
39+
};
40+
41+
export const retrieveSimilarGradlePackages = async (parsedGradle, springBootVersion) => {
42+
const gradleDependenciesWithVersions = await getGradleDependenciesWithVersions(parsedGradle);
43+
if (springBootVersion) {
44+
const defaultVersions = await getDefaultSpringBootVersions(springBootVersion);
45+
46+
if (defaultVersions.length) {
47+
const mismatchedPackages = [];
48+
gradleDependenciesWithVersions.forEach(gradleDependency => defaultVersions.forEach(bootPackage => {
49+
if (gradleDependency.group === bootPackage.group && gradleDependency.name === bootPackage.name) {
50+
const existingMatches = mismatchedPackages.find(mismatchedPackage => mismatchedPackage.group === gradleDependency.group && mismatchedPackage.name === gradleDependency.name);
51+
if (!existingMatches) {
52+
mismatchedPackages.push(new Package(gradleDependency.group, gradleDependency.name, gradleDependency.version, bootPackage.version));
53+
}
54+
}
55+
}));
56+
57+
console.log('Mismatched Gradle Package Count -', mismatchedPackages.length);
58+
if (mismatchedPackages.length) {
59+
console.log('Mismatched Gradle Packages -', mismatchedPackages);
60+
}
61+
} else {
62+
console.log('Spring Boot default versions URL no longer exists.');
63+
}
64+
}
65+
};
66+
67+
// export const retrieveSimilarGradleProperties = async (parsedGradle, springBootVersion) => {
68+
// const pomProperties = await getGradleProperties(parsedGradle);
69+
// if (springBootVersion) {
70+
// const defaultProperties = await getSpringBootProperties(springBootVersion);
71+
//
72+
// if (defaultProperties.length) {
73+
// const declaredProperties = [];
74+
// pomProperties.forEach(pomProperty => defaultProperties.forEach(defaultProperty => {
75+
// if (pomProperty === defaultProperty.property) {
76+
// declaredProperties.push(pomProperty);
77+
// }
78+
// }));
79+
//
80+
// console.log('Declared Gradle Properties Count -', declaredProperties.length);
81+
// if (declaredProperties.length) {
82+
// console.log('Declared Gradle Properties -', declaredProperties);
83+
// }
84+
// } else {
85+
// console.log('Spring Boot default versions URL no longer exists.');
86+
// }
87+
// }
88+
// };
89+
//

index.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
retrieveSimilarPomPackages,
77
retrieveSimilarPomProperties,
88
} from './pom.js';
9+
import { getGradleSpringBootVersion, getJSFromFile, retrieveSimilarGradlePackages } from './gradle.js';
910

1011
export const checkDependencies = async () => {
1112
const start = Date.now();
@@ -17,13 +18,22 @@ export const checkDependencies = async () => {
1718
await retrieveSimilarSbomPackages(filename);
1819
} else if (fileExtension === '.xml') {
1920
console.log('Processing xml file');
20-
const parsedPom = await getXMLFromFile(process.argv[2]);
21+
const parsedPom = await getXMLFromFile(filename);
2122
const springBootVersion = await getPomSpringBootVersion(parsedPom);
2223
if (springBootVersion) {
2324
console.log('Detected Spring Boot Version -', springBootVersion);
2425
await retrieveSimilarPomPackages(parsedPom, springBootVersion);
2526
await retrieveSimilarPomProperties(parsedPom, springBootVersion);
2627
}
28+
} else if (fileExtension === '.gradle') {
29+
console.log('Processing gradle file');
30+
const parsedGradle = await getJSFromFile(filename);
31+
const springBootVersion = await getGradleSpringBootVersion(parsedGradle);
32+
if (springBootVersion) {
33+
console.log('Detected Spring Boot Version -', springBootVersion);
34+
await retrieveSimilarGradlePackages(parsedGradle, springBootVersion);
35+
// await retrieveSimilarPomProperties(parsedPom, springBootVersion);
36+
}
2737
} else {
2838
console.log('Unknown extension, unable to process file.');
2939
}

package-lock.json

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
},
2727
"dependencies": {
2828
"fast-xml-parser": "^4.3.6",
29+
"gradle-to-js": "^2.0.1",
2930
"node-html-parser": "6.1.13"
3031
},
3132
"devDependencies": {

0 commit comments

Comments
 (0)