Bläddra i källkod

Implement supporting multiple `FROM` directives (#3320)

* Split up lang/systools

* Add the other gemini impls

* I am dumb

* Trying something for Travis-CI

* More Travis-CI testing

* Updated FROM implementation

Also, namespace all tagged images with `tfb/`

* Fixes h2o and libreactor
Mike Smith 7 år sedan
förälder
incheckning
19095d74c7
45 ändrade filer med 68 tillägg och 53 borttagningar
  1. 1 1
      frameworks/C/duda/duda.dockerfile
  2. 1 1
      frameworks/C/facil.io/facil.io.dockerfile
  3. 1 1
      frameworks/C/h2o/h2o.dockerfile
  4. 1 1
      frameworks/C/libreactor/libreactor.dockerfile
  5. 1 1
      frameworks/C/octane/octane.dockerfile
  6. 1 1
      frameworks/C/onion/onion.dockerfile
  7. 5 1
      frameworks/Java/gemini/gemini-mysql.dockerfile
  8. 5 1
      frameworks/Java/gemini/gemini-postgres.dockerfile
  9. 5 1
      frameworks/Java/gemini/gemini.dockerfile
  10. 1 1
      frameworks/JavaScript/express/express-mongodb.dockerfile
  11. 1 1
      frameworks/JavaScript/express/express-mysql.dockerfile
  12. 1 1
      frameworks/JavaScript/express/express.dockerfile
  13. 1 1
      frameworks/JavaScript/hapi/hapi-mysql.dockerfile
  14. 1 1
      frameworks/JavaScript/hapi/hapi-postgres.dockerfile
  15. 1 1
      frameworks/JavaScript/hapi/hapi.dockerfile
  16. 1 1
      frameworks/JavaScript/koa/koa-mysql.dockerfile
  17. 1 1
      frameworks/JavaScript/koa/koa-postgres.dockerfile
  18. 1 1
      frameworks/JavaScript/koa/koa.dockerfile
  19. 1 1
      frameworks/JavaScript/nodejs/mitol.dockerfile
  20. 1 1
      frameworks/JavaScript/nodejs/nodejs-default-mitol.dockerfile
  21. 1 1
      frameworks/JavaScript/nodejs/nodejs-mongodb-mitol.dockerfile
  22. 1 1
      frameworks/JavaScript/nodejs/nodejs-mongodb-raw-mitol.dockerfile
  23. 1 1
      frameworks/JavaScript/nodejs/nodejs-mongodb-raw.dockerfile
  24. 1 1
      frameworks/JavaScript/nodejs/nodejs-mongodb.dockerfile
  25. 1 1
      frameworks/JavaScript/nodejs/nodejs-mysql-mitol.dockerfile
  26. 1 1
      frameworks/JavaScript/nodejs/nodejs-mysql.dockerfile
  27. 1 1
      frameworks/JavaScript/nodejs/nodejs-postgres-mitol.dockerfile
  28. 1 1
      frameworks/JavaScript/nodejs/nodejs-postgres.dockerfile
  29. 1 1
      frameworks/JavaScript/nodejs/nodejs.dockerfile
  30. 1 1
      frameworks/JavaScript/ringojs/ringo-base.dockerfile
  31. 1 1
      frameworks/JavaScript/ringojs/ringojs-base.dockerfile
  32. 1 1
      frameworks/JavaScript/ringojs/ringojs-convenient.dockerfile
  33. 1 1
      frameworks/JavaScript/ringojs/ringojs.dockerfile
  34. 1 1
      frameworks/JavaScript/sailsjs/sailsjs-postgres.dockerfile
  35. 1 1
      frameworks/JavaScript/sailsjs/sailsjs.dockerfile
  36. 1 1
      toolset/benchmark/benchmarker.py
  37. 3 3
      toolset/benchmark/framework_test.py
  38. 5 8
      toolset/benchmark/utils.py
  39. 0 0
      toolset/setup/linux/docker/base.dockerfile
  40. 2 2
      toolset/setup/linux/docker/languages/java.dockerfile
  41. 1 1
      toolset/setup/linux/docker/languages/ruby-2.4.dockerfile
  42. 6 0
      toolset/setup/linux/docker/systools/ant.dockerfile
  43. 1 1
      toolset/setup/linux/docker/systools/gcc-6.dockerfile
  44. 1 1
      toolset/setup/linux/docker/webservers/nodejs8.dockerfile
  45. 1 1
      toolset/setup/linux/docker/webservers/resin.dockerfile

+ 1 - 1
frameworks/C/duda/duda.dockerfile

@@ -1,4 +1,4 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 RUN apt install git python -y
 

+ 1 - 1
frameworks/C/facil.io/facil.io.dockerfile

@@ -1,4 +1,4 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/C/h2o/h2o.dockerfile

@@ -1,4 +1,4 @@
-FROM ruby-2.4:latest
+FROM tfb/ruby-2.4:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/C/libreactor/libreactor.dockerfile

@@ -1,4 +1,4 @@
-FROM gcc-6:latest
+FROM tfb/gcc-6:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/C/octane/octane.dockerfile

@@ -1,4 +1,4 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/C/onion/onion.dockerfile

@@ -1,4 +1,4 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 COPY ./ ./
 

+ 5 - 1
frameworks/Java/gemini/gemini-mysql.dockerfile

@@ -1,4 +1,4 @@
-FROM resin:latest
+FROM tfb/ant:latest as ant
 
 RUN apt-get install -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \
     ant
@@ -13,4 +13,8 @@ RUN cd /gemini/Docroot/WEB-INF; mv gemini-mysql.conf GeminiHello.conf;
 
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 
+FROM tfb/resin:latest
+
+COPY --from=ant /gemini /gemini
+
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]

