THRIFT-3452 .travis.yml: Migrating from legacy to container-based infrastructure
Client: Build
Patch: Nobuaki Sukegawa

Use "services: docker"

This closes #730
diff --git a/build/docker/README.md b/build/docker/README.md
index 3712653..85cb3b2 100644
--- a/build/docker/README.md
+++ b/build/docker/README.md
@@ -23,5 +23,5 @@
 
 * Run
 
-	docker run -v $(pwd):/thrift -it thrift /bin/bash
+	docker run -v $(pwd):/thrift/src -it thrift /bin/bash
 
diff --git a/build/docker/centos/Dockerfile b/build/docker/centos/Dockerfile
index 95601db..4ce4f42 100644
--- a/build/docker/centos/Dockerfile
+++ b/build/docker/centos/Dockerfile
@@ -21,37 +21,83 @@
 FROM centos:7
 MAINTAINER Apache Thrift <dev@thrift.apache.org>
 
-ENV HOME /root
+RUN yum install -y epel-release
 
 # General dependencies
-RUN yum install -y tar m4 perl gcc gcc-c++ git libtool zlib-devel openssl-devel autoconf make bison bison-devel flex epel-release
+RUN yum install -y \
+      tar \
+      m4 \
+      perl \
+      clang \
+      gcc \
+      gcc-c++ \
+      git \
+      libtool \
+      autoconf \
+      make \
+      bison \
+      bison-devel \
+      flex
 
 # C++ dependencies
-RUN yum install -y boost-devel-static libevent-devel
+RUN yum install -y \
+      boost-devel-static \
+      zlib-devel \
+      openssl-devel \
+      libevent-devel
 
 # Java Dependencies
-RUN yum install -y ant junit ant-junit java-1.7.0-openjdk-devel
+RUN yum install -y \
+      ant \
+      junit \
+      ant-junit \
+      java-1.7.0-openjdk-devel
 
 # Python Dependencies
-RUN yum install -y python-devel python-setuptools python-twisted-web python-six
+RUN yum install -y \
+      python-devel \
+      python-setuptools \
+      python-twisted-web \
+      python-six
 
 # Ruby Dependencies
-RUN yum install -y ruby ruby-devel rubygems && \
+RUN yum install -y \
+      ruby \
+      ruby-devel \
+      rubygems && \
     gem install bundler rake
 
 # Perl Dependencies
-RUN yum install -y perl-Bit-Vector perl-Class-Accessor perl-ExtUtils-MakeMaker perl-Test-Simple \
-    perl-IO-Socket-SSL perl-Net-SSLeay perl-Crypt-SSLeay
+RUN yum install -y \
+      perl-Bit-Vector \
+      perl-Class-Accessor \
+      perl-ExtUtils-MakeMaker \
+      perl-Test-Simple \
+      perl-IO-Socket-SSL \
+      perl-Net-SSLeay \
+      perl-Crypt-SSLeay
 
 # PHP Dependencies
-RUN yum install -y php php-devel php-pear re2c php-phpunit-PHPUnit bzip2
+RUN yum install -y \
+      php \
+      php-devel \
+      php-pear \
+      re2c \
+      php-phpunit-PHPUnit \
+      bzip2
 
 # GLibC Dependencies
 RUN yum install -y glib2-devel
 
 # Erlang Dependencies
 RUN curl -sSL http://packages.erlang-solutions.com/rpm/centos/erlang_solutions.repo -o /etc/yum.repos.d/erlang_solutions.repo && \
-    yum install -y erlang-kernel erlang-erts erlang-stdlib erlang-eunit erlang-rebar erlang-tools
+    yum install -y \
+      erlang-kernel \
+      erlang-erts \
+      erlang-stdlib \
+      erlang-eunit \
+      erlang-rebar \
+      erlang-tools
 
 # Go Dependencies
 RUN curl -sSL https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz | tar -C /usr/local/ -xz
@@ -61,13 +107,33 @@
 RUN yum -y install haskell-platform
 
 # Node.js Dependencies
