From 6cc7d09f2031cbae48cfcfc61d0161673ac2696d Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Mon, 2 Apr 2018 14:56:32 +0300 Subject: [PATCH 1/9] Implemented NodeJS compatibility test. --- .circleci/config.yml | 15 +++++++++++++++ test_compatibility.sh | 30 ++++++++++++++++++++++++++++++ test_compatibility_cache.sh | 13 +++++++++++++ test_compatibility_setup.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100755 test_compatibility.sh create mode 100644 test_compatibility_cache.sh create mode 100644 test_compatibility_setup.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index fad8b1a..bd58f3b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -28,6 +28,21 @@ jobs: - run: name: test command: npm test + - run: + name: compatibility test setup + command: bash test_compatibility_setup.sh + - restore_cache: + key: compatibility-test-cache-{{ checksum "nodes_available.log" }} + - run: + name: compatibility test environment cache generation + command: bash test_compatibility_cache.sh + - save_cache: + key: compatibility-test-cache-{{ checksum "nodes_available.log" }} + paths: + - ~/.envirius/envs/ + - run: + name: compatibility test + command: bash test_compatibility.sh - run: name: package for debug command: npm pack diff --git a/test_compatibility.sh b/test_compatibility.sh new file mode 100755 index 0000000..33d756e --- /dev/null +++ b/test_compatibility.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +[ ! -e ~/.envirius/nv ] && echo 'Error: envirius is not installed!' && exit 1 +[ ! -e nodes_available.log ] && echo 'Error: no environments available!' && exit 1 + +export TERM="dumb" +source ~/.envirius/nv +node_versions=$(cat nodes_available.log) + +# Run the tests on all available versions +for version in ${node_versions}; do +echo "Testing node-${version}!"; +nv do "node-${version}" 'npm test' 2>&1 | tee -a "test_node_${version}.log" | grep 'Test failed.' || \ +echo ${version} >> nodes_passed.log +done + +# Determine failed versions and display the test-run +failed=$(comm -23 <(sort nodes_available.log) <(sort nodes_passed.log)) +if [ -z "${failed}" ]; then + echo "Build is compatible with all major node versions!" + exit 0 +fi + +echo "Build is incompatible with the following node versions:" +echo "${failed}" +for version in ${failed}; do + echo "***Started test-run for ${version}***"; + cat "test_node_${version}.log"; + echo "***Finished test-run for ${version}***"; +done +exit 1 diff --git a/test_compatibility_cache.sh b/test_compatibility_cache.sh new file mode 100644 index 0000000..7f2b074 --- /dev/null +++ b/test_compatibility_cache.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +[ ! -e ~/.envirius/nv ] && echo 'Error: envirius is not installed!' && exit 1 +[ ! -e nodes_available.log ] && echo 'Error: no environments available!' && exit 1 + +export TERM="dumb" +source ~/.envirius/nv +node_versions=$(cat nodes_available.log) + +# Cache NodeJS environments +for version in ${node_versions}; do +echo "Adding NodeJS ${version} into environment cache!" && \ +nv mk "node-${version}" --node-prebuilt=${version} +done diff --git a/test_compatibility_setup.sh b/test_compatibility_setup.sh new file mode 100644 index 0000000..5bab274 --- /dev/null +++ b/test_compatibility_setup.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +export TERM="dumb" + +# Install envirius +git clone --depth 1 https://github.com/ekalinin/envirius.git && \ +cd envirius && \ +make install && \ +cd .. && \ +source ~/.envirius/nv + +if [ $? -ne 0 ]; then +echo "Unable to install envirius!" +exit 1 +fi + +# Determine available node versions +node_versions=$(nv ls-versions --node-prebuilt | sed 's/\s/\n/g' | grep -E '^[4-9]') +if [ -z "${node_versions}" ]; then + echo "Unable to determine node versions!" + exit 1 +fi + +# Dump available versions to file +for version in ${node_versions}; do +echo ${version} >> nodes_available.log +done From 228a2cd5fbbae13f3632507dba087f51e4fe29d0 Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Tue, 3 Apr 2018 12:43:59 +0300 Subject: [PATCH 2/9] Moved compatibility testing scripts to `tools/nodejs_compatibility_checker` --- .circleci/config.yml | 6 +++--- .../nodejs_compatibility_checker/test_compatibility.sh | 0 .../test_compatibility_cache.sh | 0 .../test_compatibility_setup.sh | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename test_compatibility.sh => tools/nodejs_compatibility_checker/test_compatibility.sh (100%) rename test_compatibility_cache.sh => tools/nodejs_compatibility_checker/test_compatibility_cache.sh (100%) rename test_compatibility_setup.sh => tools/nodejs_compatibility_checker/test_compatibility_setup.sh (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml index bd58f3b..7a0eb52 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -30,19 +30,19 @@ jobs: command: npm test - run: name: compatibility test setup - command: bash test_compatibility_setup.sh + command: bash tools/nodejs_compatibility_checker/test_compatibility_setup.sh - restore_cache: key: compatibility-test-cache-{{ checksum "nodes_available.log" }} - run: name: compatibility test environment cache generation - command: bash test_compatibility_cache.sh + command: bash tools/nodejs_compatibility_checker/test_compatibility_cache.sh - save_cache: key: compatibility-test-cache-{{ checksum "nodes_available.log" }} paths: - ~/.envirius/envs/ - run: name: compatibility test - command: bash test_compatibility.sh + command: bash tools/nodejs_compatibility_checker/test_compatibility.sh - run: name: package for debug command: npm pack diff --git a/test_compatibility.sh b/tools/nodejs_compatibility_checker/test_compatibility.sh similarity index 100% rename from test_compatibility.sh rename to tools/nodejs_compatibility_checker/test_compatibility.sh diff --git a/test_compatibility_cache.sh b/tools/nodejs_compatibility_checker/test_compatibility_cache.sh similarity index 100% rename from test_compatibility_cache.sh rename to tools/nodejs_compatibility_checker/test_compatibility_cache.sh diff --git a/test_compatibility_setup.sh b/tools/nodejs_compatibility_checker/test_compatibility_setup.sh similarity index 100% rename from test_compatibility_setup.sh rename to tools/nodejs_compatibility_checker/test_compatibility_setup.sh From defffdfec1e16773fb029f9cfb95ec9d4ea844d7 Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Tue, 3 Apr 2018 13:25:11 +0300 Subject: [PATCH 3/9] Implemented quick compatibility checking. --- .../test_compatibility_setup.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/nodejs_compatibility_checker/test_compatibility_setup.sh b/tools/nodejs_compatibility_checker/test_compatibility_setup.sh index 5bab274..7b77efb 100644 --- a/tools/nodejs_compatibility_checker/test_compatibility_setup.sh +++ b/tools/nodejs_compatibility_checker/test_compatibility_setup.sh @@ -14,12 +14,22 @@ exit 1 fi # Determine available node versions -node_versions=$(nv ls-versions --node-prebuilt | sed 's/\s/\n/g' | grep -E '^[4-9]') +node_versions=$(nv ls-versions --node-prebuilt | sed 's/\s/\n/g' | grep -E '^[1-9]') if [ -z "${node_versions}" ]; then echo "Unable to determine node versions!" exit 1 fi +# Quick check +if [ "$1" == "--quick" ]; then + lts_versions=$( + for lts in 4 6 8 9; do + echo "${node_versions}" | grep -E "^${lts}" | tail -1 + done + ) + node_versions=${lts_versions} +fi + # Dump available versions to file for version in ${node_versions}; do echo ${version} >> nodes_available.log From 45b3439b580730385223a773d3d34ba8a131a2ed Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Tue, 3 Apr 2018 13:28:02 +0300 Subject: [PATCH 4/9] Updated CircleCI config to use quick compatibility checking. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7a0eb52..22f64c1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -30,7 +30,7 @@ jobs: command: npm test - run: name: compatibility test setup - command: bash tools/nodejs_compatibility_checker/test_compatibility_setup.sh + command: bash tools/nodejs_compatibility_checker/test_compatibility_setup.sh --quick - restore_cache: key: compatibility-test-cache-{{ checksum "nodes_available.log" }} - run: From 93d4c52151508b00a697856d11d54a3632e5de4f Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Tue, 3 Apr 2018 14:02:24 +0300 Subject: [PATCH 5/9] Improved compatibility test failure detection. --- tools/nodejs_compatibility_checker/test_compatibility.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/nodejs_compatibility_checker/test_compatibility.sh b/tools/nodejs_compatibility_checker/test_compatibility.sh index 33d756e..fc19bab 100755 --- a/tools/nodejs_compatibility_checker/test_compatibility.sh +++ b/tools/nodejs_compatibility_checker/test_compatibility.sh @@ -9,8 +9,9 @@ node_versions=$(cat nodes_available.log) # Run the tests on all available versions for version in ${node_versions}; do echo "Testing node-${version}!"; -nv do "node-${version}" 'npm test' 2>&1 | tee -a "test_node_${version}.log" | grep 'Test failed.' || \ -echo ${version} >> nodes_passed.log +nv activate --same-shell "node-${version}" +npm test >"test_node_${version}.log" 2>&1 && echo ${version} >> nodes_passed.log +nv deactivate done # Determine failed versions and display the test-run From eac5772065913c68b2c14b5fd712d17dfbe105ce Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Tue, 3 Apr 2018 14:06:52 +0300 Subject: [PATCH 6/9] Improved compatibility test reporting. --- tools/nodejs_compatibility_checker/test_compatibility.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/nodejs_compatibility_checker/test_compatibility.sh b/tools/nodejs_compatibility_checker/test_compatibility.sh index fc19bab..e818084 100755 --- a/tools/nodejs_compatibility_checker/test_compatibility.sh +++ b/tools/nodejs_compatibility_checker/test_compatibility.sh @@ -10,7 +10,13 @@ node_versions=$(cat nodes_available.log) for version in ${node_versions}; do echo "Testing node-${version}!"; nv activate --same-shell "node-${version}" -npm test >"test_node_${version}.log" 2>&1 && echo ${version} >> nodes_passed.log +npm test >"test_node_${version}.log" 2>&1 +if [ $? -eq 0 ]; then + echo "PASSED" + echo ${version} >> nodes_passed.log +else + echo "FAILED" +fi nv deactivate done From 04bd99356b5d1c63bcfdaa5963974f72213beacc Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Wed, 4 Apr 2018 19:09:44 +0300 Subject: [PATCH 7/9] Fixed code style for compatibility test scripts. --- .../test_compatibility.sh | 20 +++++++++---------- .../test_compatibility_cache.sh | 4 ++-- .../test_compatibility_setup.sh | 6 +++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/nodejs_compatibility_checker/test_compatibility.sh b/tools/nodejs_compatibility_checker/test_compatibility.sh index e818084..a680d1f 100755 --- a/tools/nodejs_compatibility_checker/test_compatibility.sh +++ b/tools/nodejs_compatibility_checker/test_compatibility.sh @@ -8,16 +8,16 @@ node_versions=$(cat nodes_available.log) # Run the tests on all available versions for version in ${node_versions}; do -echo "Testing node-${version}!"; -nv activate --same-shell "node-${version}" -npm test >"test_node_${version}.log" 2>&1 -if [ $? -eq 0 ]; then - echo "PASSED" - echo ${version} >> nodes_passed.log -else - echo "FAILED" -fi -nv deactivate + echo "Testing node-${version}!"; + nv activate --same-shell "node-${version}" + npm test >"test_node_${version}.log" 2>&1 + if [ $? -eq 0 ]; then + echo "PASSED" + echo ${version} >> nodes_passed.log + else + echo "FAILED" + fi + nv deactivate done # Determine failed versions and display the test-run diff --git a/tools/nodejs_compatibility_checker/test_compatibility_cache.sh b/tools/nodejs_compatibility_checker/test_compatibility_cache.sh index 7f2b074..20f1ba8 100644 --- a/tools/nodejs_compatibility_checker/test_compatibility_cache.sh +++ b/tools/nodejs_compatibility_checker/test_compatibility_cache.sh @@ -8,6 +8,6 @@ node_versions=$(cat nodes_available.log) # Cache NodeJS environments for version in ${node_versions}; do -echo "Adding NodeJS ${version} into environment cache!" && \ -nv mk "node-${version}" --node-prebuilt=${version} + echo "Adding NodeJS ${version} into environment cache!" && \ + nv mk "node-${version}" --node-prebuilt=${version} done diff --git a/tools/nodejs_compatibility_checker/test_compatibility_setup.sh b/tools/nodejs_compatibility_checker/test_compatibility_setup.sh index 7b77efb..5fd29d9 100644 --- a/tools/nodejs_compatibility_checker/test_compatibility_setup.sh +++ b/tools/nodejs_compatibility_checker/test_compatibility_setup.sh @@ -9,8 +9,8 @@ cd .. && \ source ~/.envirius/nv if [ $? -ne 0 ]; then -echo "Unable to install envirius!" -exit 1 + echo "Unable to install envirius!" + exit 1 fi # Determine available node versions @@ -32,5 +32,5 @@ fi # Dump available versions to file for version in ${node_versions}; do -echo ${version} >> nodes_available.log + echo ${version} >> nodes_available.log done From ae103a310967466d6cda1149fb18f4e2f836ee67 Mon Sep 17 00:00:00 2001 From: RazzM13 <34776591+RazzM13@users.noreply.github.com> Date: Wed, 4 Apr 2018 21:20:59 +0300 Subject: [PATCH 8/9] Fixed code style for "test_compatibility_setup.sh". --- .../test_compatibility_setup.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/nodejs_compatibility_checker/test_compatibility_setup.sh b/tools/nodejs_compatibility_checker/test_compatibility_setup.sh index 5fd29d9..3a722e6 100644 --- a/tools/nodejs_compatibility_checker/test_compatibility_setup.sh +++ b/tools/nodejs_compatibility_checker/test_compatibility_setup.sh @@ -23,9 +23,9 @@ fi # Quick check if [ "$1" == "--quick" ]; then lts_versions=$( - for lts in 4 6 8 9; do - echo "${node_versions}" | grep -E "^${lts}" | tail -1 - done + for lts in 4 6 8 9; do + echo "${node_versions}" | grep -E "^${lts}" | tail -1 + done ) node_versions=${lts_versions} fi From 63413a88f806831df20b50d3cd8226e3fc7ea6c0 Mon Sep 17 00:00:00 2001 From: Marty Sweet Date: Wed, 4 Apr 2018 21:56:20 +0100 Subject: [PATCH 9/9] Implement NodeJS compatibility test --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3021c56..e6427d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ Versioning](http://semver.org/spec/v2.0.0.html). ### Changed - Merge PR #124, adding the `--verbose` flag and returning exit code `1` on a fatal exception or parsing error +### Added +- Merge PR #128, implement NodeJS compatibility test in CI/CD + ## [1.5.1] - 2018-03-12 ### Added - Merge PR #113, adding a Spanish translation for README.md