Skip to content

Commit 06c0d5d

Browse files
committed
Fixed failure querying the task inputs/outputs on 8+ #259
This only happens if you're on Gradle 8+ _and_ have configuration-cache enabled, _and_ actually query the TaskInputs/TaskOutputs
1 parent 2f80985 commit 06c0d5d

File tree

7 files changed

+39
-38
lines changed

7 files changed

+39
-38
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* Fixes configuration-cache issue in Gradle 8.4
77
* Removes the entire `PlatformHelper` as the functionality has migrated into top-level functions
88
* Removes the deprecated `HelperExecution`
9+
* Fixed failure querying the task inputs/outputs on 8+ with configuration-cache enabled [#259](https://github.com/node-gradle/gradle-node-plugin/issues/259)
910

1011
## Version 5.0.0 *(2023-05-13)*
1112
* Support configuration-cache on Gradle 8.1 [#271](https://github.com/node-gradle/gradle-node-plugin/issues/271)

src/main/kotlin/com/github/gradle/node/npm/task/NpmInstallTask.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,42 +37,42 @@ abstract class NpmInstallTask : NpmTask() {
3737
@PathSensitive(RELATIVE)
3838
@InputFile
3939
@SkipWhenEmpty
40-
protected fun getPackageJsonFile(): Provider<File> {
41-
return projectFileIfExists("package.json")
40+
protected fun getPackageJsonFile(): File? {
41+
return projectFileIfExists("package.json").orNull
4242
}
4343

4444
@PathSensitive(RELATIVE)
4545
@Optional
4646
@InputFile
47-
protected fun getNpmShrinkwrap(): Provider<File> {
48-
return projectFileIfExists("npm-shrinkwrap.json")
47+
protected fun getNpmShrinkwrap(): File? {
48+
return projectFileIfExists("npm-shrinkwrap.json").orNull
4949
}
5050

5151
@PathSensitive(RELATIVE)
5252
@Optional
5353
@InputFile
54-
protected fun getPackageLockFileAsInput(): Provider<File> {
54+
protected fun getPackageLockFileAsInput(): File? {
5555
return npmCommand.flatMap { command ->
5656
if (command[0] == "ci") projectFileIfExists("package-lock.json") else providers.provider { null }
57-
}
57+
}.orNull
5858
}
5959

6060
@PathSensitive(RELATIVE)
6161
@Optional
6262
@InputFile
63-
protected fun getYarnLockFile(): Provider<File> {
64-
return projectFileIfExists("yarn.lock")
63+
protected fun getYarnLockFile(): File? {
64+
return projectFileIfExists("yarn.lock").orNull
6565
}
6666

6767
@Optional
6868
@OutputFile
69-
protected fun getPackageLockFileAsOutput(): Provider<File> {
69+
protected fun getPackageLockFileAsOutput(): File? {
7070
return npmCommand.flatMap { command ->
7171
if (command[0] == "install") projectFileIfExists("package-lock.json") else providers.provider { null }
72-
}
72+
}.orNull
7373
}
7474

75-
private fun projectFileIfExists(name: String): Provider<File> {
75+
private fun projectFileIfExists(name: String): Provider<File?> {
7676
return nodeExtension.nodeProjectDir.map { it.file(name).asFile }
7777
.flatMap { if (it.exists()) providers.provider { it } else providers.provider { null } }
7878
}
@@ -107,12 +107,12 @@ abstract class NpmInstallTask : NpmTask() {
107107

108108
@Optional
109109
@OutputFile
110-
protected fun getNodeModulesPackageLock(): Provider<File> {
110+
protected fun getNodeModulesPackageLock(): File? {
111111
if (isLegacyNpm()) {
112-
return providers.provider { null }
112+
return null
113113
}
114114

115-
return projectFileIfExists("node_modules/.package-lock.json")
115+
return projectFileIfExists("node_modules/.package-lock.json").orNull
116116
}
117117

118118
/**

src/main/kotlin/com/github/gradle/node/npm/task/NpmTask.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.github.gradle.node.task.BaseTask
88
import com.github.gradle.node.util.DefaultProjectApiHelper
99
import org.gradle.api.Action
1010
import org.gradle.api.model.ObjectFactory
11+
import org.gradle.api.provider.Provider
1112
import org.gradle.api.provider.ProviderFactory
1213
import org.gradle.api.tasks.Input
1314
import org.gradle.api.tasks.Internal
@@ -18,6 +19,7 @@ import org.gradle.kotlin.dsl.mapProperty
1819
import org.gradle.kotlin.dsl.newInstance
1920
import org.gradle.kotlin.dsl.property
2021
import org.gradle.process.ExecSpec
22+
import java.io.File
2123
import javax.inject.Inject
2224

2325
abstract class NpmTask : BaseTask() {

src/main/kotlin/com/github/gradle/node/pnpm/task/PnpmInstallTask.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,19 @@ abstract class PnpmInstallTask : PnpmTask() {
3131

3232
@PathSensitive(RELATIVE)
3333
@InputFile
34-
protected fun getPackageJsonFile(): Provider<File> {
35-
return projectFileIfExists("package.json")
34+
protected fun getPackageJsonFile(): File? {
35+
return projectFileIfExists("package.json").orNull
3636
}
3737

3838
@Optional
3939
@OutputFile
40-
protected fun getPnpmLockAsOutput(): Provider<File> {
41-
return projectFileIfExists("pnpm-lock.yaml")
40+
protected fun getPnpmLockAsOutput(): File? {
41+
return projectFileIfExists("pnpm-lock.yaml").orNull
4242
}
4343

44-
private fun projectFileIfExists(name: String): Provider<File> {
44+
private fun projectFileIfExists(name: String): Provider<File?> {
4545
return nodeExtension.nodeProjectDir.map { it.file(name).asFile }
46-
.flatMap { if (it.exists()) providers.provider { it } else providers.provider { null } }
46+
.flatMap { if (it.exists()) providers.provider { it } else providers.provider { null } }
4747
}
4848

4949
@Optional

src/main/kotlin/com/github/gradle/node/yarn/task/YarnInstallTask.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,24 @@ abstract class YarnInstallTask : YarnTask() {
2929
@PathSensitive(RELATIVE)
3030
@Optional
3131
@InputFile
32-
protected fun getPackageJsonFile(): Provider<File> {
33-
return projectFileIfExists("package.json")
32+
protected fun getPackageJsonFile(): File? {
33+
return projectFileIfExists("package.json").orNull
3434
}
3535

3636
@PathSensitive(RELATIVE)
3737
@Optional
3838
@InputFile
39-
protected fun getYarnLockFile(): Provider<File> {
40-
return projectFileIfExists("yarn.lock")
39+
protected fun getYarnLockFile(): File? {
40+
return projectFileIfExists("yarn.lock").orNull
4141
}
4242

4343
@Optional
4444
@OutputFile
45-
protected fun getYarnLockFileAsOutput(): Provider<File> {
46-
return projectFileIfExists("yarn.lock")
45+
protected fun getYarnLockFileAsOutput(): File? {
46+
return projectFileIfExists("yarn.lock").orNull
4747
}
4848

49-
private fun projectFileIfExists(name: String): Provider<File> {
49+
private fun projectFileIfExists(name: String): Provider<File?> {
5050
return nodeExtension.nodeProjectDir.map { it.file(name).asFile }
5151
.flatMap { if (it.exists()) providers.provider { it } else providers.provider { null } }
5252
}

src/test/groovy/com/github/gradle/node/npm/task/NpmInstall_integTest.groovy

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,6 @@ class NpmInstall_integTest extends AbstractIntegTest {
199199
gv << GRADLE_VERSIONS_UNDER_TEST
200200
}
201201
202-
// FIXME: https://github.com/node-gradle/gradle-node-plugin/issues/259
203-
@IgnoreIf({ gv >= GradleVersion.version("8.0-milestone-1") })
204202
def 'verify npm install inputs/outputs (#gv.version)'() {
205203
given:
206204
gradleVersion = gv
@@ -215,9 +213,10 @@ class NpmInstall_integTest extends AbstractIntegTest {
215213
}
216214

217215
def lock = file('package-lock.json')
216+
def installTask = tasks.named("npmInstall").get()
217+
def outputs = installTask.outputs.files
218+
def inputs = installTask.inputs.files
218219
task verifyIO {
219-
def outputs = tasks.named("npmInstall").get().outputs.files
220-
def inputs = tasks.named("npmInstall").get().inputs.files
221220
doLast {
222221
if (!outputs.contains(lock)) {
223222
throw new RuntimeException("package-lock.json is not in INSTALL'S outputs!")
@@ -241,8 +240,6 @@ class NpmInstall_integTest extends AbstractIntegTest {
241240
gv << GRADLE_VERSIONS_UNDER_TEST
242241
}
243242
244-
// FIXME: https://github.com/node-gradle/gradle-node-plugin/issues/259
245-
@IgnoreIf({ gv >= GradleVersion.version("8.0-milestone-1") })
246243
def 'verify npm ci inputs/outputs (#gv.version)'() {
247244
given:
248245
gradleVersion = gv
@@ -257,9 +254,10 @@ class NpmInstall_integTest extends AbstractIntegTest {
257254
}
258255

259256
def lock = file('package-lock.json')
257+
def installTask = tasks.named("npmInstall").get()
258+
def outputs = installTask.outputs.files
259+
def inputs = installTask.inputs.files
260260
task verifyIO {
261-
def outputs = tasks.named("npmInstall").get().outputs.files
262-
def inputs = tasks.named("npmInstall").get().inputs.files
263261
doLast {
264262
if (outputs.contains(lock)) {
265263
throw new RuntimeException("package-lock.json is in CI'S outputs!")

src/test/groovy/com/github/gradle/node/pnpm/task/PnpmInstall_integTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,10 @@ class PnpmInstall_integTest
136136
}
137137

138138
def lock = file('pnpm-lock.yaml')
139+
def installTask = tasks.named("pnpmInstall").get()
140+
def outputs = installTask.outputs.files
141+
def inputs = installTask.inputs.files
139142
task verifyIO {
140-
def outputs = tasks.named("pnpmInstall").get().outputs.files
141-
def inputs = tasks.named("pnpmInstall").get().inputs.files
142-
143143
doLast {
144144
if (!outputs.contains(lock)) {
145145
throw new RuntimeException("pnpm-lock.yaml is not in INSTALL'S outputs!")

0 commit comments

Comments
 (0)