-RUN yum install -y nodejs nodejs-devel npm
+RUN yum install -y \
+      nodejs \
+      nodejs-devel \
+      npm
 
 # C# Dependencies
-RUN yum install -y mono-core mono-devel mono-web-devel mono-extras mingw32-binutils mingw32-crt mingw32-nsis
+RUN yum install -y \
+      mono-core \
+      mono-devel \
+      mono-web-devel \
+      mono-extras \
+
+# MinGW Dependencies
+RUN yum install -y \
+      mingw32-binutils \
+      mingw32-crt \
+      mingw32-nsis
+
+# CMake
+RUN curl -sSL https://cmake.org/files/v3.4/cmake-3.4.0.tar.gz | tar -xz && \
+    cd cmake-3.4.0 && ./bootstrap && make -j4 && make install
 
 # Clean up
 RUN rm -rf /tmp/* && \
     yum clean all
 
-WORKDIR $HOME
+ENV THRIFT_ROOT /thrift
+RUN mkdir -p $THRIFT_ROOT/src
+COPY scripts $THRIFT_ROOT
+WORKDIR $THRIFT_ROOT/src
diff --git a/build/docker/centos/scripts/keepit b/build/docker/centos/scripts/keepit
new file mode 100644
index 0000000..cb885df
--- /dev/null
+++ b/build/docker/centos/scripts/keepit
@@ -0,0 +1 @@
+keep it
diff --git a/build/docker/scripts/autotools.sh b/build/docker/scripts/autotools.sh
new file mode 100755
index 0000000..4c111e6
--- /dev/null
+++ b/build/docker/scripts/autotools.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -ev
+
+./bootstrap.sh
+./configure $*
+make check -j4
diff --git a/build/docker/scripts/cmake.sh b/build/docker/scripts/cmake.sh
new file mode 100755
index 0000000..8204a1d
--- /dev/null
+++ b/build/docker/scripts/cmake.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+set -ev
+
+mkdir -p cmake_build && cd cmake_build
+cmake $* ..
+make -j4
+cpack
+ctest -VV -E "(concurrency_test|processor_test)"
diff --git a/build/docker/scripts/cross-test.sh b/build/docker/scripts/cross-test.sh
new file mode 100755
index 0000000..d9562ab
--- /dev/null
+++ b/build/docker/scripts/cross-test.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -ev
+
+./bootstrap.sh
+./configure --enable-tutorial=no
+make -j4 precross
+
+set +e
+make cross
+
+RET=$?
+if [ $RET -ne 0 ]; then
+  cat test/log/unexpected_failures.log
+fi
+
+exit $RET
diff --git a/build/docker/scripts/make-dist.sh b/build/docker/scripts/make-dist.sh
new file mode 100755
index 0000000..c728130
--- /dev/null
+++ b/build/docker/scripts/make-dist.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -ev
+
+./bootstrap.sh
+./configure $*
+make dist
diff --git a/build/docker/ubuntu/Dockerfile b/build/docker/ubuntu/Dockerfile
index d8bac0c..55c6a02 100644
--- a/build/docker/ubuntu/Dockerfile
+++ b/build/docker/ubuntu/Dockerfile
@@ -18,62 +18,112 @@
 FROM ubuntu:trusty
 MAINTAINER Apache Thrift <dev@thrift.apache.org>
 
-ENV HOME /root
 ENV DEBIAN_FRONTEND noninteractive
 
-RUN apt-get update -y && apt-get dist-upgrade -y
-
 # General dependencies
-RUN apt-get install -y automake libtool flex bison pkg-config g++ libssl-dev make libqt4-dev git \
-    debhelper cmake
+RUN apt-get update && apt-get install -y \
+      apt-transport-https \
+      automake \
+      bison \
+      clang \
+      cmake \
+      debhelper \
+      flex \
+      g++ \
+      git \
+      libtool \
+      make \
+      pkg-config
 
 # C++ dependencies
-RUN apt-get install -y libboost-dev libboost-test-dev libboost-program-options-dev \
-    libboost-filesystem-dev libboost-system-dev libboost-thread-dev libevent-dev
+RUN apt-get update && apt-get install -y \
+      libboost-dev \
+      libboost-filesystem-dev \
+      libboost-program-options-dev \
+      libboost-system-dev \
+      libboost-test-dev \
+      libboost-thread-dev \
+      libevent-dev \
+      libqt4-dev \
+      libssl-dev
 
 # Java dependencies
-RUN apt-get install -y ant openjdk-7-jdk maven && \
-    update-java-alternatives -s java-1.7.0-openjdk-amd64
+RUN apt-get update && apt-get install -y \
+      ant \
+      openjdk-7-jdk \
+      maven \
+    && update-java-alternatives -s java-1.7.0-openjdk-amd64
 
 # Python dependencies
-RUN apt-get install -y python-all python-all-dev python-all-dbg python-setuptools python-support \
-    python-twisted python-zope.interface python-six python3-six
+RUN apt-get update && apt-get install -y \
+      python-all \
+      python-all-dev \
+      python-all-dbg \
+      python-setuptools \
+      python-support \
+      python-twisted \
+      python-zope.interface \
+      python-six \
+      python3-six
 
 # Ruby dependencies
-RUN apt-get install -y ruby ruby-dev && \
-    gem install bundler rake
+RUN apt-get update && apt-get install -y \
+      ruby \
+      ruby-dev \
+    && gem install bundler rake
 
 # Perl dependencies
-RUN apt-get install -y libbit-vector-perl libclass-accessor-class-perl
+RUN apt-get update && apt-get install -y \
+      libbit-vector-perl \
+      libclass-accessor-class-perl \
+      libcrypt-ssleay-perl \
+      libio-socket-ssl-perl \
+      libnet-ssleay-perl
 
 # Php dependencies
-RUN apt-get install -y php5 php5-dev php5-cli php-pear re2c phpunit
+RUN apt-get update && apt-get install -y \
+      php5 \
+      php5-dev \
+      php5-cli \
+      php-pear \
+      re2c \
+      phpunit
 
 # GlibC dependencies
-RUN apt-get install -y libglib2.0-dev
+RUN apt-get update && apt-get install -y libglib2.0-dev
 
 # Erlang dependencies
 RUN echo 'deb http://packages.erlang-solutions.com/debian trusty contrib' > /etc/apt/sources.list.d/erlang_solutions.list && \
-    curl -sSL http://packages.erlang-solutions.com/debian/erlang_solutions.asc | sudo apt-key add - && \
-    apt-get update && \
-    apt-get install -y erlang-base erlang-eunit erlang-dev erlang-tools
+    curl -sSL http://packages.erlang-solutions.com/debian/erlang_solutions.asc | apt-key add - && \
+    apt-get update && apt-get install -y \
+      erlang-base \
+      erlang-eunit \
+      erlang-dev \
+      erlang-tools \
+      rebar
 
-# GO dependencies
-RUN curl -sSL https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz | tar -C /usr/lib/ -xz && \
-    mkdir -p /usr/share/go
+# Go dependencies
+RUN curl -sSL https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz | tar -C /usr/local/ -xz
+ENV PATH /usr/local/go/bin:$PATH
 
-ENV GOROOT /usr/lib/go
-ENV GOPATH /usr/share/go
-ENV PATH ${GOROOT}/bin:${GOPATH}/bin:$PATH
 
 # Haskell dependencies
-RUN apt-get install -y ghc cabal-install libghc-binary-dev libghc-network-dev libghc-http-dev \
-    libghc-hashable-dev libghc-unordered-containers-dev libghc-vector-dev && \
-    cabal update
+RUN apt-get update && apt-get install -y \
+      ghc \
+      cabal-install \
+      libghc-binary-dev \
+      libghc-network-dev \
+      libghc-http-dev \
+      libghc-hashable-dev \
+      libghc-unordered-containers-dev \
+      libghc-vector-dev
 
 # Haxe
-RUN apt-get install -y neko neko-dev libneko0 && \
-    mkdir -p /tmp/haxe /usr/lib/haxe && \
+RUN apt-get update && apt-get install -y \
+      neko \
+      neko-dev \
+      libneko0 \
+    && mkdir -p /tmp/haxe /usr/lib/haxe && \
     curl http://haxe.org/website-content/downloads/3.2.0/downloads/haxe-3.2.0-linux64.tar.gz -o /tmp/haxe/haxe-3.2.0-linux64.tar.gz && \
     tar -xvzf /tmp/haxe/haxe-3.2.0-linux64.tar.gz -C /usr/lib/haxe --strip-components=1 && \
     ln -s /usr/lib/haxe/haxe /usr/bin/haxe && \
@@ -81,26 +131,53 @@
     mkdir -p /usr/lib/haxe/lib  && \
     chmod -R 777 /usr/lib/haxe/lib && \
     haxelib setup /usr/lib/haxe/lib && \
-    haxelib install hxcpp
+    haxelib install hxcpp && \
+    rm -rf /tmp/haxe
 
-# Lua dependencies
-RUN apt-get install -y lua5.2 lua5.2-dev
 
 # Node.js dependencies
-RUN apt-get install -y nodejs nodejs-dev nodejs-legacy npm
+RUN apt-get update && apt-get install -y \
+      nodejs \
+      nodejs-dev \
+      nodejs-legacy \
+      npm
 
-# CSharp
-RUN apt-get install -y mono-gmcs mono-devel mono-xbuild mono-complete libmono-system-web2.0-cil \
-    mingw32 mingw32-binutils mingw32-runtime nsis
+# CSharp dependencies
+RUN apt-get update && apt-get install -y \
+      libmono-system-web2.0-cil \
+      mono-complete \
+      mono-devel \
+      mono-gmcs \
+      mono-xbuild
 
 # D dependencies
 # THRIFT-2916: DMD pinned to 2.065.0-0 due to regression in 2.066
 # THRIFT-3253: DMD pinned to 2.065.0-0 due to deprecations 2.067.1
-RUN apt-get install -y gcc-multilib xdg-utils && \
-    curl -sSL http://downloads.dlang.org/releases/2.x/2.065.0/dmd_2.065.0-0_amd64.deb -o /tmp/dmd_2.065.0-0_amd64.deb && \
+RUN apt-get update && apt-get install -y \
+      gcc-multilib \
+      xdg-utils \
+    && curl -sSL http://downloads.dlang.org/releases/2.x/2.065.0/dmd_2.065.0-0_amd64.deb -o /tmp/dmd_2.065.0-0_amd64.deb && \
     dpkg -i /tmp/dmd_2.065.0-0_amd64.deb && \
     rm /tmp/dmd_2.065.0-0_amd64.deb
 
+# Dart dependencies
+RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
+    curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list && \
+    apt-get update && apt-get install -y dart
+ENV PATH /usr/lib/dart/bin:$PATH
+
+# Lua dependencies
+RUN apt-get update && apt-get install -y \
+      lua5.2 \
+      lua5.2-dev
+
+# MinGW dependencies
+RUN apt-get update && apt-get install -y \
+      mingw32 \
+      mingw32-binutils \
+      mingw32-runtime \
+      nsis
+
 # Clean up
 RUN apt-get clean && \
     rm -rf /var/cache/apt/* && \
@@ -108,4 +185,7 @@
     rm -rf /tmp/* && \
     rm -rf /var/tmp/*
 
-WORKDIR $HOME
+ENV THRIFT_ROOT /thrift
+RUN mkdir -p $THRIFT_ROOT/src
+COPY scripts $THRIFT_ROOT
+WORKDIR $THRIFT_ROOT/src
diff --git a/build/docker/ubuntu/scripts/dpkg.sh b/build/docker/ubuntu/scripts/dpkg.sh
new file mode 100755
index 0000000..3ba0cd4
--- /dev/null
+++ b/build/docker/ubuntu/scripts/dpkg.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+set -ev
+
+dpkg-buildpackage -tc -us -uc
+ls -al ..