@cyclonedx/cdxgen 11.2.4 → 11.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cdxgen.js +5 -0
- package/data/helpers/init.gradle +5 -0
- package/lib/cli/index.js +117 -77
- package/lib/evinser/evinser.js +3 -1
- package/lib/helpers/utils.js +106 -50
- package/lib/helpers/validator.js +1 -1
- package/lib/managers/binary.js +1 -0
- package/lib/server/server.js +44 -4
- package/package.json +7 -3
- package/types/lib/cli/index.d.ts.map +1 -1
- package/types/lib/helpers/utils.d.ts +5 -3
- package/types/lib/helpers/utils.d.ts.map +1 -1
- package/types/lib/managers/binary.d.ts.map +1 -1
- package/types/lib/server/server.d.ts.map +1 -1
- package/lib/helpers/package_specific/gradleutils.js +0 -48
- package/lib/helpers/package_specific/gradleutils.test.js +0 -65
package/bin/cdxgen.js
CHANGED
|
@@ -214,6 +214,10 @@ const args = yargs(hideBin(process.argv))
|
|
|
214
214
|
default: "semantics.slices.json",
|
|
215
215
|
hidden: true,
|
|
216
216
|
})
|
|
217
|
+
.option("openapi-spec-file", {
|
|
218
|
+
description: "Path for the openapi specification file (SaaSBOM).",
|
|
219
|
+
hidden: true,
|
|
220
|
+
})
|
|
217
221
|
.option("spec-version", {
|
|
218
222
|
description: "CycloneDX Specification version to use. Defaults to 1.6",
|
|
219
223
|
default: 1.6,
|
|
@@ -989,6 +993,7 @@ const checkPermissions = (filePath, options) => {
|
|
|
989
993
|
dataFlowSlicesFile: options.dataFlowSlicesFile,
|
|
990
994
|
reachablesSlicesFile: options.reachablesSlicesFile,
|
|
991
995
|
semanticsSlicesFile: options.semanticsSlicesFile,
|
|
996
|
+
openapiSpecFile: options.openapiSpecFile,
|
|
992
997
|
includeCrypto: options.includeCrypto,
|
|
993
998
|
specVersion: options.specVersion,
|
|
994
999
|
profile: options.profile,
|
package/lib/cli/index.js
CHANGED
|
@@ -33,8 +33,6 @@ import {
|
|
|
33
33
|
listFiles,
|
|
34
34
|
} from "../helpers/envcontext.js";
|
|
35
35
|
import { thoughtLog } from "../helpers/logger.js";
|
|
36
|
-
|
|
37
|
-
import { analyzeBuildSettings } from "../helpers/package_specific/gradleutils.js";
|
|
38
36
|
import {
|
|
39
37
|
CARGO_CMD,
|
|
40
38
|
CLJ_CMD,
|
|
@@ -226,6 +224,14 @@ if (process.env.GRADLE_USER_HOME) {
|
|
|
226
224
|
);
|
|
227
225
|
}
|
|
228
226
|
|
|
227
|
+
// Construct path to gradle init script
|
|
228
|
+
const GRADLE_INIT_SCRIPT = resolve(
|
|
229
|
+
dirNameStr,
|
|
230
|
+
"data",
|
|
231
|
+
"helpers",
|
|
232
|
+
"init.gradle",
|
|
233
|
+
);
|
|
234
|
+
|
|
229
235
|
// Construct sbt cache directory
|
|
230
236
|
const SBT_CACHE_DIR =
|
|
231
237
|
process.env.SBT_CACHE_DIR || join(homedir(), ".ivy2", "cache");
|
|
@@ -1959,59 +1965,50 @@ export async function createJavaBom(path, options) {
|
|
|
1959
1965
|
options,
|
|
1960
1966
|
)
|
|
1961
1967
|
) {
|
|
1962
|
-
let rootProjects = [null];
|
|
1963
1968
|
let allProjectsStr = [];
|
|
1964
|
-
let rootGradleModule = {};
|
|
1965
|
-
let includedProjectsFound = false;
|
|
1966
1969
|
if (process.env.GRADLE_INCLUDED_BUILDS) {
|
|
1967
1970
|
// Automatically add the colon prefix
|
|
1968
|
-
|
|
1969
|
-
|
|
1971
|
+
allProjectsStr = process.env.GRADLE_INCLUDED_BUILDS.split(",").map((b) =>
|
|
1972
|
+
!b.startsWith(":") ? `:${b}` : b,
|
|
1970
1973
|
);
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
]) {
|
|
1982
|
-
if (
|
|
1983
|
-
|
|
1974
|
+
}
|
|
1975
|
+
let parallelPropTaskOut = executeParallelGradleProperties(
|
|
1976
|
+
gradleRootPath,
|
|
1977
|
+
[null],
|
|
1978
|
+
process.env.GRADLE_INCLUDED_BUILDS
|
|
1979
|
+
? []
|
|
1980
|
+
: ["--init-script", GRADLE_INIT_SCRIPT],
|
|
1981
|
+
);
|
|
1982
|
+
if (!process.env.GRADLE_INCLUDED_BUILDS) {
|
|
1983
|
+
const outputLines = parallelPropTaskOut.split("\n");
|
|
1984
|
+
for (const [i, line] of outputLines.entries()) {
|
|
1985
|
+
if (line.startsWith("Root project '")) {
|
|
1986
|
+
break;
|
|
1984
1987
|
}
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
rootProjects.push(aib);
|
|
1990
|
-
includedProjectsFound = true;
|
|
1991
|
-
}
|
|
1988
|
+
if (line.startsWith("<CDXGEN:includedBuild>")) {
|
|
1989
|
+
const includedBuild = line.split(">");
|
|
1990
|
+
if (!allProjectsStr.includes(includedBuild[1].trim())) {
|
|
1991
|
+
allProjectsStr.push(includedBuild[1].trim());
|
|
1992
1992
|
}
|
|
1993
|
-
break;
|
|
1994
1993
|
}
|
|
1995
1994
|
}
|
|
1996
1995
|
}
|
|
1997
|
-
if (
|
|
1996
|
+
if (allProjectsStr.length > 0) {
|
|
1998
1997
|
thoughtLog(
|
|
1999
|
-
`Wait, this gradle project uses composite builds. I must carefully process these ${
|
|
1998
|
+
`Wait, this gradle project uses composite builds. I must carefully process these ${allProjectsStr.length} projects, in addition to the root.`,
|
|
2000
1999
|
);
|
|
2001
2000
|
if (DEBUG_MODE) {
|
|
2002
|
-
console.log(
|
|
2003
|
-
`Additional root projects: ${rootProjects.join(" ").trim()}.`,
|
|
2004
|
-
);
|
|
2001
|
+
console.log(`Composite builds: ${allProjectsStr.join(" ").trim()}.`);
|
|
2005
2002
|
}
|
|
2003
|
+
parallelPropTaskOut = parallelPropTaskOut.concat(
|
|
2004
|
+
"\n",
|
|
2005
|
+
executeParallelGradleProperties(gradleRootPath, allProjectsStr),
|
|
2006
|
+
);
|
|
2007
|
+
allProjectsStr = [];
|
|
2006
2008
|
}
|
|
2007
|
-
const parallelPropTaskOut = executeParallelGradleProperties(
|
|
2008
|
-
gradleRootPath,
|
|
2009
|
-
rootProjects,
|
|
2010
|
-
);
|
|
2011
2009
|
const splitPropTaskOut = splitOutputByGradleProjects(parallelPropTaskOut, [
|
|
2012
2010
|
"properties",
|
|
2013
2011
|
]);
|
|
2014
|
-
|
|
2015
2012
|
for (const [key, propTaskOut] of splitPropTaskOut.entries()) {
|
|
2016
2013
|
const retMap = parseGradleProperties(propTaskOut);
|
|
2017
2014
|
const rootProject = retMap.rootProject;
|
|
@@ -2020,18 +2017,11 @@ export async function createJavaBom(path, options) {
|
|
|
2020
2017
|
rootProject,
|
|
2021
2018
|
retMap.metadata,
|
|
2022
2019
|
);
|
|
2020
|
+
if (!key.startsWith(":")) {
|
|
2021
|
+
parentComponent = rootComponent;
|
|
2022
|
+
}
|
|
2023
2023
|
gradleModules.set(key, rootComponent);
|
|
2024
|
-
if (!
|
|
2025
|
-
if (rootGradleModule.name) {
|
|
2026
|
-
if (DEBUG_MODE) {
|
|
2027
|
-
console.log(
|
|
2028
|
-
`Received new root component: ${rootComponent.name} with key ${key}. Please verify the value used for included builds. Using the name ${rootGradleModule.name}.`,
|
|
2029
|
-
);
|
|
2030
|
-
}
|
|
2031
|
-
} else {
|
|
2032
|
-
rootGradleModule = rootComponent;
|
|
2033
|
-
}
|
|
2034
|
-
} else if (!allProjectsAddedPurls.includes(rootComponent["purl"])) {
|
|
2024
|
+
if (!allProjectsAddedPurls.includes(rootComponent["purl"])) {
|
|
2035
2025
|
allProjects.push(rootComponent);
|
|
2036
2026
|
rootDependsOn.add(rootComponent["bom-ref"]);
|
|
2037
2027
|
allProjectsAddedPurls.push(rootComponent["purl"]);
|
|
@@ -2039,7 +2029,6 @@ export async function createJavaBom(path, options) {
|
|
|
2039
2029
|
allProjectsStr = allProjectsStr.concat(retMap.projects);
|
|
2040
2030
|
}
|
|
2041
2031
|
}
|
|
2042
|
-
parentComponent = rootGradleModule;
|
|
2043
2032
|
// Get the sub-project properties and set the root dependencies
|
|
2044
2033
|
if (allProjectsStr?.length) {
|
|
2045
2034
|
const modulesToSkip = process.env.GRADLE_SKIP_MODULES
|
|
@@ -2129,32 +2118,36 @@ export async function createJavaBom(path, options) {
|
|
|
2129
2118
|
process.env.GRADLE_ARGS_DEPENDENCIES
|
|
2130
2119
|
? process.env.GRADLE_ARGS_DEPENDENCIES.split(" ")
|
|
2131
2120
|
: [],
|
|
2121
|
+
gradleCmd.length,
|
|
2132
2122
|
);
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2123
|
+
const allOutputs = [];
|
|
2124
|
+
for (const gradleArg of gradleArguments) {
|
|
2125
|
+
if (DEBUG_MODE) {
|
|
2126
|
+
console.log(
|
|
2127
|
+
`Executing ${gradleCmd} with arguments ${gradleArg.join(" ").substring(0, 150)}... in ${gradleRootPath}`,
|
|
2128
|
+
);
|
|
2129
|
+
}
|
|
2130
|
+
thoughtLog(
|
|
2131
|
+
`Let's invoke '${basename(gradleCmd)}' with the arguments '${gradleArg.join(" ").substring(0, 100)} ...'.`,
|
|
2140
2132
|
);
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2133
|
+
const sresult = spawnSync(gradleCmd, gradleArg, {
|
|
2134
|
+
cwd: gradleRootPath,
|
|
2135
|
+
encoding: "utf-8",
|
|
2136
|
+
shell: isWin,
|
|
2137
|
+
timeout: TIMEOUT_MS,
|
|
2138
|
+
maxBuffer: MAX_BUFFER,
|
|
2139
|
+
});
|
|
2140
|
+
if (sresult.status !== 0 || sresult.error) {
|
|
2141
|
+
if (options.failOnError || DEBUG_MODE) {
|
|
2142
|
+
console.error(sresult.stdout, sresult.stderr);
|
|
2143
|
+
}
|
|
2144
|
+
options.failOnError && process.exit(1);
|
|
2145
|
+
}
|
|
2146
|
+
if (sresult.stdout !== null) {
|
|
2147
|
+
allOutputs.push(sresult.stdout);
|
|
2154
2148
|
}
|
|
2155
|
-
options.failOnError && process.exit(1);
|
|
2156
2149
|
}
|
|
2157
|
-
const sstdout =
|
|
2150
|
+
const sstdout = allOutputs.join("\n");
|
|
2158
2151
|
if (sstdout) {
|
|
2159
2152
|
const cmdOutput = Buffer.from(sstdout).toString();
|
|
2160
2153
|
const perProjectOutput = splitOutputByGradleProjects(cmdOutput, [
|
|
@@ -2213,6 +2206,29 @@ export async function createJavaBom(path, options) {
|
|
|
2213
2206
|
}
|
|
2214
2207
|
options.failOnError && process.exit(1);
|
|
2215
2208
|
}
|
|
2209
|
+
if (
|
|
2210
|
+
(!process.env.GRADLE_STOP_DAEMON &&
|
|
2211
|
+
(!process.env.GRADLE_USE_DAEMON ||
|
|
2212
|
+
["true", "1"].includes(process.env.GRADLE_USE_DAEMON))) ||
|
|
2213
|
+
["true", "1"].includes(process.env.GRADLE_STOP_DAEMON)
|
|
2214
|
+
) {
|
|
2215
|
+
if (DEBUG_MODE) {
|
|
2216
|
+
console.log("Stopping gradle daemon...");
|
|
2217
|
+
}
|
|
2218
|
+
const sresult = spawnSync(gradleCmd, ["--stop"], {
|
|
2219
|
+
cwd: gradleRootPath,
|
|
2220
|
+
encoding: "utf-8",
|
|
2221
|
+
shell: isWin,
|
|
2222
|
+
timeout: TIMEOUT_MS,
|
|
2223
|
+
maxBuffer: MAX_BUFFER,
|
|
2224
|
+
});
|
|
2225
|
+
if (sresult.status !== 0 || sresult.error) {
|
|
2226
|
+
if (options.failOnError || DEBUG_MODE) {
|
|
2227
|
+
console.error(sresult.stdout, sresult.stderr);
|
|
2228
|
+
}
|
|
2229
|
+
options.failOnError && process.exit(1);
|
|
2230
|
+
}
|
|
2231
|
+
}
|
|
2216
2232
|
// Should we attempt to resolve class names
|
|
2217
2233
|
if (options.resolveClass || options.deep) {
|
|
2218
2234
|
const tmpjarNSMapping = await collectJarNS(GRADLE_CACHE_DIR);
|
|
@@ -2581,14 +2597,16 @@ export async function createJavaBom(path, options) {
|
|
|
2581
2597
|
);
|
|
2582
2598
|
const millCmd = getMillCommand(millRootPath);
|
|
2583
2599
|
const millCommonArgs = [
|
|
2584
|
-
"--no-server",
|
|
2585
|
-
"--silent",
|
|
2586
|
-
"--disable-prompt",
|
|
2587
|
-
"--disable-callgraph",
|
|
2588
|
-
"-k",
|
|
2589
2600
|
"--color",
|
|
2590
2601
|
"false",
|
|
2602
|
+
"--disable-callgraph",
|
|
2603
|
+
"--disable-prompt",
|
|
2604
|
+
"--keep-going",
|
|
2605
|
+
"--silent",
|
|
2591
2606
|
];
|
|
2607
|
+
if (!["true", "1"].includes(process.env.MILL_USE_SERVER)) {
|
|
2608
|
+
millCommonArgs.unshift("--no-server");
|
|
2609
|
+
}
|
|
2592
2610
|
const millArgs = [...millCommonArgs, "__.ivyDepsTree"];
|
|
2593
2611
|
if (DEBUG_MODE) {
|
|
2594
2612
|
console.log("Executing", millCmd, millArgs.join(" "), "in", millRootPath);
|
|
@@ -2674,6 +2692,28 @@ export async function createJavaBom(path, options) {
|
|
|
2674
2692
|
parentComponent,
|
|
2675
2693
|
);
|
|
2676
2694
|
}
|
|
2695
|
+
if (
|
|
2696
|
+
(!process.env.MILL_SHUTDOWN_SERVER &&
|
|
2697
|
+
["true", "1"].includes(process.env.MILL_USE_SERVER)) ||
|
|
2698
|
+
["true", "1"].includes(process.env.MILL_SHUTDOWN_SERVER)
|
|
2699
|
+
) {
|
|
2700
|
+
if (DEBUG_MODE) {
|
|
2701
|
+
console.log("Shutting down mill server...");
|
|
2702
|
+
}
|
|
2703
|
+
const sresult = spawnSync(millCmd, ["shutdown"], {
|
|
2704
|
+
cwd: millRootPath,
|
|
2705
|
+
encoding: "utf-8",
|
|
2706
|
+
shell: isWin,
|
|
2707
|
+
timeout: TIMEOUT_MS,
|
|
2708
|
+
maxBuffer: MAX_BUFFER,
|
|
2709
|
+
});
|
|
2710
|
+
if (sresult.status !== 0 || sresult.error) {
|
|
2711
|
+
if (options.failOnError || DEBUG_MODE) {
|
|
2712
|
+
console.error(sresult.stdout, sresult.stderr);
|
|
2713
|
+
}
|
|
2714
|
+
options.failOnError && process.exit(1);
|
|
2715
|
+
}
|
|
2716
|
+
}
|
|
2677
2717
|
}
|
|
2678
2718
|
|
|
2679
2719
|
pkgList = trimComponents(pkgList);
|
package/lib/evinser/evinser.js
CHANGED
|
@@ -251,7 +251,9 @@ export async function createSlice(
|
|
|
251
251
|
? path.basename(options.output)
|
|
252
252
|
: path.dirname(options.output);
|
|
253
253
|
}
|
|
254
|
-
const slicesFile =
|
|
254
|
+
const slicesFile =
|
|
255
|
+
options[`${sliceType}SlicesFile`] ||
|
|
256
|
+
join(sliceOutputDir, `${sliceType}.slices.json`);
|
|
255
257
|
const openapiSpecFile = basename(
|
|
256
258
|
options.openapiSpecFile ||
|
|
257
259
|
process.env?.ATOM_TOOLS_OPENAPI_FILENAME ||
|
package/lib/helpers/utils.js
CHANGED
|
@@ -3998,74 +3998,88 @@ export function parseGradleProperties(rawOutput, gradleModuleName = null) {
|
|
|
3998
3998
|
*
|
|
3999
3999
|
* @param {string} dir Directory to execute the command
|
|
4000
4000
|
* @param {array} allProjectsStr List of all sub-projects (including the preceding `:`)
|
|
4001
|
+
* @param {array} extraArgs List of extra arguments to use when calling gradle
|
|
4001
4002
|
*
|
|
4002
4003
|
* @returns {string} The combined output for all subprojects of the Gradle properties task
|
|
4003
4004
|
*/
|
|
4004
|
-
export function executeParallelGradleProperties(
|
|
4005
|
+
export function executeParallelGradleProperties(
|
|
4006
|
+
dir,
|
|
4007
|
+
allProjectsStr,
|
|
4008
|
+
extraArgs = [],
|
|
4009
|
+
) {
|
|
4005
4010
|
const gradleCmd = getGradleCommand(dir, null);
|
|
4006
4011
|
const gradleArgs = buildGradleCommandArguments(
|
|
4007
|
-
|
|
4012
|
+
extraArgs.concat(
|
|
4013
|
+
process.env.GRADLE_ARGS ? process.env.GRADLE_ARGS.split(" ") : [],
|
|
4014
|
+
),
|
|
4008
4015
|
allProjectsStr.map((project) =>
|
|
4009
4016
|
project ? `${project}:properties` : "properties",
|
|
4010
4017
|
),
|
|
4011
4018
|
process.env.GRADLE_ARGS_PROPERTIES
|
|
4012
4019
|
? process.env.GRADLE_ARGS_PROPERTIES.split(" ")
|
|
4013
4020
|
: [],
|
|
4021
|
+
gradleCmd.length,
|
|
4014
4022
|
);
|
|
4015
|
-
|
|
4016
|
-
|
|
4017
|
-
|
|
4018
|
-
);
|
|
4019
|
-
}
|
|
4020
|
-
const result = spawnSync(gradleCmd, gradleArgs, {
|
|
4021
|
-
cwd: dir,
|
|
4022
|
-
encoding: "utf-8",
|
|
4023
|
-
shell: isWin,
|
|
4024
|
-
maxBuffer: MAX_BUFFER,
|
|
4025
|
-
});
|
|
4026
|
-
if (result.status !== 0 || result.error) {
|
|
4027
|
-
if (process.env?.CDXGEN_IN_CONTAINER === "true") {
|
|
4028
|
-
thoughtLog(
|
|
4029
|
-
"Gradle build has failed. Perhaps the user is using the wrong container image?",
|
|
4030
|
-
);
|
|
4031
|
-
} else {
|
|
4032
|
-
thoughtLog(
|
|
4033
|
-
"Gradle build has failed. I recommend using Java container images.",
|
|
4034
|
-
);
|
|
4035
|
-
}
|
|
4036
|
-
if (result.stderr) {
|
|
4037
|
-
console.group("*** GRADLE BUILD ERRORS ***");
|
|
4038
|
-
console.error(result.stdout, result.stderr);
|
|
4039
|
-
console.groupEnd();
|
|
4040
|
-
console.log(
|
|
4041
|
-
"1. Check if the correct version of java and gradle are installed and available in PATH. For example, some project might require Java 11 with gradle 7.\n cdxgen container image bundles Java 23 with gradle 8 which might be incompatible.",
|
|
4042
|
-
);
|
|
4023
|
+
const allOutputs = [];
|
|
4024
|
+
for (const gradleArg of gradleArgs) {
|
|
4025
|
+
if (DEBUG_MODE) {
|
|
4043
4026
|
console.log(
|
|
4044
|
-
|
|
4027
|
+
`Executing ${gradleCmd} with arguments ${gradleArg.join(" ").substring(0, 150)}... in ${dir}`,
|
|
4045
4028
|
);
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4029
|
+
}
|
|
4030
|
+
const result = spawnSync(gradleCmd, gradleArg, {
|
|
4031
|
+
cwd: dir,
|
|
4032
|
+
encoding: "utf-8",
|
|
4033
|
+
shell: isWin,
|
|
4034
|
+
maxBuffer: MAX_BUFFER,
|
|
4035
|
+
});
|
|
4036
|
+
if (result.status !== 0 || result.error) {
|
|
4037
|
+
if (process.env?.CDXGEN_IN_CONTAINER === "true") {
|
|
4038
|
+
thoughtLog(
|
|
4039
|
+
"Gradle build has failed. Perhaps the user is using the wrong container image?",
|
|
4049
4040
|
);
|
|
4050
|
-
} else
|
|
4051
|
-
|
|
4052
|
-
"
|
|
4053
|
-
)
|
|
4054
|
-
|
|
4041
|
+
} else {
|
|
4042
|
+
thoughtLog(
|
|
4043
|
+
"Gradle build has failed. I recommend using Java container images.",
|
|
4044
|
+
);
|
|
4045
|
+
}
|
|
4046
|
+
if (result.stderr) {
|
|
4047
|
+
console.group("*** GRADLE BUILD ERRORS ***");
|
|
4048
|
+
console.error(result.stdout, result.stderr);
|
|
4049
|
+
console.groupEnd();
|
|
4055
4050
|
console.log(
|
|
4056
|
-
"
|
|
4051
|
+
"1. Check if the correct version of java and gradle are installed and available in PATH. For example, some project might require Java 11 with gradle 7.\n cdxgen container image bundles Java 23 with gradle 8 which might be incompatible.",
|
|
4057
4052
|
);
|
|
4058
|
-
} else if (result.stderr?.includes("Unrecognized option")) {
|
|
4059
4053
|
console.log(
|
|
4060
|
-
"
|
|
4054
|
+
"2. Try running cdxgen with the custom JDK11-based image `ghcr.io/cyclonedx/cdxgen-java11:v11`.",
|
|
4061
4055
|
);
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4056
|
+
if (result.stderr?.includes("not get unknown property")) {
|
|
4057
|
+
console.log(
|
|
4058
|
+
"3. Check if the SBOM is generated for the correct root project for your application.",
|
|
4059
|
+
);
|
|
4060
|
+
} else if (
|
|
4061
|
+
result.stderr?.includes(
|
|
4062
|
+
"In version catalog libs, import of external catalog file failed",
|
|
4063
|
+
)
|
|
4064
|
+
) {
|
|
4065
|
+
console.log(
|
|
4066
|
+
"3. Catalog file is required for gradle dependency resolution to succeed.",
|
|
4067
|
+
);
|
|
4068
|
+
} else if (result.stderr?.includes("Unrecognized option")) {
|
|
4069
|
+
console.log(
|
|
4070
|
+
"3. Try removing the unrecognized options to improve compatibility with a range of Java versions. Refer to the error message above.",
|
|
4071
|
+
);
|
|
4072
|
+
}
|
|
4073
|
+
if (result.stderr.includes("does not exist")) {
|
|
4074
|
+
return "";
|
|
4075
|
+
}
|
|
4065
4076
|
}
|
|
4066
4077
|
}
|
|
4078
|
+
if (result.stdout !== null) {
|
|
4079
|
+
allOutputs.push(result.stdout);
|
|
4080
|
+
}
|
|
4067
4081
|
}
|
|
4068
|
-
const stdout =
|
|
4082
|
+
const stdout = allOutputs.join("\n");
|
|
4069
4083
|
if (stdout) {
|
|
4070
4084
|
return Buffer.from(stdout).toString();
|
|
4071
4085
|
}
|
|
@@ -10451,6 +10465,10 @@ export function parseSbtTree(sbtTreeFile) {
|
|
|
10451
10465
|
name = pkgParts[0];
|
|
10452
10466
|
version = pkgParts[1];
|
|
10453
10467
|
}
|
|
10468
|
+
if (!name?.length) {
|
|
10469
|
+
console.log(pkgLine, "was not parsed correctly!");
|
|
10470
|
+
return;
|
|
10471
|
+
}
|
|
10454
10472
|
const purlString = new PackageURL(
|
|
10455
10473
|
"maven",
|
|
10456
10474
|
group,
|
|
@@ -12119,25 +12137,63 @@ export function getMillCommand(srcPath) {
|
|
|
12119
12137
|
* @param {string[]} gradleArguments The general gradle arguments, which must only be added once
|
|
12120
12138
|
* @param {string[]} gradleSubCommands The sub-commands that are to be executed by gradle
|
|
12121
12139
|
* @param {string[]} gradleSubCommandArguments The arguments specific to the sub-command(s), which much be added PER sub-command
|
|
12140
|
+
* @param {int} gradleCommandLength The length of the full gradle-command
|
|
12122
12141
|
*
|
|
12123
|
-
* @returns {string[]} Array of arguments to be added to the gradle command
|
|
12142
|
+
* @returns {string[]} Array of arrays of arguments to be added to the gradle command
|
|
12124
12143
|
*/
|
|
12125
12144
|
export function buildGradleCommandArguments(
|
|
12126
12145
|
gradleArguments,
|
|
12127
12146
|
gradleSubCommands,
|
|
12128
12147
|
gradleSubCommandArguments,
|
|
12148
|
+
gradleCommandLength,
|
|
12129
12149
|
) {
|
|
12130
|
-
|
|
12150
|
+
const mainGradleArguments = [
|
|
12131
12151
|
"--build-cache",
|
|
12132
12152
|
"--console",
|
|
12133
12153
|
"plain",
|
|
12134
12154
|
"--no-parallel",
|
|
12135
|
-
]
|
|
12155
|
+
]
|
|
12156
|
+
.concat(getGradleDaemonParameter())
|
|
12157
|
+
.concat(gradleArguments);
|
|
12158
|
+
const maxCliArgsLength = isWin
|
|
12159
|
+
? 7500 - gradleCommandLength - mainGradleArguments.join(" ").length - 2
|
|
12160
|
+
: -1;
|
|
12161
|
+
if (DEBUG_MODE && maxCliArgsLength !== -1) {
|
|
12162
|
+
console.log(
|
|
12163
|
+
"Running on Windows with a very long command -- splitting into multiple commands",
|
|
12164
|
+
);
|
|
12165
|
+
}
|
|
12166
|
+
const splitArgs = [];
|
|
12167
|
+
let allGradleArguments = [].concat(mainGradleArguments);
|
|
12168
|
+
let remainingLength = maxCliArgsLength;
|
|
12136
12169
|
for (const gradleSubCommand of gradleSubCommands) {
|
|
12170
|
+
const subCommandLength =
|
|
12171
|
+
[gradleSubCommand, ...gradleSubCommandArguments].join(" ").length + 1;
|
|
12172
|
+
if (maxCliArgsLength !== -1 && remainingLength - subCommandLength < 0) {
|
|
12173
|
+
splitArgs.push(allGradleArguments);
|
|
12174
|
+
allGradleArguments = [].concat(mainGradleArguments);
|
|
12175
|
+
remainingLength = maxCliArgsLength;
|
|
12176
|
+
}
|
|
12137
12177
|
allGradleArguments.push(gradleSubCommand);
|
|
12138
12178
|
allGradleArguments = allGradleArguments.concat(gradleSubCommandArguments);
|
|
12179
|
+
remainingLength -= subCommandLength;
|
|
12180
|
+
}
|
|
12181
|
+
if (allGradleArguments.length !== mainGradleArguments.length) {
|
|
12182
|
+
splitArgs.push(allGradleArguments);
|
|
12183
|
+
}
|
|
12184
|
+
return splitArgs;
|
|
12185
|
+
}
|
|
12186
|
+
|
|
12187
|
+
function getGradleDaemonParameter() {
|
|
12188
|
+
switch (process.env.GRADLE_USE_DAEMON) {
|
|
12189
|
+
case "default":
|
|
12190
|
+
return [];
|
|
12191
|
+
case "false":
|
|
12192
|
+
case "1":
|
|
12193
|
+
return ["--no-daemon"];
|
|
12194
|
+
default:
|
|
12195
|
+
return ["--daemon"];
|
|
12139
12196
|
}
|
|
12140
|
-
return allGradleArguments;
|
|
12141
12197
|
}
|
|
12142
12198
|
|
|
12143
12199
|
/**
|
package/lib/helpers/validator.js
CHANGED
|
@@ -285,7 +285,7 @@ export const validateRefs = (bomJson) => {
|
|
|
285
285
|
parentPurlType &&
|
|
286
286
|
childPurlType &&
|
|
287
287
|
parentPurlType !== childPurlType &&
|
|
288
|
-
!["oci", "generic"].includes(parentPurlType)
|
|
288
|
+
!["oci", "generic", "container"].includes(parentPurlType)
|
|
289
289
|
) {
|
|
290
290
|
warningsList.push(
|
|
291
291
|
`The parent package '${dep.ref}' (type ${parentPurlType}) depends on the child package '${don}' (type ${childPurlType}). This is a bug in cdxgen if this project is not a monorepo.`,
|
package/lib/managers/binary.js
CHANGED
package/lib/server/server.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import http from "node:http";
|
|
4
|
-
import os from "node:os";
|
|
5
4
|
import path from "node:path";
|
|
6
5
|
import process from "node:process";
|
|
7
|
-
import
|
|
6
|
+
import { URL } from "node:url";
|
|
8
7
|
import bodyParser from "body-parser";
|
|
9
8
|
import connect from "connect";
|
|
10
9
|
import { createBom, submitBom } from "../cli/index.js";
|
|
@@ -27,6 +26,24 @@ app.use(
|
|
|
27
26
|
);
|
|
28
27
|
app.use(compression());
|
|
29
28
|
|
|
29
|
+
function isAllowedHost(hostname) {
|
|
30
|
+
if (!process.env.CDXGEN_SERVER_ALLOWED_HOSTS) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return (process.env.CDXGEN_SERVER_ALLOWED_HOSTS || "")
|
|
34
|
+
.split(",")
|
|
35
|
+
.includes(hostname);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function isAllowedPath(p) {
|
|
39
|
+
if (!process.env.CDXGEN_SERVER_ALLOWED_PATHS) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return (process.env.CDXGEN_SERVER_ALLOWED_PATHS || "")
|
|
43
|
+
.split(",")
|
|
44
|
+
.some((ap) => p.startsWith(ap));
|
|
45
|
+
}
|
|
46
|
+
|
|
30
47
|
const gitClone = (repoUrl, branch = null) => {
|
|
31
48
|
const tempDir = fs.mkdtempSync(
|
|
32
49
|
path.join(getTmpDir(), path.basename(repoUrl)),
|
|
@@ -172,7 +189,8 @@ const start = (options) => {
|
|
|
172
189
|
});
|
|
173
190
|
|
|
174
191
|
app.use("/sbom", async (req, res) => {
|
|
175
|
-
const
|
|
192
|
+
const requestUrl = new URL(req.url, `http://${req.headers.host}`);
|
|
193
|
+
const q = Object.fromEntries(requestUrl.searchParams.entries());
|
|
176
194
|
let cleanup = false;
|
|
177
195
|
const reqOptions = parseQueryString(
|
|
178
196
|
q,
|
|
@@ -190,9 +208,31 @@ const start = (options) => {
|
|
|
190
208
|
}
|
|
191
209
|
let srcDir = filePath;
|
|
192
210
|
if (filePath.startsWith("http") || filePath.startsWith("git")) {
|
|
211
|
+
// Validate the hostnames
|
|
212
|
+
const gitUrlObj = new URL(filePath);
|
|
213
|
+
if (!isAllowedHost(gitUrlObj.hostname)) {
|
|
214
|
+
res.writeHead(403, { "Content-Type": "application/json" });
|
|
215
|
+
return res.end(
|
|
216
|
+
JSON.stringify({
|
|
217
|
+
error: "Host Not Allowed",
|
|
218
|
+
details: `The Git URL host is not allowed: '${gitUrlObj.hostname}'.`,
|
|
219
|
+
}),
|
|
220
|
+
);
|
|
221
|
+
}
|
|
193
222
|
srcDir = gitClone(filePath, reqOptions.gitBranch);
|
|
194
223
|
cleanup = true;
|
|
195
|
-
} else
|
|
224
|
+
} else {
|
|
225
|
+
if (!isAllowedPath(path.resolve(srcDir))) {
|
|
226
|
+
res.writeHead(403, { "Content-Type": "application/json" });
|
|
227
|
+
return res.end(
|
|
228
|
+
JSON.stringify({
|
|
229
|
+
error: "Path Not Allowed",
|
|
230
|
+
details: `Path is not allowed: '${srcDir}'.`,
|
|
231
|
+
}),
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (srcDir !== path.resolve(srcDir)) {
|
|
196
236
|
console.log(
|
|
197
237
|
`Invoke the API with an absolute path '${path.resolve(srcDir)}' instead of '${srcDir}' to reduce security risks.`,
|
|
198
238
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyclonedx/cdxgen",
|
|
3
|
-
"version": "11.2.
|
|
3
|
+
"version": "11.2.5",
|
|
4
4
|
"description": "Creates CycloneDX Software Bill of Materials (SBOM) from source or container image",
|
|
5
5
|
"homepage": "http://github.com/cyclonedx/cdxgen",
|
|
6
6
|
"author": "Prabhu Subramanian <prabhu@appthreat.com>",
|
|
@@ -34,6 +34,10 @@
|
|
|
34
34
|
{
|
|
35
35
|
"name": "Adam Setch",
|
|
36
36
|
"url": "https://github.com/setchy"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "Roland Asmann",
|
|
40
|
+
"url": "https://github.com/malice00"
|
|
37
41
|
}
|
|
38
42
|
],
|
|
39
43
|
"type": "module",
|
|
@@ -97,7 +101,7 @@
|
|
|
97
101
|
"yoctocolors": "^2.1.1"
|
|
98
102
|
},
|
|
99
103
|
"optionalDependencies": {
|
|
100
|
-
"@appthreat/atom": "2.1.
|
|
104
|
+
"@appthreat/atom": "2.1.15",
|
|
101
105
|
"@appthreat/cdx-proto": "1.0.1",
|
|
102
106
|
"@cyclonedx/cdxgen-plugins-bin": "1.6.10",
|
|
103
107
|
"@cyclonedx/cdxgen-plugins-bin-linux-arm": "1.6.10",
|
|
@@ -136,7 +140,7 @@
|
|
|
136
140
|
"negotiator": "^0.6.4"
|
|
137
141
|
},
|
|
138
142
|
"scripts": {
|
|
139
|
-
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --inject-globals false lib/managers/docker.test.js lib/helpers/
|
|
143
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --inject-globals false lib/managers/docker.test.js lib/helpers/utils.test.js lib/helpers/display.test.js lib/stages/postgen/postgen.test.js lib/evinser/swiftsem.test.js",
|
|
140
144
|
"watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch --inject-globals false",
|
|
141
145
|
"lint:check": "biome check",
|
|
142
146
|
"lint": "biome check --fix",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/cli/index.js"],"names":[],"mappings":"AAw7BA;;;;;;;;GAQG;AACH,gFAFW,MAAM,SAchB;AAuXD;;;;;;;GAOG;AACH,mCALW,MAAM,qBAyEhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM;;;;EAKhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM;;;;EAkBhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAivChB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAuvBhB;AAED;;;;;;;;;;GAUG;AACH,+DAsEC;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BAkehB;AAED;;;;;GAKG;AACH,kCAHW,MAAM,8BA+YhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAuIhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAkEhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBA+KhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBAsHhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,0CAHW,MAAM,qBAuBhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,8BAqDhB;AAED;;;;;GAKG;AACH,uCAHW,MAAM,8BA4ChB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,qBA2BhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BA8IhB;AAED;;;;;GAKG;AACH,qCAHW,MAAM,8BAmJhB;AAED;;;;;GAKG;AACH,iDAHW,MAAM,qBAmUhB;AAED;;;;;GAKG;AACH,mCAHW,MAAM,qBAiJhB;AAED;;;;;GAKG;AACH,oCAHW,MAAM,8BAwNhB;AAED;;;;;GAKG;AACH,sCAHW,MAAM,8BA8ZhB;AAED;;;;;GAKG;AACH,2CAHW,MAAM;;;;;;;;;;;;;;;;;;;;GAoChB;AAED;;;;;;;;KA+DC;AAED;;;;;;GAMG;AACH,yDA+FC;AAED;;;;;;;;;GASG;AACH,2GAuCC;AAED;;;;;GAKG;AACH,0CAHW,MAAM,EAAE,8BA6vBlB;AAED;;;;;GAKG;AACH,iCAHW,MAAM,8BAqUhB;AAED;;;;;GAKG;AACH,gCAHW,MAAM,qBA2QhB;AAED;;;;;;;GAOG;AACH,wDAHY,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CA2HjD"}
|
|
@@ -294,10 +294,11 @@ export function parseGradleProperties(rawOutput: string, gradleModuleName?: stri
|
|
|
294
294
|
*
|
|
295
295
|
* @param {string} dir Directory to execute the command
|
|
296
296
|
* @param {array} allProjectsStr List of all sub-projects (including the preceding `:`)
|
|
297
|
+
* @param {array} extraArgs List of extra arguments to use when calling gradle
|
|
297
298
|
*
|
|
298
299
|
* @returns {string} The combined output for all subprojects of the Gradle properties task
|
|
299
300
|
*/
|
|
300
|
-
export function executeParallelGradleProperties(dir: string, allProjectsStr: any[]): string;
|
|
301
|
+
export function executeParallelGradleProperties(dir: string, allProjectsStr: any[], extraArgs?: any[]): string;
|
|
301
302
|
/**
|
|
302
303
|
* Parse bazel action graph output
|
|
303
304
|
* @param {string} rawOutput Raw string output
|
|
@@ -1154,10 +1155,11 @@ export function getMillCommand(srcPath: string): string;
|
|
|
1154
1155
|
* @param {string[]} gradleArguments The general gradle arguments, which must only be added once
|
|
1155
1156
|
* @param {string[]} gradleSubCommands The sub-commands that are to be executed by gradle
|
|
1156
1157
|
* @param {string[]} gradleSubCommandArguments The arguments specific to the sub-command(s), which much be added PER sub-command
|
|
1158
|
+
* @param {int} gradleCommandLength The length of the full gradle-command
|
|
1157
1159
|
*
|
|
1158
|
-
* @returns {string[]} Array of arguments to be added to the gradle command
|
|
1160
|
+
* @returns {string[]} Array of arrays of arguments to be added to the gradle command
|
|
1159
1161
|
*/
|
|
1160
|
-
export function buildGradleCommandArguments(gradleArguments: string[], gradleSubCommands: string[], gradleSubCommandArguments: string[]): string[];
|
|
1162
|
+
export function buildGradleCommandArguments(gradleArguments: string[], gradleSubCommands: string[], gradleSubCommandArguments: string[], gradleCommandLength: int): string[];
|
|
1161
1163
|
/**
|
|
1162
1164
|
* Method to split the output produced by Gradle using parallel processing by project
|
|
1163
1165
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"AA8EA;;;;;GAKG;AACH,0DAUC;AAED;;;;;;GAMG;AACH,yDAHmB,OAAO,UAazB;AAmFD,8CAKC;AAED,0CAIC;AAsBD,yCAYC;AAID,2CAQC;AAiOD;;;;;;;GAOG;AACH,4EAiBC;AAED;;;;;;GAMG;AACH,mGA2EC;AAED;;;;;;;;GAQG;AACH,yGAeC;AAyBD;;;;;;GAMG;AACH,qCAJW,MAAM,WACN,MAAM,2BA8BhB;AAED;;;;;;GAMG;AACH,+CAJW,MAAM,WACN,MAAM,+BA0BhB;AAYD;;;;GAIG;AACH,gCAFa,MAAM,CAIlB;AAED,iCAQC;AAED;;;;;;IAMI;AACJ,iDAJW,MAAM,GACJ,OAAO,CAWnB;AAED;;;;;;;;;GASG;AACH,iEA2BC;AAED;;;;;GAKG;AACH,6CAqDC;AAED;;;;;;GAMG;AACH,sEA0DC;AAED;;;;GAIG;AACH,4EAoCC;AAED;;;GAGG;AACH;;EAUC;AAED,sEA0BC;AAED;;;;GAIG;AACH,+DA4CC;AAED;;;;;GAKG;AACH,0CAHW,MAAM,WACN,OAAO,kBA+EjB;AAED;;;;;GAKG;AACH,0CAHW,MAAM,YACN,MAAM;;;GAygBhB;AAED;;;;;;;GAOG;AACH,6CAFW,MAAM,MA2DhB;AAgCD;;;;GAIG;AACH,4CAFW,MAAM;;;GA4OhB;AAED;;;;GAIG;AACH,4CAFW,MAAM,kBAiEhB;AAoHD;;;;;GAKG;AACH,kDAHW,MAAM,GACJ,MAAM,CAgBlB;AAED;;;;;;;;;;GAUG;AACH,wCARW,MAAM;;;;;;;;;;;;;;;;;;GAuvBhB;AAED;;;;GAIG;AACH,8CAFW,MAAM,kBA+ChB;AAED;;;;GAIG;AACH,sCAFW,MAAM,kBAgFhB;AAED;;;;;GAKG;AACH,kCAHW,MAAM,OAqIhB;AAED;;;;;;GAMG;AACH,0CALW,MAAM,WACN,MAAM,OA+JhB;AAED;;;;;;;;;GASG;AACH,4CAPW,MAAM,gBACN,GAAG,aACH,GAAG,gBACH,MAAM,OA+GhB;AAiBD;;;;;;GAMG;AACH,0CALW,MAAM,oBACN,MAAM,kBACN,GAAG,mBACH,MAAM;;;;;;;;;GA6OhB;AAED;;;GAGG;AACH,uCAFW,MAAM,SAoChB;AAED;;;GAGG;AACH,wCAFW,MAAM,OAahB;AAED,yEAwBC;AAED;;;;GAIG;AACH,+CAFW,MAAM;;;EAwDhB;AAED;;;;;GAKG;AACH,iDAHW,MAAM,qBACN,MAAM;;;;;;;;EAmDhB;AAED
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/helpers/utils.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../lib/managers/binary.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../lib/managers/binary.js"],"names":[],"mappings":"AA4SA,wDAkBC;AAED;;;;;GAKG;AACH,kDAFa,SAAS,MAAO,CAqB5B;AAED;;;;;;;GAOG;AACH,kEAqaC;AAsDD,gDAoDC;AAED;;;;;;GAMG;AACH,qCAJW,MAAM,cACN,MAAM,WA0ChB;AAED;;;;;;;;GAQG;AACH,kCANW,MAAM,iBACN,MAAM,YACN,OAAO,GAEN,OAAO,CA8BlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/server/server.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/server/server.js"],"names":[],"mappings":"AA8IA,yDAKC;AAED,0CAgJC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Function to parse the given gradle build file to identify properties such as included builds
|
|
5
|
-
*
|
|
6
|
-
* @param buildFile {build,settings}.gradle(.kts)? Build file in groovy or kotlin format
|
|
7
|
-
* @param buildContent String content to parse directly.
|
|
8
|
-
*/
|
|
9
|
-
export function analyzeBuildSettings(buildFile, buildContent) {
|
|
10
|
-
const includedBuilds = new Set();
|
|
11
|
-
if (!buildContent && !existsSync(buildFile)) {
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
const data = buildContent || readFileSync(buildFile, "utf-8");
|
|
15
|
-
let pluginManagementMode = false;
|
|
16
|
-
for (let aline of data.split("\n")) {
|
|
17
|
-
aline = aline.replaceAll("\r", "").trim();
|
|
18
|
-
if (aline.includes("pluginManagement {")) {
|
|
19
|
-
pluginManagementMode = true;
|
|
20
|
-
}
|
|
21
|
-
if (pluginManagementMode && aline === "}") {
|
|
22
|
-
pluginManagementMode = false;
|
|
23
|
-
}
|
|
24
|
-
if (!pluginManagementMode) {
|
|
25
|
-
if (aline.includes("includeBuild")) {
|
|
26
|
-
aline = aline.replace("includeBuild", "").replaceAll(/[ "'()]/g, "");
|
|
27
|
-
// Ignore relative includes for now
|
|
28
|
-
if (!aline.startsWith(".")) {
|
|
29
|
-
includedBuilds.add(`:${aline.trim()}`);
|
|
30
|
-
}
|
|
31
|
-
} else if (aline.includes("includedBuild(")) {
|
|
32
|
-
aline = aline
|
|
33
|
-
.split("includedBuild(")[1]
|
|
34
|
-
.split(")")[0]
|
|
35
|
-
.replaceAll(/[ "'()]/g, "");
|
|
36
|
-
if (!aline.startsWith(".")) {
|
|
37
|
-
includedBuilds.add(`:${aline.trim()}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (!includedBuilds.size) {
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
includedBuilds: Array.from(includedBuilds),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { afterAll, beforeAll, describe, expect, test } from "@jest/globals";
|
|
2
|
-
import { analyzeBuildSettings } from "./gradleutils.js";
|
|
3
|
-
|
|
4
|
-
test("analyzeBuildSettings tests", () => {
|
|
5
|
-
expect(analyzeBuildSettings()).toBeUndefined();
|
|
6
|
-
expect(
|
|
7
|
-
analyzeBuildSettings(
|
|
8
|
-
undefined,
|
|
9
|
-
`rootProject.name = "my-composite"
|
|
10
|
-
|
|
11
|
-
includeBuild("my-app")
|
|
12
|
-
includeBuild("my-utils")`,
|
|
13
|
-
),
|
|
14
|
-
).toEqual({
|
|
15
|
-
includedBuilds: [":my-app", ":my-utils"],
|
|
16
|
-
});
|
|
17
|
-
expect(
|
|
18
|
-
analyzeBuildSettings(
|
|
19
|
-
undefined,
|
|
20
|
-
`rootProject.name = 'my-composite'
|
|
21
|
-
|
|
22
|
-
includeBuild 'my-app'
|
|
23
|
-
includeBuild 'my-utils'`,
|
|
24
|
-
),
|
|
25
|
-
).toEqual({
|
|
26
|
-
includedBuilds: [":my-app", ":my-utils"],
|
|
27
|
-
});
|
|
28
|
-
expect(
|
|
29
|
-
analyzeBuildSettings(
|
|
30
|
-
undefined,
|
|
31
|
-
`tasks.register("run") {
|
|
32
|
-
dependsOn(gradle.includedBuild("my-app").task(":app:run"))
|
|
33
|
-
}`,
|
|
34
|
-
),
|
|
35
|
-
).toEqual({
|
|
36
|
-
includedBuilds: [":my-app"],
|
|
37
|
-
});
|
|
38
|
-
expect(
|
|
39
|
-
analyzeBuildSettings(
|
|
40
|
-
undefined,
|
|
41
|
-
`tasks.register('run') {
|
|
42
|
-
dependsOn gradle.includedBuild('my-app').task(':app:run')
|
|
43
|
-
}`,
|
|
44
|
-
),
|
|
45
|
-
).toEqual({
|
|
46
|
-
includedBuilds: [":my-app"],
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
expect(
|
|
50
|
-
analyzeBuildSettings(
|
|
51
|
-
undefined,
|
|
52
|
-
`pluginManagement {
|
|
53
|
-
includeBuild("../url-verifier-plugin")
|
|
54
|
-
}`,
|
|
55
|
-
),
|
|
56
|
-
).toBeUndefined();
|
|
57
|
-
expect(
|
|
58
|
-
analyzeBuildSettings(
|
|
59
|
-
undefined,
|
|
60
|
-
`pluginManagement {
|
|
61
|
-
includeBuild '../url-verifier-plugin'
|
|
62
|
-
}`,
|
|
63
|
-
),
|
|
64
|
-
).toBeUndefined();
|
|
65
|
-
});
|