Skip to content

Commit 96501a7

Browse files
authored
Merge pull request #272 from node-gradle/configuration-cache-fix
Fix 8.1 configuration-cache support
2 parents 344638a + 01d8d9c commit 96501a7

26 files changed

+234
-96
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ jobs:
66
strategy:
77
matrix:
88
config:
9-
- {os: ubuntu-latest, params: "'-PtestedGradleVersion=6.6|7.0|7.5.1' pnpmTests" }
10-
- {os: ubuntu-latest, params: "'-PtestedGradleVersion=6.6|7.0|7.5.1' build" }
9+
- {os: ubuntu-latest, params: "'-PtestedGradleVersion=7.5.1|8.1.1' pnpmTests" }
10+
- {os: ubuntu-latest, params: "'-PtestedGradleVersion=7.5.1|8.1.1' build" }
1111
- {os: windows-latest, params: "build pnpmTests" }
1212
- {os: macos-latest, params: "build pnpmTests" }
1313
steps:

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Changelog
22

3-
## Version 3.x *(unreleased)*
3+
## Version 4.x *(unreleased)*
4+
5+
## Version 4.0.0 *(unreleased)*
6+
* Drop support for versions lower than Gradle 7.5.1
7+
* Rename `package.json` extension to `packageJson` [#232](https://github.com/node-gradle/gradle-node-plugin/issues/232)
48

59
## Version 3.6.0 *(2023-04-20)*
610
* Allow task rules to be disabled [#116](https://github.com/node-gradle/gradle-node-plugin/issues/116)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ with Gradle:
1818
The plugin is published in the [Gradle plugins portal](https://plugins.gradle.org/plugin/com.github.node-gradle.node)
1919
with the `com.github.node-gradle.node` identifier.
2020

21-
It supports Gradle 6.6+ and Node.js 10+, for 5.6.4 support use version 3.x
21+
It supports Gradle 7.5.1+ and Node.js 10+, for Gradle 5.6.4 support use version 3.x
2222

2323
## Documentation
2424

build.gradle.kts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ tasks.compileKotlin {
3434
kotlinOptions {
3535
apiVersion = "1.3"
3636
freeCompilerArgs = listOf("-Xno-optimized-callable-references")
37+
jvmTarget = compatibilityVersion.toString()
3738
}
3839
}
3940

@@ -138,13 +139,13 @@ tasks.register<Test>("testGradleNightlies") {
138139

139140
tasks.register("runParameterTest", JavaExec::class.java) {
140141
classpath = sourceSets["main"].runtimeClasspath
141-
main = "com.github.gradle.node.util.PlatformHelperKt"
142+
mainClass.set("com.github.gradle.node.util.PlatformHelperKt")
142143
}
143144

144145
tasks.jacocoTestReport {
145146
reports {
146-
xml.isEnabled = true
147-
html.isEnabled = true
147+
xml.required.set(true)
148+
html.required.set(true)
148149
}
149150
}
150151

gradle.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
org.gradle.unsafe.configuration-cache=true
2-
systemProp.gradle.enterprise.testretry.enabled=false
2+
systemProp.gradle.enterprise.testretry.enabled=false
3+
systemProp.org.gradle.unsafe.kotlin.assignment=true

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.github.gradle.node.pnpm.task.PnpmSetupTask
1010
import com.github.gradle.node.pnpm.task.PnpmTask
1111
import com.github.gradle.node.task.NodeSetupTask
1212
import com.github.gradle.node.task.NodeTask
13+
import com.github.gradle.node.util.NodeVersionSource
1314
import com.github.gradle.node.yarn.task.YarnInstallTask
1415
import com.github.gradle.node.yarn.task.YarnSetupTask
1516
import com.github.gradle.node.yarn.task.YarnTask
@@ -18,6 +19,7 @@ import org.gradle.api.Project
1819
import org.gradle.api.provider.Property
1920
import org.gradle.kotlin.dsl.create
2021
import org.gradle.kotlin.dsl.named
22+
import org.gradle.kotlin.dsl.of
2123
import org.gradle.kotlin.dsl.register
2224
import org.gradle.util.GradleVersion
2325
import java.io.File
@@ -26,6 +28,9 @@ class NodePlugin : Plugin<Project> {
2628
private lateinit var project: Project
2729

2830
override fun apply(project: Project) {
31+
if (GradleVersion.current() < MINIMAL_SUPPORTED_GRADLE_VERSION) {
32+
project.logger.error("This version of the plugin requires $MINIMAL_SUPPORTED_GRADLE_VERSION or newer.")
33+
}
2934
this.project = project
3035
val nodeExtension = NodeExtension.create(project)
3136
project.extensions.create<PackageJsonExtension>(PackageJsonExtension.NAME, project)
@@ -128,8 +133,11 @@ class NodePlugin : Plugin<Project> {
128133
}
129134

130135
private fun configureNodeSetupTask(nodeExtension: NodeExtension) {
136+
val versionSource = project.providers.of(NodeVersionSource::class) {
137+
parameters.nodeVersion.set(nodeExtension.version)
138+
}
131139
project.tasks.named<NodeSetupTask>(NodeSetupTask.NAME) {
132-
val nodeArchiveDependencyProvider = variantComputer.computeNodeArchiveDependency(nodeExtension)
140+
val nodeArchiveDependencyProvider = versionSource.get()
133141
val archiveFileProvider = nodeArchiveDependencyProvider
134142
.map { nodeArchiveDependency ->
135143
resolveNodeArchiveFile(nodeArchiveDependency)
@@ -146,6 +154,7 @@ class NodePlugin : Plugin<Project> {
146154
}
147155

148156
companion object {
157+
val MINIMAL_SUPPORTED_GRADLE_VERSION: GradleVersion = GradleVersion.version("7.5.1")
149158
const val NODE_GROUP = "Node"
150159
const val NPM_GROUP = "npm"
151160
const val PNPM_GROUP = "pnpm"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ open class PackageJsonExtension(project: Project) {
6060
/**
6161
* Extension name in Gradle
6262
*/
63-
const val NAME = "package.json"
63+
const val NAME = "packageJson"
6464
}
6565
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.github.gradle.node.exec.NodeExecConfiguration
66
import com.github.gradle.node.npm.exec.NpmExecRunner
77
import com.github.gradle.node.task.BaseTask
88
import com.github.gradle.node.task.NodeSetupTask
9-
import com.github.gradle.node.util.ProjectApiHelper
9+
import com.github.gradle.node.util.DefaultProjectApiHelper
1010
import org.gradle.api.model.ObjectFactory
1111
import org.gradle.api.provider.Provider
1212
import org.gradle.api.provider.ProviderFactory
@@ -15,6 +15,7 @@ import org.gradle.api.tasks.Internal
1515
import org.gradle.api.tasks.OutputDirectory
1616
import org.gradle.api.tasks.TaskAction
1717
import org.gradle.kotlin.dsl.listProperty
18+
import org.gradle.kotlin.dsl.newInstance
1819
import java.io.File
1920
import javax.inject.Inject
2021

@@ -33,7 +34,7 @@ abstract class NpmSetupTask : BaseTask() {
3334
protected val nodeExtension = NodeExtension[project]
3435

3536
@get:Internal
36-
val projectHelper = ProjectApiHelper.newInstance(project)
37+
val projectHelper = project.objects.newInstance<DefaultProjectApiHelper>()
3738

3839
@get:Input
3940
val args = objects.listProperty<String>()

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.github.gradle.node.NodePlugin
55
import com.github.gradle.node.exec.NodeExecConfiguration
66
import com.github.gradle.node.npm.exec.NpmExecRunner
77
import com.github.gradle.node.task.BaseTask
8-
import com.github.gradle.node.util.ProjectApiHelper
8+
import com.github.gradle.node.util.DefaultProjectApiHelper
99
import org.gradle.api.Action
1010
import org.gradle.api.model.ObjectFactory
1111
import org.gradle.api.provider.ProviderFactory
@@ -15,6 +15,7 @@ import org.gradle.api.tasks.Optional
1515
import org.gradle.api.tasks.TaskAction
1616
import org.gradle.kotlin.dsl.listProperty
1717
import org.gradle.kotlin.dsl.mapProperty
18+
import org.gradle.kotlin.dsl.newInstance
1819
import org.gradle.kotlin.dsl.property
1920
import org.gradle.process.ExecSpec
2021
import javax.inject.Inject
@@ -47,7 +48,7 @@ abstract class NpmTask : BaseTask() {
4748
val execOverrides = objects.property<Action<ExecSpec>>()
4849

4950
@get:Internal
50-
val projectHelper = ProjectApiHelper.newInstance(project)
51+
val projectHelper = project.objects.newInstance<DefaultProjectApiHelper>()
5152

5253
@get:Internal
5354
val nodeExtension = NodeExtension[project]

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.github.gradle.node.NodePlugin
55
import com.github.gradle.node.exec.NodeExecConfiguration
66
import com.github.gradle.node.npm.exec.NpmExecRunner
77
import com.github.gradle.node.task.BaseTask
8-
import com.github.gradle.node.util.ProjectApiHelper
8+
import com.github.gradle.node.util.DefaultProjectApiHelper
99
import org.gradle.api.Action
1010
import org.gradle.api.model.ObjectFactory
1111
import org.gradle.api.provider.ProviderFactory
@@ -14,6 +14,7 @@ import org.gradle.api.tasks.Internal
1414
import org.gradle.api.tasks.TaskAction
1515
import org.gradle.kotlin.dsl.listProperty
1616
import org.gradle.kotlin.dsl.mapProperty
17+
import org.gradle.kotlin.dsl.newInstance
1718
import org.gradle.kotlin.dsl.property
1819
import org.gradle.process.ExecSpec
1920
import javax.inject.Inject
@@ -45,7 +46,7 @@ abstract class NpxTask : BaseTask() {
4546
val execOverrides = objects.property<Action<ExecSpec>>()
4647

4748
@get:Internal
48-
val projectHelper = ProjectApiHelper.newInstance(project)
49+
val projectHelper = project.objects.newInstance<DefaultProjectApiHelper>()
4950

5051
@get:Internal
5152
val extension = NodeExtension[project]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ abstract class PnpmSetupTask : NpmSetupTask() {
2525

2626
@get:OutputDirectory
2727
val pnpmDir by lazy {
28-
val variantComputer = VariantComputer()
28+
val variantComputer = VariantComputer(platformHelper)
2929
variantComputer.computePnpmDir(nodeExtension)
3030
}
3131

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.github.gradle.node.NodePlugin
55
import com.github.gradle.node.exec.NodeExecConfiguration
66
import com.github.gradle.node.pnpm.exec.PnpmExecRunner
77
import com.github.gradle.node.task.BaseTask
8-
import com.github.gradle.node.util.ProjectApiHelper
8+
import com.github.gradle.node.util.DefaultProjectApiHelper
99
import org.gradle.api.Action
1010
import org.gradle.api.model.ObjectFactory
1111
import org.gradle.api.provider.ProviderFactory
@@ -15,6 +15,7 @@ import org.gradle.api.tasks.Optional
1515
import org.gradle.api.tasks.TaskAction
1616
import org.gradle.kotlin.dsl.listProperty
1717
import org.gradle.kotlin.dsl.mapProperty
18+
import org.gradle.kotlin.dsl.newInstance
1819
import org.gradle.kotlin.dsl.property
1920
import org.gradle.process.ExecSpec
2021
import javax.inject.Inject
@@ -47,7 +48,7 @@ abstract class PnpmTask : BaseTask() {
4748
val execOverrides = objects.property<Action<ExecSpec>>()
4849

4950
@get:Internal
50-
val projectHelper = ProjectApiHelper.newInstance(project)
51+
val projectHelper = project.objects.newInstance<DefaultProjectApiHelper>()
5152

5253
@get:Internal
5354
val nodeExtension = NodeExtension[project]
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
package com.github.gradle.node.task
22

3+
import com.github.gradle.node.util.GradleHelperExecution
34
import com.github.gradle.node.util.PlatformHelper
45
import com.github.gradle.node.variant.VariantComputer
56
import org.gradle.api.DefaultTask
67
import org.gradle.api.provider.Property
78
import org.gradle.api.tasks.Internal
9+
import org.gradle.process.ExecOperations
810
import org.gradle.process.ExecResult
11+
import javax.inject.Inject
912

1013
abstract class BaseTask : DefaultTask() {
1114

1215
@get:Internal
1316
var result: ExecResult? = null
1417

1518
@get:Internal
16-
var platformHelper = PlatformHelper.INSTANCE
19+
var platformHelper = PlatformHelper(GradleHelperExecution(execOperations))
20+
21+
@get:Inject
22+
abstract val execOperations: ExecOperations
1723

1824
@get:Internal
1925
internal val variantComputer by lazy {
2026
VariantComputer(platformHelper)
2127
}
2228

29+
2330
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ 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.ProjectApiHelper
5+
import com.github.gradle.node.util.DefaultProjectApiHelper
66
import org.gradle.api.file.Directory
77
import org.gradle.api.model.ObjectFactory
88
import org.gradle.api.provider.Provider
@@ -36,7 +36,7 @@ abstract class NodeSetupTask : BaseTask() {
3636
}
3737

3838
@get:Internal
39-
val projectHelper = ProjectApiHelper.newInstance(project)
39+
val projectHelper = project.objects.newInstance(DefaultProjectApiHelper::class.java)
4040

4141
init {
4242
group = NodePlugin.NODE_GROUP

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ 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.exec.NodeExecRunner
7-
import com.github.gradle.node.util.ProjectApiHelper
7+
import com.github.gradle.node.util.DefaultProjectApiHelper
88
import org.gradle.api.Action
99
import org.gradle.api.model.ObjectFactory
1010
import org.gradle.api.provider.ProviderFactory
1111
import org.gradle.api.tasks.*
1212
import org.gradle.api.tasks.PathSensitivity.RELATIVE
1313
import org.gradle.kotlin.dsl.listProperty
1414
import org.gradle.kotlin.dsl.mapProperty
15+
import org.gradle.kotlin.dsl.newInstance
1516
import org.gradle.kotlin.dsl.property
1617
import org.gradle.process.ExecSpec
1718
import javax.inject.Inject
@@ -67,7 +68,7 @@ abstract class NodeTask : BaseTask() {
6768
val execOverrides = objects.property<Action<ExecSpec>>()
6869

6970
@get:Internal
70-
val projectHelper = ProjectApiHelper.newInstance(project)
71+
val projectHelper = project.objects.newInstance<DefaultProjectApiHelper>()
7172

7273
/**
7374
* Overrides for [ExecSpec]

src/main/kotlin/com/github/gradle/node/util/KotlinUtils.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.github.gradle.node.util
22

33
import java.util.concurrent.TimeUnit
44

5+
56
/**
67
* Executes the given command and returns its output.
78
*
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.github.gradle.node.util
2+
3+
import com.github.gradle.node.variant.VariantComputer
4+
import org.gradle.api.provider.Property
5+
import org.gradle.api.provider.Provider
6+
import org.gradle.api.provider.ValueSource
7+
import org.gradle.api.provider.ValueSourceParameters
8+
import org.gradle.process.ExecOperations
9+
import javax.inject.Inject
10+
11+
abstract class NodeVersionSource: ValueSource<Provider<String>, NodeVersionSource.NodeVersionSourceParameters> {
12+
@get:Inject
13+
abstract val execOperations: ExecOperations
14+
15+
interface NodeVersionSourceParameters : ValueSourceParameters {
16+
val nodeVersion: Property<String>
17+
}
18+
19+
override fun obtain(): Provider<String> {
20+
val platformHelper = PlatformHelper(GradleHelperExecution(execOperations))
21+
val variantComputer = VariantComputer(platformHelper)
22+
return variantComputer.computeNodeArchiveDependency(parameters.nodeVersion)
23+
}
24+
}
25+

src/main/kotlin/com/github/gradle/node/util/PlatformHelper.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package com.github.gradle.node.util
22

3-
import java.util.*
43

5-
open class PlatformHelper {
4+
internal class DefaultHelperExecution : HelperExecution {
5+
override fun exec(command: String, vararg args: String, timeout: Long): String {
6+
return execute(command, *args, timeout = timeout)
7+
}
8+
}
9+
interface HelperExecution {
10+
fun exec(command: String, vararg args: String, timeout: Long = 60): String
11+
}
12+
open class PlatformHelper(private val execution: HelperExecution = DefaultHelperExecution()) {
613
open val osName: String by lazy {
714
val name = property("os.name").toLowerCase()
815
when {
@@ -37,12 +44,12 @@ open class PlatformHelper {
3744
private fun property(name: String): String {
3845
return getSystemProperty(name) ?:
3946
// Added so that we can test osArch on Windows and on non-arm systems
40-
if (name == "uname") execute("uname", "-m")
47+
if (name == "uname") execution.exec("uname", "-m")
4148
else error("Unable to find a value for property [$name].")
4249
}
4350

4451
open fun getSystemProperty(name: String): String? {
45-
return System.getProperty(name);
52+
return System.getProperty(name)
4653
}
4754

4855
companion object {
@@ -51,11 +58,11 @@ open class PlatformHelper {
5158
}
5259

5360
fun main(args: Array<String>) {
54-
println("Your os.name is: '${System.getProperty("os.name")}' and is parsed as: ${PlatformHelper.INSTANCE.osName}")
55-
println("Your os.arch is: '${System.getProperty("os.arch")}' and is parsed as: ${PlatformHelper.INSTANCE.osArch}")
61+
println("Your os.name is: '${System.getProperty("os.name")}' and is parsed as: '${PlatformHelper.INSTANCE.osName}'")
62+
println("Your os.arch is: '${System.getProperty("os.arch")}' and is parsed as: '${PlatformHelper.INSTANCE.osArch}'")
5663
if (PlatformHelper.INSTANCE.isWindows) {
5764
println("You're on windows (isWindows == true)")
5865
} else {
5966
println("You're not on windows (isWindows == false)")
6067
}
61-
}
68+
}

0 commit comments

Comments
 (0)