Skip to content

Commit bbd601e

Browse files
authored
Merge pull request #211 from nhoughto/gradle-7.4-configcache
Support Gradle 7.4 configuration caching
2 parents 19ec378 + de5cb8f commit bbd601e

29 files changed

+151
-107
lines changed

.github/workflows/build.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ jobs:
66
strategy:
77
matrix:
88
config:
9-
- {os: ubuntu-latest, params: "-PtestAllSupportedGradleVersions=true -PtestProxyIntegrationTests=false" }
10-
- {os: windows-latest, params: "-PtestProxyIntegrationTests=false" }
11-
- {os: macos-latest, params: "-PtestProxyIntegrationTests=false" }
9+
- {os: ubuntu-latest, params: "-PtestAllSupportedGradleVersions=true" }
10+
- {os: windows-latest, params: "" }
11+
- {os: macos-latest, params: "" }
1212
steps:
1313
- name: Checkout Source Code
1414
uses: actions/checkout@v2

build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ tasks.test {
7474
)
7575
systemProperty("testMinimumCurrentGradleVersion", project.properties["testMinimumCurrentGradleVersion"] ?: "false")
7676
systemProperty("testCurrentGradleVersion", project.properties["testCurrentGradleVersion"] ?: "true")
77-
systemProperty("testProxyIntegrationTests", project.properties["testProxyIntegrationTests"] ?: "true")
7877

7978
val processorsCount = Runtime.getRuntime().availableProcessors()
8079
maxParallelForks = if (processorsCount > 2) processorsCount.div(2) else processorsCount

src/main/kotlin/com/github/gradle/node/NodePlugin.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,12 @@ class NodePlugin : Plugin<Project> {
107107
}
108108

109109
private fun configureNodeSetupTask(nodeExtension: NodeExtension) {
110-
val variantComputer = VariantComputer()
111-
val nodeArchiveDependencyProvider = variantComputer.computeNodeArchiveDependency(nodeExtension)
112-
val archiveFileProvider = nodeArchiveDependencyProvider
113-
.map { nodeArchiveDependency ->
114-
resolveNodeArchiveFile(nodeArchiveDependency)
115-
}
116110
project.tasks.named<NodeSetupTask>(NodeSetupTask.NAME) {
111+
val nodeArchiveDependencyProvider = variantComputer.computeNodeArchiveDependency(nodeExtension)
112+
val archiveFileProvider = nodeArchiveDependencyProvider
113+
.map { nodeArchiveDependency ->
114+
resolveNodeArchiveFile(nodeArchiveDependency)
115+
}
117116
nodeArchiveFile.set(project.layout.file(archiveFileProvider))
118117
}
119118
}

