From 0d4b9f4ba6fabea1a2f42ffd64ad4e1785c8c908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:03 +0200 Subject: [PATCH 1/9] Fix output and exit code for Java tests This fixes the following issues: * run_java_unit_tests.js always has exit code of 0 thus never failing the npm tests. * "Tests completed successfully" is printed after failing to create the Gradle wrapper and never running the tests. * Gradle errors are printed twice --- test/run_java_unit_tests.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/run_java_unit_tests.js b/test/run_java_unit_tests.js index 9e585a66..f26641c1 100644 --- a/test/run_java_unit_tests.js +++ b/test/run_java_unit_tests.js @@ -37,11 +37,15 @@ if (!needs_gradlew_built) { } needs_gradlew_built.then(function () { + console.log('Gradle wrapper is ready. Running tests now.'); return superspawn.spawn(path.join(__dirname, 'gradlew'), ['test'], {stdio: 'inherit'}); -}, function (err) { - console.error('There was an error building the gradlew file:', err); }).then(function () { console.log('Tests completed successfully.'); -}).fail(function (err) { - console.error('Tests failed!', err); +}); + +process.on('unhandledRejection', err => { + // If err has a stderr property, we have seen the message already + if (!('stderr' in err)) console.error(err.message); + console.error('JAVA UNIT TESTS FAILED!'); + process.exitCode = err.code || 1; }); From a254cfc84116231788e6c0b7bcb5f907dc78073f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:04 +0200 Subject: [PATCH 2/9] Fix Java tests for older Gradle versions Before this, Gradle 4.4 was required to build the Gradle wrapper and thus run the Java tests. This was because of all the stuff that had to be configured when running the wrapper task using the build.gradle file. Now we use a config file that only specifies the required Gradle version and nothing else to run the wrapper task. This allows tests to be run with Gradle versions beginning with 2. --- test/run_java_unit_tests.js | 2 +- test/wrapper.gradle | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 test/wrapper.gradle diff --git a/test/run_java_unit_tests.js b/test/run_java_unit_tests.js index f26641c1..a4c9c165 100644 --- a/test/run_java_unit_tests.js +++ b/test/run_java_unit_tests.js @@ -26,7 +26,7 @@ var superspawn = require('cordova-common').superspawn; // First we make sure the gradlew helper file is built and ready. var GradleBuilder = require('../bin/templates/cordova/lib/builders/GradleBuilder'); var builder = new GradleBuilder(__dirname); -var needs_gradlew_built = builder.runGradleWrapper('gradle', 'build.gradle'); +var needs_gradlew_built = builder.runGradleWrapper('gradle'); if (!needs_gradlew_built) { // Due to interface of gradle builder, if the gradlew file already exists, `runGradleWrapper` returns undefined. diff --git a/test/wrapper.gradle b/test/wrapper.gradle new file mode 100644 index 00000000..11514912 --- /dev/null +++ b/test/wrapper.gradle @@ -0,0 +1,3 @@ +wrapper { + gradleVersion = '4.4.1' +} From 88c25a6a6acfef294230fd1cb0ac3c2d07f37c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:05 +0200 Subject: [PATCH 3/9] Quick fix for Java tests on Travis CI This accepts any unaccepted Android SDK licenses in Travis. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index e0b89287..029c10ff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,7 @@ before_install: - node --version - gradle --version - echo y | android --silent update sdk --no-ui --all --filter platform-tools,tools,build-tools-26.0.2,android-26,android-25,extra-google-m2repository,extra-android-m2repository + - yes | sdkmanager --update android: components: - tools From 83ad6467343d909579308c6ceab89a850f0b9153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:07 +0200 Subject: [PATCH 4/9] Fix Java tests on AppVeyor by disabling Gradle daemon --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 92b5ad93..7aa87f95 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,6 +3,8 @@ image: environment: ANDROID_HOME: "C:\\android" + # If the gradle daemon is used, the build hangs after generating the wrapper + GRADLE_OPTS: -Dorg.gradle.daemon=false matrix: - nodejs_version: "4" - nodejs_version: "6" From 032d1fa9cb7e52aea06825f6270018b2ed86c3ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:08 +0200 Subject: [PATCH 5/9] Cleanup Java tests runner * Print Gradle version used for Java tests during build * Allow Java tests to be run from any directory * Simplify Promise wrapping in Java tests runner * Minor improvements --- package.json | 2 +- test/run_java_unit_tests.js | 32 +++++++++++++++----------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index ba3d01b2..f9b55c58 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "unit-tests": "jasmine --config=spec/unit/jasmine.json", "cover": "istanbul cover --root bin --print detail jasmine -- --config=spec/unit/jasmine.json", "e2e-tests": "jasmine --config=spec/e2e/jasmine.json", - "java-unit-tests": "cd test && node run_java_unit_tests.js && cd ..", + "java-unit-tests": "node test/run_java_unit_tests.js", "eslint": "eslint bin spec test" }, "author": "Apache Software Foundation", diff --git a/test/run_java_unit_tests.js b/test/run_java_unit_tests.js index a4c9c165..8f8a14b6 100644 --- a/test/run_java_unit_tests.js +++ b/test/run_java_unit_tests.js @@ -22,26 +22,16 @@ var Q = require('q'); var path = require('path'); var superspawn = require('cordova-common').superspawn; - -// First we make sure the gradlew helper file is built and ready. var GradleBuilder = require('../bin/templates/cordova/lib/builders/GradleBuilder'); -var builder = new GradleBuilder(__dirname); -var needs_gradlew_built = builder.runGradleWrapper('gradle'); -if (!needs_gradlew_built) { - // Due to interface of gradle builder, if the gradlew file already exists, `runGradleWrapper` returns undefined. - // In this case, we will fill the gap and create a resolved promise here now, this way the next bit of code - // will jump straight to running the tests - // TODO: maybe this should be done in GradleBuilder `runGradleWrapper` method instead? - needs_gradlew_built = Q.fcall(function () { return true; }); -} +Q.resolve() + .then(_ => console.log('Preparing Gradle wrapper for Java unit tests.')) + .then(_ => new GradleBuilder(__dirname).runGradleWrapper('gradle')) + .then(_ => gradlew('--version')) -needs_gradlew_built.then(function () { - console.log('Gradle wrapper is ready. Running tests now.'); - return superspawn.spawn(path.join(__dirname, 'gradlew'), ['test'], {stdio: 'inherit'}); -}).then(function () { - console.log('Tests completed successfully.'); -}); + .then(_ => console.log('Gradle wrapper is ready. Running tests now.')) + .then(_ => gradlew('test')) + .then(_ => console.log('Java unit tests completed successfully.')); process.on('unhandledRejection', err => { // If err has a stderr property, we have seen the message already @@ -49,3 +39,11 @@ process.on('unhandledRejection', err => { console.error('JAVA UNIT TESTS FAILED!'); process.exitCode = err.code || 1; }); + +function gradlew () { + const wrapperPath = path.join(__dirname, 'gradlew'); + return superspawn.spawn(wrapperPath, Array.from(arguments), { + stdio: 'inherit', + cwd: __dirname + }); +} From 828b5f053a43c3fe5b542cc47a8bb76d552ef101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:09 +0200 Subject: [PATCH 6/9] Cleanup CI configurations * Use latest Android SDK tools for easier license handling * Reduce installed SDK components to minimum (tools & build tools) * Reduce unnecessary PATH manipulation * Use preinstalled Gradle on Travis CI * Improve Gradle output on Travis CI * Use default image on AppVeyor * Improve formatting & other minor tweaks --- .travis.yml | 34 ++++++++++++++++------------- appveyor.yml | 60 ++++++++++++++++++++++++---------------------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/.travis.yml b/.travis.yml index 029c10ff..d83ed896 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,28 +2,32 @@ language: android sudo: false jdk: - oraclejdk8 -env: - global: - - ANDROID_TOOLS=${ANDROID_HOME}/tools -before_install: - - nvm install 6 - # ensure at least gradle 3.3 is in place. - - wget http://services.gradle.org/distributions/gradle-3.3-bin.zip - - unzip gradle-3.3-bin.zip - - export GRADLE_HOME=$PWD/gradle-3.3 - - export PATH=${GRADLE_HOME}/bin:${ANDROID_HOME}:${ANDROID_HOME}/emulator:${ANDROID_TOOLS}:${ANDROID_TOOLS}/bin:${ANDROID_HOME}/platform-tools:$PATH - - node --version - - gradle --version - - echo y | android --silent update sdk --no-ui --all --filter platform-tools,tools,build-tools-26.0.2,android-26,android-25,extra-google-m2repository,extra-android-m2repository - - yes | sdkmanager --update + android: components: - - tools + - build-tools-26.0.2 +env: + global: + # Keep gradle from crapping all over the log + - TERM=dumb + install: + # Install a sdkmanager version that supports the --licenses switch and + # accept any Android SDK licenses. The output redirection prevents us from + # hitting the travis log size limit of 4MB which would fail the build. + - yes | sdkmanager tools > /dev/null + - yes | sdkmanager --licenses > /dev/null + + - nvm install 6 - npm install - npm install -g codecov + script: + - gradle --version + - node --version + - npm --version - npm test - npm run cover + after_script: - codecov diff --git a/appveyor.yml b/appveyor.yml index 7aa87f95..853e7d3f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,40 +1,36 @@ -image: - - Previous Visual Studio 2015 - environment: - ANDROID_HOME: "C:\\android" - # If the gradle daemon is used, the build hangs after generating the wrapper - GRADLE_OPTS: -Dorg.gradle.daemon=false - matrix: - - nodejs_version: "4" - - nodejs_version: "6" - - nodejs_version: "8" + ANDROID_HOME: "C:\\android" -init: - - mkdir "%ANDROID_HOME% - - cd "%ANDROID_HOME%" - - appveyor DownloadFile "https://dl.google.com/android/repository/tools_r25.2.3-windows.zip" - - 7z x "tools_r25.2.3-windows.zip" > nul - - cd "C:\projects\cordova-android" + # If the gradle daemon is used, the build hangs after generating the wrapper + GRADLE_OPTS: -Dorg.gradle.daemon=false + + # URL for SDK Tools, Revision 26.1.1 (September 2017) + SDK_TOOLS_URL: https://dl.google.com/android/repository/sdk-tools-windows-3859397.zip + + matrix: + - nodejs_version: 4 + - nodejs_version: 6 + - nodejs_version: 8 install: - - choco install gradle -version 3.4.1 - - gradle -version - - echo y | "%ANDROID_HOME%\tools\android.bat" --silent update sdk --no-ui --all --filter platform-tools,tools,build-tools-26.0.2,android-26,android-25,extra-google-m2repository,extra-android-m2repository - # on windows we need to accept sublicenses for the new tooling, wee. 30 is an arbitrary number, - # but should be the maximum number of licenses we explicitly need to type "Y ENTER" for. - # also, the sdkmanager in all its glory leaks a bit of output to stderr, and powershell - # and appveyor interpret that as errors, and blows up. so, when piping in our "Y ENTER" - # responses, we invoke cmd so we can redirect stderr to stdout, and tell it to --update itself. - - ps: for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | cmd /c 'C:\android\tools\bin\sdkmanager.bat 2>&1' --update - - ps: Install-Product node $env:nodejs_version - - npm install - # below is a workaround on using gradle installed via choco on appveyor - - set path=C:\ProgramData\chocolatey\lib\gradle\tools\gradle-3.4.1\bin;%path% + # Install Android SDK Tools + - mkdir "%ANDROID_HOME%" + - appveyor DownloadFile "%SDK_TOOLS_URL%" -FileName "%TMP%/sdk-tools.zip" + - 7z x "%TMP%/sdk-tools.zip" -o"%ANDROID_HOME%" > nul + - set PATH=%PATH%;"%ANDROID_HOME%\tools\bin" + + - yes 2> nul | sdkmanager --licenses > nul + - sdkmanager "build-tools;26.0.2" + + - choco install gradle --version 3.4.1 + + - ps: Install-Product node $env:nodejs_version + - npm install build: off test_script: - - node --version - - npm --version - - npm test + - gradle --version + - node --version + - npm --version + - npm test From d862d42e769128395819a5ee523a64d9e423f31a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:10 +0200 Subject: [PATCH 7/9] Unignore tracked build.gradle for Java tests --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3be9ebd9..7560a122 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,6 @@ example /framework/javadoc-public /framework/javadoc-private /test/.externalNativeBuild -/test/build.gradle /test/gradle /test/gradlew /test/gradlew.bat From 6dad25668c9cf05288324192ae4c12e60cc9850d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:11 +0200 Subject: [PATCH 8/9] Delete unused gradle-wrapper.properties for Java tests --- test/gradle/wrapper/gradle-wrapper.properties | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 test/gradle/wrapper/gradle-wrapper.properties diff --git a/test/gradle/wrapper/gradle-wrapper.properties b/test/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index c83ef6ea..00000000 --- a/test/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Wed Oct 25 11:17:25 PDT 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From d3c80ea5d55f08f9da0212cb1dd2d35e1ad7c9fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20von=20der=20Gr=C3=BCn?= Date: Wed, 13 Jun 2018 16:09:12 +0200 Subject: [PATCH 9/9] CB-14072 Update supported Node.js versions --- .travis.yml | 6 +++++- appveyor.yml | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d83ed896..dfcedd7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,10 @@ env: global: # Keep gradle from crapping all over the log - TERM=dumb + matrix: + - nodejs_version=6 + - nodejs_version=8 + - nodejs_version=10 install: # Install a sdkmanager version that supports the --licenses switch and @@ -18,7 +22,7 @@ install: - yes | sdkmanager tools > /dev/null - yes | sdkmanager --licenses > /dev/null - - nvm install 6 + - nvm install $nodejs_version - npm install - npm install -g codecov diff --git a/appveyor.yml b/appveyor.yml index 853e7d3f..700bc851 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,9 +8,9 @@ environment: SDK_TOOLS_URL: https://dl.google.com/android/repository/sdk-tools-windows-3859397.zip matrix: - - nodejs_version: 4 - nodejs_version: 6 - nodejs_version: 8 + - nodejs_version: 10 install: # Install Android SDK Tools diff --git a/package.json b/package.json index f9b55c58..f2e54f48 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "rewire": "^2.1.3" }, "engines": { - "node": ">=4.0.0" + "node": ">=6.0.0" }, "engineStrict": true }