You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by cs...@apache.org on 2018/08/08 17:36:00 UTC
[incubator-openwhisk-runtime-nodejs] branch master updated: Don't
override runtime npm packages when user provides their own (#73)
This is an automated email from the ASF dual-hosted git repository.
csantanapr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-runtime-nodejs.git
The following commit(s) were added to refs/heads/master by this push:
new db79b24 Don't override runtime npm packages when user provides their own (#73)
db79b24 is described below
commit db79b24c9dde0c78481c76c86d7d0063b5e9e77d
Author: Eric Weiterman <ew...@us.ibm.com>
AuthorDate: Wed Aug 8 13:35:58 2018 -0400
Don't override runtime npm packages when user provides their own (#73)
---
.gitignore | 1 +
core/nodejs6Action/Dockerfile | 6 ++--
core/nodejs8Action/Dockerfile | 4 ++-
core/nodejsActionBase/.dockerignore | 2 --
core/nodejsActionBase/Dockerfile | 2 ++
settings.gradle | 3 +-
tests/dat/actions/nodejs-test.zip | Bin 0 -> 2138195 bytes
tests/dat/docker/nodejs6docker/Dockerfile | 3 ++
.../docker/nodejs6docker/build.gradle} | 11 ++----
tests/dat/docker/nodejs6docker/package.json | 8 +++++
tests/dat/docker/nodejs8docker/Dockerfile | 3 ++
.../docker/nodejs8docker/build.gradle} | 11 ++----
tests/dat/docker/nodejs8docker/package.json | 8 +++++
.../NodeJs6ActionContainerTests.scala | 2 +-
.../NodeJs8ActionContainerTests.scala | 1 +
.../NodeJsActionContainerTests.scala | 40 ++++++++++++++++++++-
.../actionContainers/Nodejs6ConcurrentTests.scala | 1 +
.../actionContainers/Nodejs8ConcurrentTests.scala | 1 +
tests/tests/dat | 1 +
tools/travis/build.sh | 8 ++---
20 files changed, 85 insertions(+), 31 deletions(-)
diff --git a/.gitignore b/.gitignore
index 52f108d..0bc5144 100644
--- a/.gitignore
+++ b/.gitignore
@@ -65,6 +65,7 @@ ansible/roles/nginx/files/*cert.pem
*.zip
!tests/dat/actions/blackbox.zip
!tests/dat/actions/helloSwift.zip
+!tests/dat/actions/nodejs-test.zip
!tests/dat/actions/python.zip
!tests/dat/actions/python2_virtualenv.zip
!tests/dat/actions/python3_virtualenv.zip
diff --git a/core/nodejs6Action/Dockerfile b/core/nodejs6Action/Dockerfile
index 3cb7ac0..bd55807 100644
--- a/core/nodejs6Action/Dockerfile
+++ b/core/nodejs6Action/Dockerfile
@@ -33,9 +33,9 @@ WORKDIR /nodejsAction
# Install app dependencies
RUN rm -rf .project .settings build.xml Dockerfile README node_modules logs
-RUN npm install .
-
-RUN npm install \
+RUN cd / && npm install .
+# In nodejsActionBase we copied the package.json file to the root of the container, this is what we are installing here, as to not be overriden by user set packages
+RUN cd / && npm install --no-package-lock \
apn@2.1.2 \
async@2.1.4 \
body-parser@1.15.2 \
diff --git a/core/nodejs8Action/Dockerfile b/core/nodejs8Action/Dockerfile
index 3f56b96..c497a56 100644
--- a/core/nodejs8Action/Dockerfile
+++ b/core/nodejs8Action/Dockerfile
@@ -22,7 +22,9 @@ RUN apt-get update && apt-get install -y \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /nodejsAction
COPY . .
-RUN npm install \
+# COPY the package.json to root container, so we can install npm packages a level up from user's packages, so user's packages take precedence
+COPY ./package.json /
+RUN cd / && npm install --no-package-lock \
&& npm cache clean --force
EXPOSE 8080
CMD node --expose-gc app.js
diff --git a/core/nodejsActionBase/.dockerignore b/core/nodejsActionBase/.dockerignore
deleted file mode 100644
index 6df164e..0000000
--- a/core/nodejsActionBase/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Dockerfile
-build.gradle
diff --git a/core/nodejsActionBase/Dockerfile b/core/nodejsActionBase/Dockerfile
index a46360e..2c8c04d 100644
--- a/core/nodejsActionBase/Dockerfile
+++ b/core/nodejsActionBase/Dockerfile
@@ -23,3 +23,5 @@ ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y imagemagick && apt-get install -y unzip
ADD . /nodejsAction
+# COPY the package.json to root container, so we can install npm packages a level up from user's packages, so user's packages take precedence
+COPY ./package.json /
diff --git a/settings.gradle b/settings.gradle
index c2bf195..e0f26b4 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -19,8 +19,9 @@ include 'tests'
include 'core:nodejsActionBase'
include 'core:nodejs6Action'
-
include 'core:nodejs8Action'
+include 'tests:dat:docker:nodejs6docker'
+include 'tests:dat:docker:nodejs8docker'
rootProject.name = 'runtime-nodejs'
diff --git a/tests/dat/actions/nodejs-test.zip b/tests/dat/actions/nodejs-test.zip
new file mode 100644
index 0000000..a0bfa23
Binary files /dev/null and b/tests/dat/actions/nodejs-test.zip differ
diff --git a/tests/dat/docker/nodejs6docker/Dockerfile b/tests/dat/docker/nodejs6docker/Dockerfile
new file mode 100644
index 0000000..63a26e1
--- /dev/null
+++ b/tests/dat/docker/nodejs6docker/Dockerfile
@@ -0,0 +1,3 @@
+FROM nodejs6action
+COPY package.json .
+RUN npm install --production
\ No newline at end of file
diff --git a/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala b/tests/dat/docker/nodejs6docker/build.gradle
similarity index 75%
copy from tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala
copy to tests/dat/docker/nodejs6docker/build.gradle
index 0a218f6..4e4b018 100644
--- a/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala
+++ b/tests/dat/docker/nodejs6docker/build.gradle
@@ -15,12 +15,5 @@
* limitations under the License.
*/
-package runtime.actionContainers
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-
-@RunWith(classOf[JUnitRunner])
-class Nodejs6ConcurrentTests extends NodeJsConcurrentTests {
- override lazy val nodejsContainerImageName = "nodejs6action"
-}
+ext.dockerImageName = 'nodejs6docker'
+apply from: '../../../../gradle/docker.gradle'
diff --git a/tests/dat/docker/nodejs6docker/package.json b/tests/dat/docker/nodejs6docker/package.json
new file mode 100644
index 0000000..ebfb5a4
--- /dev/null
+++ b/tests/dat/docker/nodejs6docker/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "testdocker",
+ "version": "1.0.0",
+ "main": "index.js",
+ "dependencies": {
+ "openwhisk": "2.0.0"
+ }
+}
\ No newline at end of file
diff --git a/tests/dat/docker/nodejs8docker/Dockerfile b/tests/dat/docker/nodejs8docker/Dockerfile
new file mode 100644
index 0000000..d1f6ada
--- /dev/null
+++ b/tests/dat/docker/nodejs8docker/Dockerfile
@@ -0,0 +1,3 @@
+FROM action-nodejs-v8
+COPY package.json .
+RUN npm install --production
\ No newline at end of file
diff --git a/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala b/tests/dat/docker/nodejs8docker/build.gradle
similarity index 75%
copy from tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala
copy to tests/dat/docker/nodejs8docker/build.gradle
index 0a218f6..a3a1d74 100644
--- a/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala
+++ b/tests/dat/docker/nodejs8docker/build.gradle
@@ -15,12 +15,5 @@
* limitations under the License.
*/
-package runtime.actionContainers
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-
-@RunWith(classOf[JUnitRunner])
-class Nodejs6ConcurrentTests extends NodeJsConcurrentTests {
- override lazy val nodejsContainerImageName = "nodejs6action"
-}
+ext.dockerImageName = 'nodejs8docker'
+apply from: '../../../../gradle/docker.gradle'
diff --git a/tests/dat/docker/nodejs8docker/package.json b/tests/dat/docker/nodejs8docker/package.json
new file mode 100644
index 0000000..ebfb5a4
--- /dev/null
+++ b/tests/dat/docker/nodejs8docker/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "testdocker",
+ "version": "1.0.0",
+ "main": "index.js",
+ "dependencies": {
+ "openwhisk": "2.0.0"
+ }
+}
\ No newline at end of file
diff --git a/tests/src/test/scala/runtime/actionContainers/NodeJs6ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/NodeJs6ActionContainerTests.scala
index 77fea66..a8a26fb 100644
--- a/tests/src/test/scala/runtime/actionContainers/NodeJs6ActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/NodeJs6ActionContainerTests.scala
@@ -24,5 +24,5 @@ import org.scalatest.junit.JUnitRunner
class NodeJs6ActionContainerTests extends NodeJsNonConcurrentTests {
override lazy val nodejsContainerImageName = "nodejs6action"
-
+ override lazy val nodejsTestDockerImageName = "nodejs6docker"
}
diff --git a/tests/src/test/scala/runtime/actionContainers/NodeJs8ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/NodeJs8ActionContainerTests.scala
index f4092c6..61fa8df 100644
--- a/tests/src/test/scala/runtime/actionContainers/NodeJs8ActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/NodeJs8ActionContainerTests.scala
@@ -25,6 +25,7 @@ import spray.json.JsObject
class NodeJs8ActionContainerTests extends NodeJsNonConcurrentTests {
override lazy val nodejsContainerImageName = "action-nodejs-v8"
+ override lazy val nodejsTestDockerImageName = "nodejs8docker"
it should "support async and await" in {
withNodeJsContainer { c =>
diff --git a/tests/src/test/scala/runtime/actionContainers/NodeJsActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/NodeJsActionContainerTests.scala
index 3f9694d..49c900b 100644
--- a/tests/src/test/scala/runtime/actionContainers/NodeJsActionContainerTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/NodeJsActionContainerTests.scala
@@ -17,8 +17,10 @@
package runtime.actionContainers
+import java.io.File
+
import common.WskActorSystem
-import actionContainers.{ActionContainer, BasicActionRunnerTests}
+import actionContainers.{ActionContainer, BasicActionRunnerTests, ResourceHelpers}
import actionContainers.ActionContainer.withContainer
import actionContainers.ResourceHelpers.ZipBuilder
import spray.json._
@@ -26,6 +28,7 @@ import spray.json._
abstract class NodeJsActionContainerTests extends BasicActionRunnerTests with WskActorSystem {
val nodejsContainerImageName: String
+ val nodejsTestDockerImageName: String
override def withActionContainer(env: Map[String, String] = Map.empty)(code: ActionContainer => Unit) = {
withContainer(nodejsContainerImageName, env)(code)
@@ -586,4 +589,39 @@ abstract class NodeJsActionContainerTests extends BasicActionRunnerTests with Ws
})
}
+ it should "use user provided npm packages in a zip file" in {
+ val zipPath = new File("tests/dat/actions/nodejs-test.zip").toPath
+ val code = ResourceHelpers.readAsBase64(zipPath)
+ withNodeJsContainer { c =>
+ c.init(initPayload(code))._1 should be(200)
+
+ val (runCode, runRes) = c.run(runPayload(JsObject()))
+ runRes.get.fields.get("message") shouldBe Some(JsString("success"))
+ }
+ }
+
+ it should "use user provided packages in Docker Actions" in {
+ withContainer(nodejsTestDockerImageName) { c =>
+ val code =
+ """
+ | function main(args) {
+ | var ow = require('openwhisk');
+ | // actions only exists on 2.* versions of openwhisk, not 3.*, so if this was 3.* it would throw an error,
+ | var actions = ow().actions;
+ |
+ | return { "message": "success" };
+ |}
+ """.stripMargin
+ // Initialization of the code should be successful
+ val (initCode, err) = c.init(initPayload(code))
+ initCode should be(200)
+
+ // Running the code should be successful and return a 200 status
+ val (runCode, runRes) = c.run(runPayload(JsObject()))
+ runCode should be(200)
+
+ runRes shouldBe defined
+ runRes.get.fields.get("message") shouldBe Some(JsString("success"))
+ }
+ }
}
diff --git a/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala b/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala
index 0a218f6..27dfbfb 100644
--- a/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/Nodejs6ConcurrentTests.scala
@@ -23,4 +23,5 @@ import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
class Nodejs6ConcurrentTests extends NodeJsConcurrentTests {
override lazy val nodejsContainerImageName = "nodejs6action"
+ override lazy val nodejsTestDockerImageName = "nodejs6docker"
}
diff --git a/tests/src/test/scala/runtime/actionContainers/Nodejs8ConcurrentTests.scala b/tests/src/test/scala/runtime/actionContainers/Nodejs8ConcurrentTests.scala
index 2f1ffaa..565d20e 100644
--- a/tests/src/test/scala/runtime/actionContainers/Nodejs8ConcurrentTests.scala
+++ b/tests/src/test/scala/runtime/actionContainers/Nodejs8ConcurrentTests.scala
@@ -23,4 +23,5 @@ import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
class Nodejs8ConcurrentTests extends NodeJsConcurrentTests {
override lazy val nodejsContainerImageName = "action-nodejs-v8"
+ override lazy val nodejsTestDockerImageName = "nodejs8docker"
}
diff --git a/tests/tests/dat b/tests/tests/dat
new file mode 120000
index 0000000..735ed3b
--- /dev/null
+++ b/tests/tests/dat
@@ -0,0 +1 @@
+../dat
\ No newline at end of file
diff --git a/tools/travis/build.sh b/tools/travis/build.sh
index 2d39fa9..a676794 100755
--- a/tools/travis/build.sh
+++ b/tools/travis/build.sh
@@ -38,8 +38,8 @@ TERM=dumb ./gradlew install
echo "openwhisk.home=$WHISKDIR" > whisk.properties
echo "vcap.services.file=" >> whisk.properties
-# Build runtime
+# Build runtime and dependencies
cd $ROOTDIR
-TERM=dumb ./gradlew \
-:core:nodejs6Action:distDocker \
-:core:nodejs8Action:distDocker
+
+# Build runtime & test dependencies
+TERM=dumb ./gradlew distDocker