diff --git a/.github/workflows/gradle-windows.yml.disabled b/.github/workflows/gradle-windows.yml.disabled new file mode 100644 index 000000000..ebed9d032 --- /dev/null +++ b/.github/workflows/gradle-windows.yml.disabled @@ -0,0 +1,34 @@ +name: Windows Minimal Tests for Gradle + +on: + push: + paths: + - 'native-gradle-plugin/**' + - 'samples/**' + - 'common/**' + pull_request: + paths: + - 'native-gradle-plugin/**' + - 'samples/**' + - 'common/**' + workflow_dispatch: + +jobs: + build: + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + - uses: graalvm/setup-graalvm@v1 + with: + version: 'dev' + java-version: '11' + components: 'native-image' + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Check and test the Gradle plugin + run: ./gradlew.bat :native-gradle-plugin:functionalTest --no-daemon --fail-fast + - name: Tests results + if: always() + uses: actions/upload-artifact@v2 + with: + name: windows-gradle-functional-tests-results + path: native-gradle-plugin/build/reports/tests/ diff --git a/.github/workflows/maven-windows.yml.disabled b/.github/workflows/maven-windows.yml.disabled new file mode 100644 index 000000000..0db0dfec4 --- /dev/null +++ b/.github/workflows/maven-windows.yml.disabled @@ -0,0 +1,34 @@ +name: Windows Minimal Tests for Maven + +on: + push: + paths: + - 'native-maven-plugin/**' + - 'samples/**' + - 'common/**' + pull_request: + paths: + - 'native-maven-plugin/**' + - 'samples/**' + - 'common/**' + workflow_dispatch: + +jobs: + build: + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + - uses: graalvm/setup-graalvm@v1 + with: + version: 'dev' + java-version: '11' + components: 'native-image' + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Check and test the Maven plugin + run: ./gradlew.bat :native-maven-plugin:functionalTest --no-daemon --fail-fast + - name: Tests results + if: always() + uses: actions/upload-artifact@v2 + with: + name: windows-maven-functional-tests-results + path: native-maven-plugin/build/reports/tests/ diff --git a/docs/src/docs/asciidoc/index.adoc b/docs/src/docs/asciidoc/index.adoc index 27bceb717..4b3a25795 100644 --- a/docs/src/docs/asciidoc/index.adoc +++ b/docs/src/docs/asciidoc/index.adoc @@ -22,6 +22,10 @@ If you are interested in contributing, please refer to our https://github.com/gr * Native testing support can now be explicitly disabled via `skipNativeTests`. - See <> for details. +==== Gradle plugin + +* Fixed `nativeRun` not working properly under Windows + === Release 0.9.9 ==== Gradle plugin diff --git a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java index a93b97ad7..84860bc1c 100644 --- a/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java +++ b/native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/tasks/BuildNativeImageTask.java @@ -73,6 +73,7 @@ import java.nio.file.Paths; import java.util.List; +import static org.graalvm.buildtools.utils.SharedConstants.EXECUTABLE_EXTENSION; import static org.graalvm.buildtools.utils.SharedConstants.GU_EXE; import static org.graalvm.buildtools.utils.SharedConstants.NATIVE_IMAGE_EXE; @@ -106,10 +107,15 @@ protected Provider getGraalVMHome() { } @Internal - public Provider getExecutableName() { + public Provider getExecutableShortName() { return getOptions().flatMap(NativeImageOptions::getImageName); } + @Internal + public Provider getExecutableName() { + return getOptions().flatMap(options -> options.getImageName().map(name -> name + EXECUTABLE_EXTENSION)); + } + @Internal public Provider getOutputFile() { return getOutputDirectory().map(dir -> dir.file(getExecutableName()).get()); @@ -150,7 +156,7 @@ private List buildActualCommandLineArgs() { return new NativeImageCommandLineProvider( getOptions(), getAgentEnabled(), - getExecutableName(), + getExecutableShortName(), // Can't use getOutputDirectory().map(...) because Gradle would complain that we use // a mapped value before the task was called, when we are actually calling it... getProviders().provider(() -> getOutputDirectory().getAsFile().get().getAbsolutePath()), diff --git a/native-gradle-plugin/src/testFixtures/groovy/org/graalvm/buildtools/gradle/fixtures/AbstractFunctionalTest.groovy b/native-gradle-plugin/src/testFixtures/groovy/org/graalvm/buildtools/gradle/fixtures/AbstractFunctionalTest.groovy index 1c029d638..2df145387 100644 --- a/native-gradle-plugin/src/testFixtures/groovy/org/graalvm/buildtools/gradle/fixtures/AbstractFunctionalTest.groovy +++ b/native-gradle-plugin/src/testFixtures/groovy/org/graalvm/buildtools/gradle/fixtures/AbstractFunctionalTest.groovy @@ -129,15 +129,15 @@ abstract class AbstractFunctionalTest extends Specification { } void outputContains(String text) { - assert output.contains(text) + assert output.contains(normalizeString(text)) } void outputDoesNotContain(String text) { - assert !output.contains(text) + assert !output.contains(normalizeString(text)) } void errorOutputContains(String text) { - assert errorOutput.contains(text) + assert errorOutput.contains(normalizeString(text)) } void tasks(@DelegatesTo(value = TaskExecutionGraph, strategy = Closure.DELEGATE_FIRST) Closure spec) { @@ -148,8 +148,8 @@ abstract class AbstractFunctionalTest extends Specification { } private void recordOutputs() { - output = outputWriter.toString() - errorOutput = errorOutputWriter.toString() + output = normalizeString(outputWriter.toString()) + errorOutput = normalizeString(errorOutputWriter.toString()) } private GradleRunner newRunner(String... args) { @@ -243,4 +243,8 @@ abstract class AbstractFunctionalTest extends Specification { } } } + + private static String normalizeString(String input) { + input.replace("\r\n", "\n") + } } diff --git a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy index 45fe7d941..99eb80d1b 100644 --- a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy +++ b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy @@ -131,14 +131,18 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { } boolean outputContains(String text) { - result.stdOut.contains(text) + normalizeString(result.stdOut).contains(normalizeString(text)) } boolean outputDoesNotContain(String text) { - !result.stdOut.contains(text) + !normalizeString(result.stdOut).contains(normalizeString(text)) } File file(String path) { testDirectory.resolve(path).toFile() } + + private static String normalizeString(String input) { + input.replace("\r\n", "\n") + } }