diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 2c145a97..90d5e3a0 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -32,4 +32,4 @@ jobs: cache-read-only: false - name: Execute Gradle build - run: ./gradlew build + run: ${{ matrix.platform == 'windows-latest' && '.\gradlew.bat' || './gradlew' }} build diff --git a/jib/src/functionalTest/kotlin/JavaagentJibExtensionFunctionalTest.kt b/jib/src/functionalTest/kotlin/JavaagentJibExtensionFunctionalTest.kt index dd5d4b59..c8aa543e 100644 --- a/jib/src/functionalTest/kotlin/JavaagentJibExtensionFunctionalTest.kt +++ b/jib/src/functionalTest/kotlin/JavaagentJibExtensionFunctionalTest.kt @@ -91,14 +91,16 @@ class JavaagentJibExtensionFunctionalTest { buildArgs: List, ): BuildResult { val helloWorldDir = File(functionalTestDir, "hello-world") - File("src/functionalTest/resources/hello-world-project/").copyRecursively(helloWorldDir) + File( + "src${File.separator}functionalTest${File.separator}resources${File.separator}hello-world-project", + ).copyRecursively(helloWorldDir) val simpleAgentTestDir = File(functionalTestDir, "simple-agent") val simpleAgentBuildScript = simpleAgentTestDir.resolve("build.gradle.kts") - File("../simple-agent/").copyRecursively(simpleAgentTestDir) + File("..${File.separator}simple-agent").copyRecursively(simpleAgentTestDir) // remove a constant from the above file simpleAgentBuildScript.writeText( simpleAgentBuildScript.readText().replace( - "id(\"com.ryandens.java-conventions\")\n", + "id(\"com.ryandens.java-conventions\")", "", ), ) diff --git a/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt b/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt index f8b98255..8aadb01d 100644 --- a/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt +++ b/plugin/src/functionalTest/kotlin/com/ryandens/javaagent/JavaagentPluginFunctionalTest.kt @@ -2,6 +2,7 @@ package com.ryandens.javaagent import org.apache.commons.text.StringEscapeUtils import org.gradle.internal.jvm.Jvm +import org.gradle.internal.os.OperatingSystem import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome @@ -25,6 +26,10 @@ class JavaagentPluginFunctionalTest { private lateinit var helloWorldDir: File + private val isWindows = OperatingSystem.current().isWindows + + private val scriptExtension = if (isWindows) ".bat" else "" + @BeforeTest fun beforeEach() { functionalTestDir = File("build", "functionalTest") @@ -127,21 +132,17 @@ class JavaagentPluginFunctionalTest { assertTrue(applicationDistribution.exists()) // verify the expected text was injected into the start script - val expectedDefaultJavaOpts = """ -DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/agent-libs/simple-agent.jar -Xmx256m" -""" val applicationDistributionScript = - File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world") - assertTrue(applicationDistributionScript.readText().contains(expectedDefaultJavaOpts)) - - /* - * TODO add support for windows - * val expectedWindowsDefaultJvmOpts = """ -DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m" + File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world$scriptExtension") + if (isWindows) { + val expectedWindowsDefaultJvmOpts = """set DEFAULT_JVM_OPTS="-javaagent:%APP_HOME%\agent-libs\simple-agent.jar" "-Xmx256m"""" + assertTrue(applicationDistributionScript.readText().contains(expectedWindowsDefaultJvmOpts)) + } else { + val expectedDefaultJavaOpts = """ +DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/agent-libs/simple-agent.jar -Xmx256m" """ - val applicationDistributionScript = File(functionalTestDir, "hello-world/build/scripts/hello-world.bat") - assertTrue(applicationDistributionScript.readText().contains(expectedWindowsDefaultJvmOpts)) - */ + assertTrue(applicationDistributionScript.readText().contains(expectedDefaultJavaOpts)) + } // verify the agent was added to the /lib/ dir of the distribution assertTrue( @@ -194,8 +195,12 @@ DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m" assertTrue(applicationDistribution.exists()) val applicationDistributionScript = - File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world") - assertTrue(applicationDistributionScript.readText().contains("""DEFAULT_JVM_OPTS="-Xmx256m""")) + File(functionalTestDir, "hello-world${File.separator}build${File.separator}scripts${File.separator}hello-world$scriptExtension") + if (isWindows) { + assertTrue(applicationDistributionScript.readText().contains("""set DEFAULT_JVM_OPTS="-Xmx256m"""")) + } else { + assertTrue(applicationDistributionScript.readText().contains("""DEFAULT_JVM_OPTS="-Xmx256m""")) + } assertFalse( File( @@ -227,7 +232,7 @@ DEFAULT_JVM_OPTS="-javaagent:${"$"}APP_HOME/lib/simple-agent.jar -Xmx256m" """, ) - val commandLine = StringEscapeUtils.escapeJava(""".${File.separator}hello-world""") + val commandLine = StringEscapeUtils.escapeJava(""".${File.separator}hello-world$scriptExtension""") val javaHome = StringEscapeUtils.escapeJava(Jvm.current().getJavaHome().toString()) helloWorldDir.resolve("build.gradle").writeText( """ diff --git a/plugin/src/main/kotlin/com/ryandens/javaagent/JavaagentAwareStartScriptGenerator.kt b/plugin/src/main/kotlin/com/ryandens/javaagent/JavaagentAwareStartScriptGenerator.kt index 5658eaed..71d9e1bb 100644 --- a/plugin/src/main/kotlin/com/ryandens/javaagent/JavaagentAwareStartScriptGenerator.kt +++ b/plugin/src/main/kotlin/com/ryandens/javaagent/JavaagentAwareStartScriptGenerator.kt @@ -23,7 +23,7 @@ class JavaagentAwareStartScriptGenerator( details: JavaAppStartScriptGenerationDetails, destination: Writer, ) { - inner.generateScript(details, Fake(destination, javaagentConfiguration, platform.pathSeparator)) + inner.generateScript(details, Fake(destination, javaagentConfiguration, platform.pathSeparator, platform.appHomeVar)) } private class FakeTransformer( @@ -47,6 +47,7 @@ class JavaagentAwareStartScriptGenerator( private val inner: Writer, private val javaagentFiles: Provider>, private val pathSeparator: String, + private val appHomeVar: String, ) : Writer() { override fun close() { inner.close() @@ -79,7 +80,7 @@ class JavaagentAwareStartScriptGenerator( "-javaagent:COM_RYANDENS_JAVAAGENTS_PLACEHOLDER.jar", javaagentFiles.get().joinToString( " ", - ) { jar -> "-javaagent:\$APP_HOME${pathSeparator}agent-libs${pathSeparator}${jar.name}" }, + ) { jar -> "-javaagent:${appHomeVar}${pathSeparator}agent-libs${pathSeparator}${jar.name}" }, ) } super.write(replace) diff --git a/plugin/src/main/kotlin/com/ryandens/javaagent/Platform.kt b/plugin/src/main/kotlin/com/ryandens/javaagent/Platform.kt index 3bd7983b..5df2a19f 100644 --- a/plugin/src/main/kotlin/com/ryandens/javaagent/Platform.kt +++ b/plugin/src/main/kotlin/com/ryandens/javaagent/Platform.kt @@ -8,9 +8,10 @@ import org.gradle.api.resources.TextResource enum class Platform( val lineSeparator: String, val pathSeparator: String, + val appHomeVar: String, val templateBindingFactory: StartScriptTemplateBindingFactory, val template: TextResource, ) { - UNIX("\n", "/", StartScriptTemplateBindingFactory.unix(), UnixStartScriptGenerator().template), - WINDOWS("\r\n", "\\", StartScriptTemplateBindingFactory.windows(), WindowsStartScriptGenerator().template), + UNIX("\n", "/", "\$APP_HOME", StartScriptTemplateBindingFactory.unix(), UnixStartScriptGenerator().template), + WINDOWS("\r\n", "\\", "%APP_HOME%", StartScriptTemplateBindingFactory.windows(), WindowsStartScriptGenerator().template), }