+ 5 - 1
frameworks/Java/gemini/gemini-postgres.dockerfile

@@ -1,4 +1,4 @@
-FROM resin:latest
+FROM tfb/ant:latest as ant
 
 RUN apt-get install -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \
     ant
@@ -13,4 +13,8 @@ RUN cd /gemini/Docroot/WEB-INF; mv gemini-postgres.conf GeminiHello.conf;
 
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 
+FROM tfb/resin:latest
+
+COPY --from=ant /gemini /gemini
+
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]

+ 5 - 1
frameworks/Java/gemini/gemini.dockerfile

@@ -1,4 +1,4 @@
-FROM resin:latest
+FROM tfb/ant:latest as ant
 
 ADD Docroot/ /gemini/Docroot
 ADD Source/ /gemini/Source
@@ -10,4 +10,8 @@ RUN cd /gemini/Docroot/WEB-INF; mv gemini.conf GeminiHello.conf;
 
 RUN cd /gemini; mkdir -p Docroot/WEB-INF/classes; mkdir -p Docroot/WEB-INF/lib; ant resolve; ant compile
 
+FROM tfb/resin:latest
+
+COPY --from=ant /gemini /gemini
+
 CMD ["resinctl", "-conf", "/gemini/Docroot/WEB-INF/resin.xml", "console"]

+ 1 - 1
frameworks/JavaScript/express/express-mongodb.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/express/express-mysql.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/express/express.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/hapi/hapi-mysql.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/hapi/hapi-postgres.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/hapi/hapi.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/koa/koa-mysql.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/koa/koa-postgres.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/koa/koa.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/nodejs/mitol.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-default-mitol.dockerfile

@@ -1,4 +1,4 @@
-FROM mitol:latest
+FROM tfb/mitol:latest
 
 ENV NODE_HANDLER mysql-raw
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-mongodb-mitol.dockerfile

@@ -1,4 +1,4 @@
-FROM mitol:latest
+FROM tfb/mitol:latest
 
 ENV NODE_HANDLER mongoose
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-mongodb-raw-mitol.dockerfile

@@ -1,4 +1,4 @@
-FROM mitol:latest
+FROM tfb/mitol:latest
 
 ENV NODE_HANDLER mongoose
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-mongodb-raw.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-mongodb.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-mysql-mitol.dockerfile

@@ -1,4 +1,4 @@
-FROM mitol:latest
+FROM tfb/mitol:latest
 
 ENV NODE_HANDLER sequelize
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-mysql.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-postgres-mitol.dockerfile

@@ -1,4 +1,4 @@
-FROM mitol:latest
+FROM tfb/mitol:latest
 
 ENV NODE_HANDLER sequelize-postgres
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs-postgres.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/nodejs/nodejs.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/ringojs/ringo-base.dockerfile

@@ -1,4 +1,4 @@
-FROM java:latest
+FROM tfb/java:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/ringojs/ringojs-base.dockerfile

@@ -1,4 +1,4 @@
-FROM java:latest
+FROM tfb/java:latest
 
 ENV NODE_ENV=production
 

+ 1 - 1
frameworks/JavaScript/ringojs/ringojs-convenient.dockerfile

@@ -1,4 +1,4 @@
-FROM ringo-base:latest
+FROM tfb/ringo-base:latest
 
 RUN ringo-admin install grob/ringo-sqlstore && \
     ringo-admin install ringo/stick && \

+ 1 - 1
frameworks/JavaScript/ringojs/ringojs.dockerfile

@@ -1,4 +1,4 @@
-FROM ringo-base:latest
+FROM tfb/ringo-base:latest
 
 RUN ringo-admin install oberhamsi/sql-ringojs-client && \
     ringo-admin install orfon/reinhardt && \

+ 1 - 1
frameworks/JavaScript/sailsjs/sailsjs-postgres.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
frameworks/JavaScript/sailsjs/sailsjs.dockerfile

@@ -1,4 +1,4 @@
-FROM nodejs8:latest
+FROM tfb/nodejs8:latest
 
 COPY ./ ./
 

+ 1 - 1
toolset/benchmark/benchmarker.py

