From a98d1ce7bd99a45f9fe9628aeab9c0fb7876c4e7 Mon Sep 17 00:00:00 2001 From: William Blankenship Date: Mon, 4 Apr 2016 21:22:41 -0400 Subject: [PATCH 01/13] Adding dante to travis --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 850ae39ea..cdf5f1979 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,9 @@ sudo: required services: - docker + +before_install: + - wget -o /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 script: - - ./test-build.sh + - dante test From 5b8dabc82106e610739ff35d81f7268a682c8dde Mon Sep 17 00:00:00 2001 From: William Blankenship Date: Mon, 4 Apr 2016 21:27:11 -0400 Subject: [PATCH 02/13] Adding sudo privileges to wget --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cdf5f1979..d9523761c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ services: - docker before_install: - - wget -o /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 + - sudo wget -o /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 script: - dante test From 78b75b4fb09cad8d56ebecd11dbfd92c11b1edb6 Mon Sep 17 00:00:00 2001 From: William Blankenship Date: Mon, 4 Apr 2016 21:30:06 -0400 Subject: [PATCH 03/13] Make dante executable --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d9523761c..126d5b3f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ services: before_install: - sudo wget -o /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 + - sudo chmod +x /usr/bin/dante script: - - dante test + - sudo dante test From 0f816ebbb7260b3c935c979f696457b7e356bb95 Mon Sep 17 00:00:00 2001 From: William Blankenship Date: Mon, 4 Apr 2016 21:41:12 -0400 Subject: [PATCH 04/13] Write dante binary, not wget log --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 126d5b3f4..de672b9a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ services: - docker before_install: - - sudo wget -o /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 + - sudo wget -O /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 - sudo chmod +x /usr/bin/dante script: From eebc0d55efed51dd03bba33dbaa8477b762789e1 Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 22:24:15 -0400 Subject: [PATCH 05/13] Remove sudo from dante --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index de672b9a3..fe457ec2b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,10 @@ sudo: required services: - docker - + before_install: - sudo wget -O /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 - sudo chmod +x /usr/bin/dante - + script: - - sudo dante test + - dante test From a819d701a505c1d53fd250d269b755a28058645f Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 22:24:35 -0400 Subject: [PATCH 06/13] Add tests and generate inventory.yml file --- .gitignore | 1 + generate-inventory.sh | 20 +++++++++ inventory.yml | 49 ++++++++++++++++++++ tests/smoke-tests/Dockerfile | 7 +++ tests/smoke-tests/package.json | 3 ++ tests/smoke-tests/smoke_test.sh | 80 +++++++++++++++++++++++++++++++++ tests/versions/Dockerfile | 6 +++ tests/versions/package.json | 3 ++ 8 files changed, 169 insertions(+) create mode 100644 .gitignore create mode 100755 generate-inventory.sh create mode 100644 inventory.yml create mode 100644 tests/smoke-tests/Dockerfile create mode 100644 tests/smoke-tests/package.json create mode 100755 tests/smoke-tests/smoke_test.sh create mode 100644 tests/versions/Dockerfile create mode 100644 tests/versions/package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..58c784051 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +\.~tmp*/ diff --git a/generate-inventory.sh b/generate-inventory.sh new file mode 100755 index 000000000..85b4d75a0 --- /dev/null +++ b/generate-inventory.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +INVENTORY="images:" + +# gen_entry [path] [name] +gen_entry () { + INVENTORY=$INVENTORY" + - name: \"node:$2\" + path: \"$1\" + test: [\"./tests/smoke-tests/\",\"./tests/versions\"]" +} + +for version in $(find . -name '[0-9]*\.[0-9]*' -type d); do + for dir in $(find "$version" -type d); do + #gen_entry "$folder" "$(echo "$folder" | sed 's/\.\///')" + tag=$(echo "$dir" | sed 's/\.\///' | sed 's/\//-/') + gen_entry "$dir" "$tag" + done +done + +echo -e "$INVENTORY" > inventory.yml diff --git a/inventory.yml b/inventory.yml new file mode 100644 index 000000000..7daa4b08f --- /dev/null +++ b/inventory.yml @@ -0,0 +1,49 @@ +images: + - name: "node:0.10" + path: "./0.10" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:0.10-onbuild" + path: "./0.10/onbuild" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:0.10-slim" + path: "./0.10/slim" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:0.10-wheezy" + path: "./0.10/wheezy" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:4.4" + path: "./4.4" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:4.4-onbuild" + path: "./4.4/onbuild" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:4.4-slim" + path: "./4.4/slim" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:4.4-wheezy" + path: "./4.4/wheezy" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:0.12" + path: "./0.12" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:0.12-onbuild" + path: "./0.12/onbuild" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:0.12-slim" + path: "./0.12/slim" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:0.12-wheezy" + path: "./0.12/wheezy" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:5.10" + path: "./5.10" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:5.10-onbuild" + path: "./5.10/onbuild" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:5.10-slim" + path: "./5.10/slim" + test: ["./tests/smoke-tests/","./tests/versions"] + - name: "node:5.10-wheezy" + path: "./5.10/wheezy" + test: ["./tests/smoke-tests/","./tests/versions"] diff --git a/tests/smoke-tests/Dockerfile b/tests/smoke-tests/Dockerfile new file mode 100644 index 000000000..83226b2d3 --- /dev/null +++ b/tests/smoke-tests/Dockerfile @@ -0,0 +1,7 @@ +ENV NODE_ENV dev +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app +RUN npm config set spin=false +ADD ./smoke_test.sh ./smoke_test.sh +RUN chmod +x ./smoke_test.sh +RUN ./smoke_test.sh diff --git a/tests/smoke-tests/package.json b/tests/smoke-tests/package.json new file mode 100644 index 000000000..c0ca188ac --- /dev/null +++ b/tests/smoke-tests/package.json @@ -0,0 +1,3 @@ +{ + "comment": "This satisifies the onbuild triggers" +} diff --git a/tests/smoke-tests/smoke_test.sh b/tests/smoke-tests/smoke_test.sh new file mode 100755 index 000000000..c35cedae5 --- /dev/null +++ b/tests/smoke-tests/smoke_test.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +# ============================================================================= +# +# smoke_test.sh +# +# This script clones down a set of popular npm packages and runs their unit +# tests. This can be used to help verify a stable Node and npm install. +# +# ============================================================================= + +# Exit on failure +set -e + +# Define a set of tuples that are used to clone npm projects for testing +# Note: Bash doesn't suppor tuples, so we have 4 arrays. +REPOS=( + "https://github.com/caolan/async" + "https://github.com/tj/commander.js" + "https://github.com/substack/node-mkdirp" + "https://github.com/rvagg/through2" + "https://github.com/isaacs/node-glob" + "https://github.com/broofa/node-uuid" + "https://github.com/cheeriojs/cheerio" + "https://github.com/kriskowal/q" +) + +BRANCHES=( + "2.x" + "master" + "master" + "master" + "master" + "master" + "master" + "v1" +) + +DIRS=( + "async" + "commander" + "mkdirp" + "through2" + "glob" + "uuid" + "cheerio" + "q" +) + +TESTS=( + "nodeunit-test" + "test" + "test" + "test" + "test" + "test" + "test" + "test" +) + +# Keep track of where we started before we cd around +CWD=$PWD + +# Iterate through all tuples in the set defined above +for i in `seq 3 $(expr ${#REPOS[@]} - 1)`; do + # Break tuple apart into components + REPO=${REPOS[$i]} + BRANCH=${BRANCHES[$i]} + DIR=${DIRS[$i]} + TEST=${TESTS[$i]} + + # Clone an npm package from github, install its deps, and then test it. + echo "--> Cloning $DIR" + git clone --recursive --depth 1 --branch $BRANCH $REPO $DIR + cd $DIR + echo "--> Setting up $DIR" + npm install + echo "--> Testing $DIR" + npm run $TEST + cd $CWD +done diff --git a/tests/versions/Dockerfile b/tests/versions/Dockerfile new file mode 100644 index 000000000..e98824683 --- /dev/null +++ b/tests/versions/Dockerfile @@ -0,0 +1,6 @@ +# This simply documents the versions of Node.js and npm installed, along with +# the versions of the linked library availble to the runtime. This provides +# an audit trail for buggy builds +RUN node -v +RUN node -p "process.versions" +RUN npm --version diff --git a/tests/versions/package.json b/tests/versions/package.json new file mode 100644 index 000000000..c0ca188ac --- /dev/null +++ b/tests/versions/package.json @@ -0,0 +1,3 @@ +{ + "comment": "This satisifies the onbuild triggers" +} From 88361c8035460d48b488c5fcd65b5ab120c8b2cd Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 22:26:15 -0400 Subject: [PATCH 07/13] Removed commented out line --- generate-inventory.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/generate-inventory.sh b/generate-inventory.sh index 85b4d75a0..85eec4583 100755 --- a/generate-inventory.sh +++ b/generate-inventory.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash INVENTORY="images:" -# gen_entry [path] [name] gen_entry () { INVENTORY=$INVENTORY" - name: \"node:$2\" @@ -11,7 +10,6 @@ gen_entry () { for version in $(find . -name '[0-9]*\.[0-9]*' -type d); do for dir in $(find "$version" -type d); do - #gen_entry "$folder" "$(echo "$folder" | sed 's/\.\///')" tag=$(echo "$dir" | sed 's/\.\///' | sed 's/\//-/') gen_entry "$dir" "$tag" done From 474d5486b61019a10a828a18ae54cf4a43c945f7 Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 22:34:09 -0400 Subject: [PATCH 08/13] Ensure git and https are available on all images for smoke testing --- tests/smoke-tests/Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/smoke-tests/Dockerfile b/tests/smoke-tests/Dockerfile index 83226b2d3..afa05bde3 100644 --- a/tests/smoke-tests/Dockerfile +++ b/tests/smoke-tests/Dockerfile @@ -1,3 +1,10 @@ +RUN apt-get update \ + && apt-get install -y --force-yes --no-install-recommends\ + git \ + ca-certificates \ + ssh-client \ + && rm -rf /var/lib/apt/lists/*; + ENV NODE_ENV dev RUN mkdir -p /usr/src/app WORKDIR /usr/src/app From 9e7a889727c72a1d39bf5fdc790225563caa2f9d Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 22:46:50 -0400 Subject: [PATCH 09/13] Only log npm test if test fails --- tests/smoke-tests/smoke_test.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/smoke-tests/smoke_test.sh b/tests/smoke-tests/smoke_test.sh index c35cedae5..8d2f8db95 100755 --- a/tests/smoke-tests/smoke_test.sh +++ b/tests/smoke-tests/smoke_test.sh @@ -75,6 +75,10 @@ for i in `seq 3 $(expr ${#REPOS[@]} - 1)`; do echo "--> Setting up $DIR" npm install echo "--> Testing $DIR" - npm run $TEST + # Only log error if tests fail + log=$(npm run "$TEST" 2>&1) + if [ $? -ne 0 ]; then + echo -e "$log" + fi cd $CWD done From a1a31f051ce636638fbacb31dfe10d58fc703e46 Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 22:47:45 -0400 Subject: [PATCH 10/13] Parallel builds --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fe457ec2b..e36ccb688 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,4 +8,4 @@ before_install: - sudo chmod +x /usr/bin/dante script: - - dante test + - dante test -j 4 From 1036c55b528788ef075a636610407e9bb14f5db5 Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 23:02:35 -0400 Subject: [PATCH 11/13] Don't print npm logs, and handle exit manually for smoke_tests --- tests/smoke-tests/smoke_test.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/smoke-tests/smoke_test.sh b/tests/smoke-tests/smoke_test.sh index 8d2f8db95..55219cb0c 100755 --- a/tests/smoke-tests/smoke_test.sh +++ b/tests/smoke-tests/smoke_test.sh @@ -8,9 +8,6 @@ # # ============================================================================= -# Exit on failure -set -e - # Define a set of tuples that are used to clone npm projects for testing # Note: Bash doesn't suppor tuples, so we have 4 arrays. REPOS=( @@ -73,12 +70,17 @@ for i in `seq 3 $(expr ${#REPOS[@]} - 1)`; do git clone --recursive --depth 1 --branch $BRANCH $REPO $DIR cd $DIR echo "--> Setting up $DIR" - npm install + install_log=$(npm install 2>&1) + if [ $? -ne 0 ]; then + echo -e "$install_log" + exit 1 + fi echo "--> Testing $DIR" # Only log error if tests fail - log=$(npm run "$TEST" 2>&1) + run_log=$(npm run "$TEST" 2>&1) if [ $? -ne 0 ]; then - echo -e "$log" + echo -e "$run_log" + exit 1 fi cd $CWD done From 8b1245f389467890e8e4dd2c904a8ccf0f46b734 Mon Sep 17 00:00:00 2001 From: wblankenship Date: Mon, 4 Apr 2016 23:28:32 -0400 Subject: [PATCH 12/13] Add build-essential for cheerio makefile --- tests/smoke-tests/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/smoke-tests/Dockerfile b/tests/smoke-tests/Dockerfile index afa05bde3..d329221a2 100644 --- a/tests/smoke-tests/Dockerfile +++ b/tests/smoke-tests/Dockerfile @@ -2,6 +2,7 @@ RUN apt-get update \ && apt-get install -y --force-yes --no-install-recommends\ git \ ca-certificates \ + build-essential \ ssh-client \ && rm -rf /var/lib/apt/lists/*; From eafde9da1f0e881b2730aa15e5a58445a6bdbe63 Mon Sep 17 00:00:00 2001 From: wblankenship Date: Thu, 9 Jun 2016 18:42:01 -0400 Subject: [PATCH 13/13] Generate inventory.yml on travis build --- .travis.yml | 4 ++++ inventory.yml | 49 ------------------------------------------------- 2 files changed, 4 insertions(+), 49 deletions(-) delete mode 100644 inventory.yml diff --git a/.travis.yml b/.travis.yml index e36ccb688..d31d22094 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,5 +7,9 @@ before_install: - sudo wget -O /usr/bin/dante https://github.com/retrohacker/dante/releases/download/2.1.0/dante-linux-amd64 - sudo chmod +x /usr/bin/dante +before_script: + - ./generate-inventory.sh + - cat inventory.yml + script: - dante test -j 4 diff --git a/inventory.yml b/inventory.yml deleted file mode 100644 index 7daa4b08f..000000000 --- a/inventory.yml +++ /dev/null @@ -1,49 +0,0 @@ -images: - - name: "node:0.10" - path: "./0.10" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:0.10-onbuild" - path: "./0.10/onbuild" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:0.10-slim" - path: "./0.10/slim" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:0.10-wheezy" - path: "./0.10/wheezy" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:4.4" - path: "./4.4" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:4.4-onbuild" - path: "./4.4/onbuild" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:4.4-slim" - path: "./4.4/slim" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:4.4-wheezy" - path: "./4.4/wheezy" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:0.12" - path: "./0.12" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:0.12-onbuild" - path: "./0.12/onbuild" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:0.12-slim" - path: "./0.12/slim" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:0.12-wheezy" - path: "./0.12/wheezy" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:5.10" - path: "./5.10" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:5.10-onbuild" - path: "./5.10/onbuild" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:5.10-slim" - path: "./5.10/slim" - test: ["./tests/smoke-tests/","./tests/versions"] - - name: "node:5.10-wheezy" - path: "./5.10/wheezy" - test: ["./tests/smoke-tests/","./tests/versions"]