diff --git a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/CiTargetsUtils.kt b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/CiTargetsUtils.kt index 7525ee936a..55f13ae2bb 100644 --- a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/CiTargetsUtils.kt +++ b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/CiTargetsUtils.kt @@ -88,8 +88,10 @@ private fun buildTestCiTarget( testFile: File, testTask: Task, projectRoot: String, - workspaceRoot: String + workspaceRoot: String, ): MutableMap { + val taskInputs = getInputsForTask(testTask, projectRoot, workspaceRoot, null) + val target = mutableMapOf( "executor" to "@nx/gradle:gradle", @@ -100,7 +102,7 @@ private fun buildTestCiTarget( "metadata" to getMetadata("Runs Gradle test $testClassName in CI", projectBuildPath, "test"), "cache" to true, - "inputs" to arrayOf(replaceRootInPath(testFile.path, projectRoot, workspaceRoot))) + "inputs" to taskInputs) getDependsOnForTask(testTask, null) ?.takeIf { it.isNotEmpty() } @@ -115,7 +117,6 @@ private fun buildTestCiTarget( testTask.logger.info("${testTask.path}: found ${it.size} outputs entries") target["outputs"] = it } - return target } diff --git a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/TaskUtils.kt b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/TaskUtils.kt index c1c1ff0ca7..52d484978a 100644 --- a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/TaskUtils.kt +++ b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/utils/TaskUtils.kt @@ -93,7 +93,7 @@ fun getInputsForTask( val mappedInputsIncludeExternal: MutableList = mutableListOf() val inputs = task.inputs val externalDependencies = mutableListOf() - inputs.sourceFiles.forEach { file -> + inputs.files.forEach { file -> val path: String = file.path // replace the absolute path to contain {projectRoot} or {workspaceRoot} val pathWithReplacedRoot = replaceRootInPath(path, projectRoot, workspaceRoot) @@ -101,8 +101,7 @@ fun getInputsForTask( mappedInputsIncludeExternal.add((pathWithReplacedRoot)) } // if the path is outside of workspace - if (pathWithReplacedRoot == null && - externalNodes != null) { // add it to external dependencies + if (pathWithReplacedRoot == null) { // add it to external dependencies try { val externalDep = getExternalDepFromInputFile(path, externalNodes, task.logger) externalDep?.let { externalDependencies.add(it) } @@ -251,7 +250,7 @@ fun getMetadata( */ fun getExternalDepFromInputFile( inputFile: String, - externalNodes: MutableMap, + externalNodes: MutableMap?, logger: org.gradle.api.logging.Logger ): String? { try { @@ -279,7 +278,9 @@ fun getExternalDepFromInputFile( val externalKey = "gradle:$nameKey" val node = ExternalNode("gradle", externalKey, data) - externalNodes[externalKey] = node + if (externalNodes != null) { + externalNodes[externalKey] = node + } return externalKey } catch (e: Exception) { diff --git a/packages/gradle/project-graph/src/test/kotlin/dev/nx/gradle/utils/AddTestCiTargetsTest.kt b/packages/gradle/project-graph/src/test/kotlin/dev/nx/gradle/utils/AddTestCiTargetsTest.kt index ce8b5bcdf8..7af7b295d1 100644 --- a/packages/gradle/project-graph/src/test/kotlin/dev/nx/gradle/utils/AddTestCiTargetsTest.kt +++ b/packages/gradle/project-graph/src/test/kotlin/dev/nx/gradle/utils/AddTestCiTargetsTest.kt @@ -41,6 +41,7 @@ class AddTestCiTargetsTest { } val testFiles = project.files(testFile1, testFile2) + testTask.inputs.files(testFiles) val targets = mutableMapOf>() val targetGroups = mutableMapOf>() @@ -76,7 +77,19 @@ class AddTestCiTargetsTest { val firstTarget = targets["ci--MyFirstTest"]!! assertEquals(firstTarget["executor"], "@nx/gradle:gradle") assertEquals(true, firstTarget["cache"]) - assertTrue((firstTarget["inputs"] as Array<*>)[0].toString().contains("{projectRoot}")) + + val actualInputs = + firstTarget["inputs"] as? Collection<*> ?: error("Missing or invalid 'inputs' field") + val actualInputStrings = actualInputs.map { it.toString() } + + testFiles.forEach { file -> + val expectedInput = + replaceRootInPath(file.path, projectRoot.absolutePath, workspaceRoot.absolutePath) + assertTrue( + expectedInput in actualInputStrings, + "Expected input '$expectedInput' not found in actual inputs: $actualInputStrings") + } + assertEquals("nx:noop", parentCi["executor"]) } }