@@ -742,7 +742,7 @@ class Benchmarker:
                         docker_id = subprocess.check_output(["docker", "ps", "-q"]).strip()
                     # We still need to sleep a bit before removing the image
                     time.sleep(5)
-                    subprocess.check_output(["docker", "image", "rm", "tfb-test-%s" % test.name])
+                    subprocess.check_output(["docker", "image", "rm", "tfb/test/%s" % test.name])
     ############################################################
     # End __stop_test
     ############################################################

+ 3 - 3
toolset/benchmark/framework_test.py

@@ -217,7 +217,7 @@ class FrameworkTest:
         "-f", 
         docker_file, 
         "-t", 
-        dependency, 
+        "tfb/%s" % dependency, 
         os.path.dirname(docker_file)],
           stdout=subprocess.PIPE,
           stderr=subprocess.STDOUT)
@@ -243,7 +243,7 @@ class FrameworkTest:
       "-f", 
       test_docker_file, 
       "-t", 
-      "tfb-test-%s" % self.name, 
+      "tfb/test/%s" % self.name, 
       self.directory],
         stdout=subprocess.PIPE,
         stderr=subprocess.STDOUT)
@@ -264,7 +264,7 @@ class FrameworkTest:
     ##########################
     # Run the Docker container
     ##########################
-    p = subprocess.Popen(["docker", "run", "--rm", "-p", "%s:%s" % (self.port, self.port), "--network=host", "tfb-test-%s" % self.name],
+    p = subprocess.Popen(["docker", "run", "--rm", "-p", "%s:%s" % (self.port, self.port), "--network=host", "tfb/test/%s" % self.name],
           stdout=subprocess.PIPE,
           stderr=subprocess.STDOUT)
     nbsr = setup_util.NonBlockingStreamReader(p.stdout,

+ 5 - 8
toolset/benchmark/utils.py

@@ -25,19 +25,16 @@ def gather_docker_dependencies(docker_file):
 
     if os.path.exists(docker_file):
         with open(docker_file) as fp:
-            line = fp.readline()
-            if line:
+            for line in fp.readlines():
                 tokens = line.strip().split(' ')
                 if tokens[0] == "FROM":
                     # This is magic that our base image points to
                     if tokens[1] != "ubuntu:16.04":
-                        depTokens = tokens[1].strip().split(':')
-                        deps.append(depTokens[0])
-                        dep_docker_file = os.path.join(os.path.dirname(docker_file), depTokens[0] + ".dockerfile")
+                        depToken = tokens[1].strip().split(':')[0].strip().split('/')[1]
+                        deps.append(depToken)
+                        dep_docker_file = os.path.join(os.path.dirname(docker_file), depToken + ".dockerfile")
                         if not os.path.exists(dep_docker_file):
-                            # dep_docker_file = os.path.join(setup_util.get_fwroot(),
-                            #     "toolset", "setup", "linux", "docker", depTokens[0] + ".dockerfile")
-                            dep_docker_file = find_docker_file(docker_dir, depTokens[0] + ".dockerfile")
+                            dep_docker_file = find_docker_file(docker_dir, depToken + ".dockerfile")
                         deps.extend(gather_docker_dependencies(dep_docker_file))
 
     return deps

+ 0 - 0
toolset/setup/linux/docker/tfb.dockerfile → toolset/setup/linux/docker/base.dockerfile


+ 2 - 2
toolset/setup/linux/docker/languages/java.dockerfile

@@ -1,9 +1,9 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 RUN add-apt-repository -y ppa:openjdk-r/ppa
 RUN apt-get update
 RUN apt-get install -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \
-    openjdk-8-jdk ant
+    openjdk-8-jdk
 
 # https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760
 RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure

+ 1 - 1
toolset/setup/linux/docker/languages/ruby-2.4.dockerfile

@@ -1,4 +1,4 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 RUN apt install -yqq llvm-dev libjemalloc-dev zlib1g-dev libssl-dev libcurl4-openssl-dev bison
 

+ 6 - 0
toolset/setup/linux/docker/systools/ant.dockerfile

@@ -0,0 +1,6 @@
+FROM tfb/java:latest
+
+RUN add-apt-repository -y ppa:openjdk-r/ppa
+RUN apt-get update
+RUN apt-get install -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \
+    ant

+ 1 - 1
toolset/setup/linux/docker/systools/gcc-6.dockerfile

@@ -1,4 +1,4 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
     apt-get -yq update && \

+ 1 - 1
toolset/setup/linux/docker/webservers/nodejs8.dockerfile

@@ -1,4 +1,4 @@
-FROM tfb:latest
+FROM tfb/base:latest
 
 ENV NODE_ENV=production
 

+ 1 - 1
toolset/setup/linux/docker/webservers/resin.dockerfile

@@ -1,4 +1,4 @@
-FROM java:latest
+FROM tfb/java:latest
 
 ENV RESIN_HOME=/resin-4.0.55