src/main/kotlin/com/github/gradle/node/exec/NodeExecRunner.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ import org.gradle.api.provider.Provider
1010
/**
1111
* This function is responsible for setting up the configuration used when running the tasks.
1212
*/
13-
fun buildExecConfiguration(nodeExtension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration):
13+
fun buildExecConfiguration(nodeExtension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration, variantComputer: VariantComputer):
1414
Provider<ExecConfiguration> {
15-
val variantComputer = VariantComputer()
1615
val nodeDirProvider = variantComputer.computeNodeDir(nodeExtension)
1716
val nodeBinDirProvider = variantComputer.computeNodeBinDir(nodeDirProvider)
1817
val executableProvider = variantComputer.computeNodeExec(nodeExtension, nodeBinDirProvider)
@@ -34,8 +33,8 @@ fun computeAdditionalBinPath(nodeExtension: NodeExtension, nodeBinDirProvider: P
3433
}
3534

3635
class NodeExecRunner {
37-
fun execute(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration) {
38-
val execConfiguration = buildExecConfiguration(extension, nodeExecConfiguration).get()
36+
fun execute(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration, variantComputer: VariantComputer) {
37+
val execConfiguration = buildExecConfiguration(extension, nodeExecConfiguration, variantComputer).get()
3938
val execRunner = ExecRunner()
4039
execRunner.execute(project, extension, execConfiguration)
4140
}

src/main/kotlin/com/github/gradle/node/npm/exec/NpmExecRunner.kt

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@ abstract class NpmExecRunner {
1818
@get:Inject
1919
abstract val providers: ProviderFactory
2020

21-
private val variantComputer = VariantComputer()
22-
23-
fun executeNpmCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration) {
21+
fun executeNpmCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration, variants: VariantComputer) {
2422
val npmExecConfiguration = NpmExecConfiguration("npm"
2523
) { variantComputer, nodeExtension, npmBinDir -> variantComputer.computeNpmExec(nodeExtension, npmBinDir) }
2624
executeCommand(project, extension, addProxyEnvironmentVariables(extension, nodeExecConfiguration),
27-
npmExecConfiguration)
25+
npmExecConfiguration,
26+
variants)
2827
}
2928

3029
private fun addProxyEnvironmentVariables(nodeExtension: NodeExtension,
@@ -40,25 +39,27 @@ abstract class NpmExecRunner {
4039
return nodeExecConfiguration
4140
}
4241

43-
fun executeNpxCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration) {
42+
fun executeNpxCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration, variants: VariantComputer) {
4443
val npxExecConfiguration = NpmExecConfiguration("npx") { variantComputer, nodeExtension, npmBinDir ->
4544
variantComputer.computeNpxExec(nodeExtension, npmBinDir)
4645
}
47-
executeCommand(project, extension, nodeExecConfiguration, npxExecConfiguration)
46+
executeCommand(project, extension, nodeExecConfiguration, npxExecConfiguration, variants)
4847
}
4948

5049
private fun executeCommand(project: ProjectApiHelper, extension: NodeExtension, nodeExecConfiguration: NodeExecConfiguration,
51-
npmExecConfiguration: NpmExecConfiguration) {
50+
npmExecConfiguration: NpmExecConfiguration,
51+
variantComputer: VariantComputer) {
5252
val execConfiguration =
53-
computeExecConfiguration(extension, npmExecConfiguration, nodeExecConfiguration).get()
53+
computeExecConfiguration(extension, npmExecConfiguration, nodeExecConfiguration, variantComputer).get()
5454
val execRunner = ExecRunner()
5555
execRunner.execute(project, extension, execConfiguration)
5656
}
5757

58-
private fun computeExecConfiguration(extension: NodeExtension, npmExecConfiguration: NpmExecConfiguration,
59-
nodeExecConfiguration: NodeExecConfiguration): Provider<ExecConfiguration> {
60-
val additionalBinPathProvider = computeAdditionalBinPath(extension)
61-
val executableAndScriptProvider = computeExecutable(extension, npmExecConfiguration)
58+
private fun computeExecConfiguration(extension: NodeExtension, npmExecConfiguration: NpmExecConfiguration,
59+
nodeExecConfiguration: NodeExecConfiguration,
60+
variantComputer: VariantComputer): Provider<ExecConfiguration> {
61+
val additionalBinPathProvider = computeAdditionalBinPath(extension, variantComputer)
62+
val executableAndScriptProvider = computeExecutable(extension, npmExecConfiguration, variantComputer)
6263
return zip(additionalBinPathProvider, executableAndScriptProvider)
6364
.map { (additionalBinPath, executableAndScript) ->
6465
val argsPrefix =
@@ -70,7 +71,7 @@ abstract class NpmExecRunner {
7071
}
7172
}
7273

73-
private fun computeExecutable(nodeExtension: NodeExtension, npmExecConfiguration: NpmExecConfiguration):
74+
private fun computeExecutable(nodeExtension: NodeExtension, npmExecConfiguration: NpmExecConfiguration, variantComputer: VariantComputer):
7475
Provider<ExecutableAndScript> {
7576
val nodeDirProvider = variantComputer.computeNodeDir(nodeExtension)
7677
val npmDirProvider = variantComputer.computeNpmDir(nodeExtension, nodeDirProvider)
@@ -103,7 +104,7 @@ abstract class NpmExecRunner {
103104
val script: String? = null
104105
)
105106

106-
private fun computeAdditionalBinPath(nodeExtension: NodeExtension): Provider<List<String>> {
107+
private fun computeAdditionalBinPath(nodeExtension: NodeExtension, variantComputer: VariantComputer): Provider<List<String>> {
107108
return nodeExtension.download.flatMap { download ->
108109
if (!download) {
109110
providers.provider { listOf<String>() }

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ import com.github.gradle.node.NodeExtension
44
import com.github.gradle.node.NodePlugin
55
import com.github.gradle.node.exec.NodeExecConfiguration
66
import com.github.gradle.node.npm.exec.NpmExecRunner
7+
import com.github.gradle.node.task.BaseTask
78
import com.github.gradle.node.task.NodeSetupTask
89
import com.github.gradle.node.util.ProjectApiHelper
9-
import com.github.gradle.node.variant.VariantComputer
10-
import org.gradle.api.DefaultTask
1110
import org.gradle.api.model.ObjectFactory
1211
import org.gradle.api.provider.Provider
1312
import org.gradle.api.provider.ProviderFactory
@@ -22,7 +21,7 @@ import javax.inject.Inject
2221
/**
2322
* npm install that only gets executed if gradle decides so.
2423
*/
25-
abstract class NpmSetupTask : DefaultTask() {
24+
abstract class NpmSetupTask : BaseTask() {
2625

2726
@get:Inject
2827
abstract val objects: ObjectFactory
@@ -44,7 +43,6 @@ abstract class NpmSetupTask : DefaultTask() {
4443

4544
@get:OutputDirectory
4645
val npmDir by lazy {
47-
val variantComputer = VariantComputer()
4846
val nodeDir = variantComputer.computeNodeDir(nodeExtension)
4947
variantComputer.computeNpmDir(nodeExtension, nodeDir)
5048
}
@@ -73,7 +71,7 @@ abstract class NpmSetupTask : DefaultTask() {
7371
val command = computeCommand()
7472
val nodeExecConfiguration = NodeExecConfiguration(command)
7573
val npmExecRunner = objects.newInstance(NpmExecRunner::class.java)
76-
npmExecRunner.executeNpmCommand(projectHelper, nodeExtension, nodeExecConfiguration)
74+
npmExecRunner.executeNpmCommand(projectHelper, nodeExtension, nodeExecConfiguration, variantComputer)
7775
}
7876

7977
protected open fun computeCommand(): List<String> {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import com.github.gradle.node.NodeExtension
44
import com.github.gradle.node.NodePlugin
55
import com.github.gradle.node.exec.NodeExecConfiguration
66
import com.github.gradle.node.npm.exec.NpmExecRunner
7+
import com.github.gradle.node.task.BaseTask
78
import com.github.gradle.node.util.ProjectApiHelper
89
import org.gradle.api.Action
9-
import org.gradle.api.DefaultTask
1010
import org.gradle.api.model.ObjectFactory
1111
import org.gradle.api.provider.ProviderFactory
1212
import org.gradle.api.tasks.Input
@@ -19,7 +19,7 @@ import org.gradle.kotlin.dsl.property
1919
import org.gradle.process.ExecSpec
2020
import javax.inject.Inject
2121

22-
abstract class NpmTask : DefaultTask() {
22+
abstract class NpmTask : BaseTask() {
2323
@get:Inject
2424
abstract val objects: ObjectFactory
2525

@@ -70,6 +70,6 @@ abstract class NpmTask : DefaultTask() {
7070
NodeExecConfiguration(command, environment.get(), workingDir.asFile.orNull, ignoreExitValue.get(),
7171
execOverrides.orNull)
7272
val npmExecRunner = objects.newInstance(NpmExecRunner::class.java)
73-
npmExecRunner.executeNpmCommand(projectHelper, nodeExtension, nodeExecConfiguration)
73+
npmExecRunner.executeNpmCommand(projectHelper, nodeExtension, nodeExecConfiguration, variantComputer)
7474
}
7575
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import com.github.gradle.node.NodeExtension
44
import com.github.gradle.node.NodePlugin
55
import com.github.gradle.node.exec.NodeExecConfiguration
66
import com.github.gradle.node.npm.exec.NpmExecRunner
7+
import com.github.gradle.node.task.BaseTask
78
import com.github.gradle.node.util.ProjectApiHelper
89
import org.gradle.api.Action
9-
import org.gradle.api.DefaultTask
1010
import org.gradle.api.model.ObjectFactory
1111
import org.gradle.api.provider.ProviderFactory
1212
import org.gradle.api.tasks.Input
@@ -18,7 +18,7 @@ import org.gradle.kotlin.dsl.property
1818
import org.gradle.process.ExecSpec
1919
import javax.inject.Inject
2020

21-
abstract class NpxTask : DefaultTask() {
21+
abstract class NpxTask : BaseTask() {
2222

2323
@get:Inject
2424
abstract val objects: ObjectFactory
@@ -70,6 +70,6 @@ abstract class NpxTask : DefaultTask() {
7070
NodeExecConfiguration(fullCommand, environment.get(), workingDir.asFile.orNull,
7171
ignoreExitValue.get(), execOverrides.orNull)
7272
val npmExecRunner = objects.newInstance(NpmExecRunner::class.java)
73-
npmExecRunner.executeNpxCommand(projectHelper, extension, nodeExecConfiguration)
73+
npmExecRunner.executeNpxCommand(projectHelper, extension, nodeExecConfiguration, variantComputer)
7474
}
7575
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.github.gradle.node.task
2+
3+
import com.github.gradle.node.util.PlatformHelper
4+
import com.github.gradle.node.variant.VariantComputer
5+
import org.gradle.api.DefaultTask
6+
import org.gradle.api.tasks.Internal
7+
8+
abstract class BaseTask : DefaultTask() {
9+
10+
@get:Internal
11+
var platformHelper = PlatformHelper.INSTANCE
12+
13+
@get:Internal
14+
internal val variantComputer by lazy {
15+
VariantComputer(platformHelper)
16+
}
17+
18+
}

src/main/kotlin/com/github/gradle/node/task/NodeSetupTask.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package com.github.gradle.node.task
22

33
import com.github.gradle.node.NodeExtension
44
import com.github.gradle.node.NodePlugin
5-
import com.github.gradle.node.util.PlatformHelper
65
import com.github.gradle.node.util.ProjectApiHelper
76
import com.github.gradle.node.variant.VariantComputer
8-
import org.gradle.api.DefaultTask
97
import org.gradle.api.model.ObjectFactory
108
import org.gradle.api.provider.ProviderFactory
119
import org.gradle.api.tasks.*
@@ -14,15 +12,14 @@ import java.nio.file.Files
1412
import java.nio.file.Paths
1513
import javax.inject.Inject
1614

17-
abstract class NodeSetupTask : DefaultTask() {
15+
abstract class NodeSetupTask : BaseTask() {
1816

1917
@get:Inject
2018
abstract val objects: ObjectFactory
2119

2220
@get:Inject
2321
abstract val providers: ProviderFactory
2422

25-
private val variantComputer = VariantComputer()
2623
private val nodeExtension = NodeExtension[project]
2724

2825
@get:Input
@@ -90,7 +87,7 @@ abstract class NodeSetupTask : DefaultTask() {
9087
}
9188

9289
private fun setExecutableFlag() {
93-
if (!PlatformHelper.INSTANCE.isWindows) {
90+
if (!platformHelper.isWindows) {
9491
val nodeDirProvider = variantComputer.computeNodeDir(nodeExtension)
9592
val nodeBinDirProvider = variantComputer.computeNodeBinDir(nodeDirProvider)
9693
val nodeExecProvider = variantComputer.computeNodeExec(nodeExtension, nodeBinDirProvider)

0 commit comments

Comments
 (0)