Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
8ac050fa
Commit
8ac050fa
authored
Dec 19, 2017
by
Matt Kwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Migrate Jenkins jobs to Kokoro
parent
860d693c
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
658 additions
and
0 deletions
+658
-0
Dockerfile
kokoro/linux/32-bit/Dockerfile
+143
-0
build.sh
kokoro/linux/32-bit/build.sh
+17
-0
continuous.cfg
kokoro/linux/32-bit/continuous.cfg
+5
-0
presubmit.cfg
kokoro/linux/32-bit/presubmit.cfg
+5
-0
Dockerfile
kokoro/linux/64-bit/Dockerfile
+244
-0
build.sh
kokoro/linux/64-bit/build.sh
+17
-0
continuous.cfg
kokoro/linux/64-bit/continuous.cfg
+5
-0
presubmit.cfg
kokoro/linux/64-bit/presubmit.cfg
+5
-0
build_and_run_docker.sh
kokoro/linux/build_and_run_docker.sh
+57
-0
make_test_output.py
kokoro/linux/make_test_output.py
+94
-0
pull_request_in_docker.sh
kokoro/linux/pull_request_in_docker.sh
+66
-0
No files found.
kokoro/linux/32-bit/Dockerfile
0 → 100644
View file @
8ac050fa
# This Dockerfile specifies the recipe for creating an image for the tests
# to run in.
#
# We install as many test dependencies here as we can, because these setup
# steps can be cached. They do *not* run every time we run the build.
# The Docker image is only rebuilt when the Dockerfile (ie. this file)
# changes.
# Base Dockerfile for gRPC dev images
FROM
32bit/debian:latest
# Apt source for php
RUN
echo
"deb http://ppa.launchpad.net/ondrej/php/ubuntu trusty main"
|
tee
/etc/apt/sources.list.d/various-php.list
&&
\
apt-key adv
--keyserver
keyserver.ubuntu.com
--recv-keys
F4FCBB07
# Install dependencies. We start with the basic ones require to build protoc
# and the C++ build
RUN
apt-get clean
&&
apt-get update
&&
apt-get
install
-y
--force-yes
\
autoconf
\
autotools-dev
\
build-essential
\
bzip2
\
ccache
\
curl
\
gcc
\
git
\
libc6
\
libc6-dbg
\
libc6-dev
\
libgtest-dev
\
libtool
\
make
\
parallel
\
time
\
wget
\
unzip
\
# -- For python --
python-setuptools \
python-pip \
python-dev \
# -- For C++ benchmarks --
cmake \
# -- For PHP --
php5.5 \
php5.5-dev \
php5.5-xml \
php5.6 \
php5.6-dev \
php5.6-xml \
php7.0 \
php7.0-dev \
php7.0-xml \
phpunit \
valgrind \
libxml2-dev \
&& apt-get clean
##################
# PHP dependencies.
RUN
wget http://am1.php.net/get/php-5.5.38.tar.bz2/from/this/mirror
RUN
mv
mirror php-5.5.38.tar.bz2
RUN
tar
-xvf
php-5.5.38.tar.bz2
RUN
cd
php-5.5.38
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-5.5-zts
&&
\
make
&&
make
install
&&
make clean
&&
cd
..
RUN
cd
php-5.5.38
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-5.5
&&
\
make
&&
make
install
&&
make clean
&&
cd
..
RUN
wget http://am1.php.net/get/php-5.6.30.tar.bz2/from/this/mirror
RUN
mv
mirror php-5.6.30.tar.bz2
RUN
tar
-xvf
php-5.6.30.tar.bz2
RUN
cd
php-5.6.30
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-5.6-zts
&&
\
make
&&
make
install
&&
cd
..
RUN
cd
php-5.6.30
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-5.6
&&
\
make
&&
make
install
&&
cd
..
RUN
wget http://am1.php.net/get/php-7.0.18.tar.bz2/from/this/mirror
RUN
mv
mirror php-7.0.18.tar.bz2
RUN
tar
-xvf
php-7.0.18.tar.bz2
RUN
cd
php-7.0.18
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-7.0-zts
&&
\
make
&&
make
install
&&
cd
..
RUN
cd
php-7.0.18
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-7.0
&&
\
make
&&
make
install
&&
cd
..
RUN
wget http://am1.php.net/get/php-7.1.4.tar.bz2/from/this/mirror
RUN
mv
mirror php-7.1.4.tar.bz2
RUN
tar
-xvf
php-7.1.4.tar.bz2
RUN
cd
php-7.1.4
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-7.1-zts
&&
\
make
&&
make
install
&&
cd
..
RUN
cd
php-7.1.4
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-7.1
&&
\
make
&&
make
install
&&
cd
..
RUN
php
-r
"copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN
php composer-setup.php
RUN
mv
composer.phar /usr/bin/composer
RUN
php
-r
"unlink('composer-setup.php');"
RUN
composer config
-g
--
disable-tls
true
RUN
composer config
-g
--
secure-http
false
RUN
cd
/tmp
&&
\
git clone https://github.com/google/protobuf.git
&&
\
cd
protobuf/php
&&
\
git reset
--hard
49b44bff2b6257a119f9c6a342d6151c736586b8
&&
\
ln
-sfn
/usr/local/php-5.5/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-5.5/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-5.5/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-5.5
&&
\
ln
-sfn
/usr/local/php-5.6/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-5.6/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-5.6/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-5.6
&&
\
ln
-sfn
/usr/local/php-7.0/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-7.0/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-7.0/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-7.0
&&
\
ln
-sfn
/usr/local/php-7.1/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-7.1/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-7.1/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-7.1
##################
# Python dependencies
# These packages exist in apt-get, but their versions are too old, so we have
# to get updates from pip.
RUN
pip
install
pip
--upgrade
RUN
pip
install
virtualenv tox yattag
##################
# Prepare ccache
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/gcc
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/g++
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/cc
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/c++
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/clang
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/clang++
# Define the default command.
CMD
["bash"]
kokoro/linux/32-bit/build.sh
0 → 100755
View file @
8ac050fa
#!/bin/bash
#
# This is the top-level script we give to Kokoro as the entry point for
# running the "pull request 32" project:
#
# This script selects a specific Dockerfile (for building a Docker image) and
# a script to run inside that image. Then we delegate to the general
# build_and_run_docker.sh script.
# Change to repo root
cd
$(
dirname
$0
)
/../../..
export
DOCKERFILE_DIR
=
kokoro/linux/32-bit
export
DOCKER_RUN_SCRIPT
=
kokoro/linux/pull_request_in_docker.sh
export
OUTPUT_DIR
=
testoutput
export
TEST_SET
=
"php_all_32"
./kokoro/linux/build_and_run_docker.sh
kokoro/linux/32-bit/continuous.cfg
0 → 100644
View file @
8ac050fa
# Config file for running tests in Kokoro
# Location of the build script in repository
build_file: "protobuf/kokoro/linux/32-bit/build.sh"
timeout_mins: 120
kokoro/linux/32-bit/presubmit.cfg
0 → 100644
View file @
8ac050fa
# Config file for running tests in Kokoro
# Location of the build script in repository
build_file: "protobuf/kokoro/linux/32-bit/build.sh"
timeout_mins: 120
kokoro/linux/64-bit/Dockerfile
0 → 100644
View file @
8ac050fa
# This Dockerfile specifies the recipe for creating an image for the tests
# to run in.
#
# We install as many test dependencies here as we can, because these setup
# steps can be cached. They do *not* run every time we run the build.
# The Docker image is only rebuilt when the Dockerfile (ie. this file)
# changes.
# Base Dockerfile for gRPC dev images
FROM
debian:latest
# Apt source for old Python versions.
RUN
echo
'deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu trusty main'
>
/etc/apt/sources.list.d/deadsnakes.list
&&
\
apt-key adv
--keyserver
keyserver.ubuntu.com
--recv-keys
DB82666C
# Apt source for Oracle Java.
RUN
echo
'deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main'
>
/etc/apt/sources.list.d/webupd8team-java-trusty.list
&&
\
apt-key adv
--keyserver
keyserver.ubuntu.com
--recv-keys
EEA14886
&&
\
echo
"oracle-java7-installer shared/accepted-oracle-license-v1-1 select true"
| debconf-set-selections
# Apt source for Mono
RUN
echo
"deb http://download.mono-project.com/repo/debian wheezy main"
|
tee
/etc/apt/sources.list.d/mono-xamarin.list
&&
\
echo
"deb http://download.mono-project.com/repo/debian wheezy-libjpeg62-compat main"
|
tee
-a
/etc/apt/sources.list.d/mono-xamarin.list
&&
\
apt-key adv
--keyserver
keyserver.ubuntu.com
--recv-keys
3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# Apt source for php
RUN
echo
"deb http://ppa.launchpad.net/ondrej/php/ubuntu trusty main"
|
tee
/etc/apt/sources.list.d/various-php.list
&&
\
apt-key adv
--keyserver
keyserver.ubuntu.com
--recv-keys
F4FCBB07
# Install dotnet SDK based on https://www.microsoft.com/net/core#debian
# (Ubuntu instructions need apt to support https)
RUN
apt-get update
&&
apt-get
install
-y
--force-yes
curl libunwind8 gettext
&&
\
curl
-sSL
-o
dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID
=
847105
&&
\
mkdir
-p
/opt/dotnet
&&
tar
zxf dotnet.tar.gz
-C
/opt/dotnet
&&
\
ln
-s
/opt/dotnet/dotnet /usr/local/bin
# Install dependencies. We start with the basic ones require to build protoc
# and the C++ build
RUN
apt-get clean
&&
apt-get update
&&
apt-get
install
-y
--force-yes
\
autoconf
\
autotools-dev
\
build-essential
\
bzip2
\
ccache
\
curl
\
gcc
\
git
\
libc6
\
libc6-dbg
\
libc6-dev
\
libgtest-dev
\
libtool
\
make
\
parallel
\
time
\
wget
\
# -- For csharp --
mono-devel \
referenceassemblies-pcl \
nunit \
# -- For all Java builds -- \
maven \
# -- For java_jdk6 -- \
# oops! not in jessie. too old? openjdk-6-jdk \
# -- For java_jdk7 -- \
openjdk-7-jdk \
# -- For java_oracle7 -- \
oracle-java7-installer \
# -- For python / python_cpp -- \
python-setuptools \
python-pip \
python-dev \
python2.6-dev \
python3.3-dev \
python3.4-dev \
# -- For Ruby --
ruby \
# -- For C++ benchmarks --
cmake \
# -- For PHP --
php5.6 \
php5.6-dev \
php5.6-xml \
php7.0 \
php7.0-dev \
php7.0-xml \
phpunit \
valgrind \
libxml2-dev \
&& apt-get clean
##################
# C# dependencies
RUN
wget www.nuget.org/NuGet.exe
-O
/usr/local/bin/nuget.exe
##################
# Python dependencies
# These packages exist in apt-get, but their versions are too old, so we have
# to get updates from pip.
RUN
pip
install
pip
--upgrade
RUN
pip
install
virtualenv tox yattag
##################
# Ruby dependencies
# Install rvm
RUN
gpg
--keyserver
hkp://keys.gnupg.net
--recv-keys
409B6B1796C275462A1703113804BB82D39DC0E3
RUN
\c
url
-sSL
https://get.rvm.io | bash
-s
stable
# Install Ruby 2.1, Ruby 2.2 and JRuby 1.7
RUN
/bin/bash
-l
-c
"rvm install ruby-2.1"
RUN
/bin/bash
-l
-c
"rvm install ruby-2.2"
RUN
/bin/bash
-l
-c
"rvm install jruby-1.7"
RUN
/bin/bash
-l
-c
"echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
RUN
/bin/bash
-l
-c
"echo 'export PATH=/usr/local/rvm/bin:
$PATH
' >> ~/.bashrc"
RUN
/bin/bash
-l
-c
"gem install bundler --no-ri --no-rdoc"
##################
# Java dependencies
# This step requires compiling protoc. :(
ENV
MAVEN_REPO /var/maven_local_repository
ENV
MVN mvn --batch-mode
RUN
cd
/tmp
&&
\
git clone https://github.com/google/protobuf.git
&&
\
cd
protobuf
&&
\
git reset
--hard
129a6e2aca95dcfb6c3e717d7b9cca1f104fde39
&&
\
./autogen.sh
&&
\
./configure
&&
\
make
-j4
&&
\
cd
java
&&
\
$MVN
install
dependency:go-offline
-Dmaven
.repo.local
=
$MAVEN_REPO
&&
\
cd
../javanano
&&
\
$MVN
install
dependency:go-offline
-Dmaven
.repo.local
=
$MAVEN_REPO
##################
# PHP dependencies.
RUN
wget http://am1.php.net/get/php-5.5.38.tar.bz2/from/this/mirror
RUN
mv
mirror php-5.5.38.tar.bz2
RUN
tar
-xvf
php-5.5.38.tar.bz2
RUN
cd
php-5.5.38
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-5.5-zts
&&
\
make
&&
make
install
&&
cd
..
RUN
cd
php-5.5.38
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-5.5
&&
\
make
&&
make
install
&&
cd
..
RUN
wget http://am1.php.net/get/php-5.6.30.tar.bz2/from/this/mirror
RUN
mv
mirror php-5.6.30.tar.bz2
RUN
tar
-xvf
php-5.6.30.tar.bz2
RUN
cd
php-5.6.30
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-5.6-zts
&&
\
make
&&
make
install
&&
cd
..
RUN
cd
php-5.6.30
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-5.6
&&
\
make
&&
make
install
&&
cd
..
RUN
wget http://am1.php.net/get/php-7.0.18.tar.bz2/from/this/mirror
RUN
mv
mirror php-7.0.18.tar.bz2
RUN
tar
-xvf
php-7.0.18.tar.bz2
RUN
cd
php-7.0.18
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-7.0-zts
&&
\
make
&&
make
install
&&
cd
..
RUN
cd
php-7.0.18
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-7.0
&&
\
make
&&
make
install
&&
cd
..
RUN
wget http://am1.php.net/get/php-7.1.4.tar.bz2/from/this/mirror
RUN
mv
mirror php-7.1.4.tar.bz2
RUN
tar
-xvf
php-7.1.4.tar.bz2
RUN
cd
php-7.1.4
&&
./configure
--enable-maintainer-zts
--prefix
=
/usr/local/php-7.1-zts
&&
\
make
&&
make
install
&&
cd
..
RUN
cd
php-7.1.4
&&
make clean
&&
./configure
--enable-bcmath
--prefix
=
/usr/local/php-7.1
&&
\
make
&&
make
install
&&
cd
..
RUN
php
-r
"copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN
php composer-setup.php
RUN
mv
composer.phar /usr/bin/composer
RUN
php
-r
"unlink('composer-setup.php');"
RUN
composer config
-g
--
disable-tls
true
RUN
composer config
-g
--
secure-http
false
RUN
cd
/tmp
&&
\
rm
-rf
protobuf
&&
\
git clone https://github.com/google/protobuf.git
&&
\
cd
protobuf
&&
\
git reset
--hard
49b44bff2b6257a119f9c6a342d6151c736586b8
&&
\
cd
php
&&
\
ln
-sfn
/usr/local/php-5.5/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-5.5/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-5.5/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-5.5
&&
\
ln
-sfn
/usr/local/php-5.6/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-5.6/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-5.6/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-5.6
&&
\
ln
-sfn
/usr/local/php-7.0/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-7.0/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-7.0/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-7.0
&&
\
ln
-sfn
/usr/local/php-7.1/bin/php /usr/bin/php
&&
\
ln
-sfn
/usr/local/php-7.1/bin/php-config /usr/bin/php-config
&&
\
ln
-sfn
/usr/local/php-7.1/bin/phpize /usr/bin/phpize
&&
\
composer
install
&&
\
mv
vendor /usr/local/vendor-7.1
##################
# Go dependencies.
RUN
apt-get
install
-y
\
# -- For go --
\
golang
##################
# Javascript dependencies.
RUN
apt-get
install
-y
\
# -- For javascript --
\
npm
##################
# Python 3.5 3.6 dependencies.
RUN
apt-get clean
&&
apt-get update
&&
apt-get
install
-y
--force-yes
\
python3.5-dev
\
python3.6-dev
\
&&
apt-get clean
# On Debian/Ubuntu, nodejs binary is named 'nodejs' because the name 'node'
# is taken by another legacy binary. We don't have that legacy binary and
# npm expects the binary to be named 'node', so we just create a symbol
# link here.
RUN
ln
-s
`
which nodejs
`
/usr/bin/node
##################
# Prepare ccache
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/gcc
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/g++
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/cc
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/c++
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/clang
RUN
ln
-s
/usr/bin/ccache /usr/local/bin/clang++
# Define the default command.
CMD
["bash"]
kokoro/linux/64-bit/build.sh
0 → 100755
View file @
8ac050fa
#!/bin/bash
#
# This is the top-level script we give to Kokoro as the entry point for
# running the "pull request" project:
#
# This script selects a specific Dockerfile (for building a Docker image) and
# a script to run inside that image. Then we delegate to the general
# build_and_run_docker.sh script.
# Change to repo root
cd
$(
dirname
$0
)
/../../..
export
DOCKERFILE_DIR
=
kokoro/linux/64-bit
export
DOCKER_RUN_SCRIPT
=
kokoro/linux/pull_request_in_docker.sh
export
OUTPUT_DIR
=
testoutput
export
TEST_SET
=
"csharp java_jdk7 javanano_jdk7 java_oracle7 javanano_oracle7 python python_cpp ruby_all javascript golang php_all"
./kokoro/linux/build_and_run_docker.sh
kokoro/linux/64-bit/continuous.cfg
0 → 100644
View file @
8ac050fa
# Config file for running tests in Kokoro
# Location of the build script in repository
build_file: "protobuf/kokoro/linux/64-bit/build.sh"
timeout_mins: 120
kokoro/linux/64-bit/presubmit.cfg
0 → 100644
View file @
8ac050fa
# Config file for running tests in Kokoro
# Location of the build script in repository
build_file: "protobuf/kokoro/linux/64-bit/build.sh"
timeout_mins: 120
kokoro/linux/build_and_run_docker.sh
0 → 100755
View file @
8ac050fa
#!/bin/bash
#
# Builds docker image and runs a command under it.
# This is a generic script that is configured with the following variables:
#
# DOCKERFILE_DIR - Directory in which Dockerfile file is located.
# DOCKER_RUN_SCRIPT - Script to run under docker (relative to protobuf repo root)
# OUTPUT_DIR - Directory that will be copied from inside docker after finishing.
# $@ - Extra args to pass to docker run
set
-ex
cd
$(
dirname
$0
)
/..
git_root
=
$(
pwd
)
cd
-
# Use image name based on Dockerfile location checksum
DOCKER_IMAGE_NAME
=
$(
basename
$DOCKERFILE_DIR
)
_
$(
sha1sum
$DOCKERFILE_DIR
/Dockerfile |
cut
-f1
-d
\
)
# Make sure docker image has been built. Should be instantaneous if so.
docker build
-t
$DOCKER_IMAGE_NAME
$DOCKERFILE_DIR
# Ensure existence of ccache directory
CCACHE_DIR
=
/tmp/protobuf-ccache
mkdir
-p
$CCACHE_DIR
# Choose random name for docker container
CONTAINER_NAME
=
"build_and_run_docker_
$(
uuidgen
)
"
# Run command inside docker
docker run
\
"
$@
"
\
-e
CCACHE_DIR
=
$CCACHE_DIR
\
-e
EXTERNAL_GIT_ROOT
=
"/var/local/jenkins/protobuf"
\
-e
TEST_SET
=
"
$TEST_SET
"
\
-e
THIS_IS_REALLY_NEEDED
=
'see https://github.com/docker/docker/issues/14203 for why docker is awful'
\
-v
"
$git_root
:/var/local/jenkins/protobuf:ro"
\
-v
$CCACHE_DIR
:
$CCACHE_DIR
\
-w
/var/local/git/protobuf
\
--name
=
$CONTAINER_NAME
\
$DOCKER_IMAGE_NAME
\
bash
-l
"/var/local/jenkins/protobuf/
$DOCKER_RUN_SCRIPT
"
||
FAILED
=
"true"
# Copy output artifacts
if
[
"
$OUTPUT_DIR
"
!=
""
]
then
docker
cp
"
$CONTAINER_NAME
:/var/local/git/protobuf/
$OUTPUT_DIR
"
"
$git_root
"
||
FAILED
=
"true"
fi
# remove the container, possibly killing it first
docker
rm
-f
$CONTAINER_NAME
||
true
if
[
"
$FAILED
"
!=
""
]
then
exit
1
fi
kokoro/linux/make_test_output.py
0 → 100644
View file @
8ac050fa
"""Gathers output from test runs and create an XML file in JUnit format.
The output files from the individual tests have been written in a directory
structure like:
$DIR/joblog (output from "parallel --joblog joblog")
$DIR/logs/1/cpp/stdout
$DIR/logs/1/cpp/stderr
$DIR/logs/1/csharp/stdout
$DIR/logs/1/csharp/stderr
$DIR/logs/1/java_jdk7/stdout
$DIR/logs/1/java_jdk7/stderr
etc.
This script bundles them into a single output XML file so Jenkins can show
detailed test results. It runs as the last step before the Jenkins build
finishes.
"""
import
os
import
sys
from
yattag
import
Doc
from
collections
import
defaultdict
def
readtests
(
basedir
):
tests
=
defaultdict
(
dict
)
# Sample input (note: separators are tabs).
#
# Seq Host Starttime Runtime Send Receive Exitval Signal Command
# 1 : 1456263838.313 0.005 0 0 0 0 echo A
with
open
(
basedir
+
"/joblog"
)
as
jobs
:
firstline
=
next
(
jobs
)
for
line
in
jobs
:
values
=
line
.
split
(
"
\t
"
)
name
=
values
[
8
]
.
split
()[
-
1
]
test
=
tests
[
name
]
test
[
"name"
]
=
name
test
[
"time"
]
=
values
[
3
]
exitval
=
values
[
6
]
if
int
(
exitval
):
# We don't have a more specific message. User should look at stderr.
test
[
"failure"
]
=
"TEST FAILURE"
else
:
test
[
"failure"
]
=
False
for
testname
in
os
.
listdir
(
basedir
+
"/logs/1"
):
test
=
tests
[
testname
]
with
open
(
basedir
+
"/logs/1/"
+
testname
+
"/stdout"
)
as
f
:
test
[
"stdout"
]
=
f
.
read
()
with
open
(
basedir
+
"/logs/1/"
+
testname
+
"/stderr"
)
as
f
:
test
[
"stderr"
]
=
f
.
read
()
# The cpp test is special since it doesn't run under parallel so doesn't show
# up in the job log.
tests
[
"cpp"
][
"name"
]
=
"cpp"
with
open
(
basedir
+
'/logs/1/cpp/build_time'
,
'r'
)
as
f
:
tests
[
"cpp"
][
"time"
]
=
f
.
read
()
.
strip
()
tests
[
"cpp"
][
"failure"
]
=
False
ret
=
tests
.
values
()
ret
.
sort
(
key
=
lambda
x
:
x
[
"name"
])
return
ret
def
genxml
(
tests
):
doc
,
tag
,
text
=
Doc
()
.
tagtext
()
with
tag
(
"testsuites"
):
with
tag
(
"testsuite"
,
name
=
"Protobuf Tests"
):
for
test
in
tests
:
with
tag
(
"testcase"
,
name
=
test
[
"name"
],
classname
=
test
[
"name"
],
time
=
test
[
"time"
]):
with
tag
(
"system-out"
):
text
(
test
[
"stdout"
])
with
tag
(
"system-err"
):
text
(
test
[
"stderr"
])
if
test
[
"failure"
]:
with
tag
(
"failure"
):
text
(
test
[
"failure"
])
return
doc
.
getvalue
()
sys
.
stderr
.
write
(
"make_test_output.py: writing XML from directory: "
+
sys
.
argv
[
1
]
+
"
\n
"
)
print
(
genxml
(
readtests
(
sys
.
argv
[
1
])))
kokoro/linux/pull_request_in_docker.sh
0 → 100755
View file @
8ac050fa
#!/bin/bash
#
# This is the script that runs inside Docker, once the image has been built,
# to execute all tests for the "pull request" project.
WORKSPACE_BASE
=
`
pwd
`
MY_DIR
=
"
$(
dirname
"
$0
"
)
"
TEST_SCRIPT
=
$MY_DIR
/../tests.sh
BUILD_DIR
=
/tmp/protobuf
set
-e
# exit immediately on error
set
-x
# display all commands
# The protobuf repository is mounted into our Docker image, but read-only.
# We clone into a directory inside Docker (this is faster than cp).
rm
-rf
$BUILD_DIR
mkdir
-p
$BUILD_DIR
cd
$BUILD_DIR
git clone /var/local/jenkins/protobuf
cd
protobuf
# Set up the directory where our test output is going to go.
OUTPUT_DIR
=
`
mktemp
-d
`
LOG_OUTPUT_DIR
=
$OUTPUT_DIR
/logs
mkdir
-p
$LOG_OUTPUT_DIR
/1/cpp
################################################################################
# cpp build needs to run first, non-parallelized, so that protoc is available
# for other builds.
# Output filenames to follow the overall scheme used by parallel, ie:
# $DIR/logs/1/cpp/stdout
# $DIR/logs/1/cpp/stderr
# $DIR/logs/1/csharp/stdout
# $DIR/logs/1/csharp/stderr
# $DIR/logs/1/java_jdk7/stdout
# $DIR/logs/1/java_jdk7/stderr
CPP_STDOUT
=
$LOG_OUTPUT_DIR
/1/cpp/stdout
CPP_STDERR
=
$LOG_OUTPUT_DIR
/1/cpp/stderr
# Time the C++ build, so we can put this info in the test output.
# It's important that we get /usr/bin/time (which supports -f and -o) and not
# the bash builtin "time" which doesn't.
TIME_CMD
=
"/usr/bin/time -f %e -o
$LOG_OUTPUT_DIR
/1/cpp/build_time"
$TIME_CMD
$TEST_SCRIPT
cpp
>
>(
tee
$CPP_STDOUT
)
2>
>(
tee
$CPP_STDERR
>
&2
)
# Other tests are run in parallel. TEST_SET is defined in
# buildcmds/pull_request{_32}.sh
parallel
--results
$LOG_OUTPUT_DIR
--joblog
$OUTPUT_DIR
/joblog
$TEST_SCRIPT
:::
\
$TEST_SET
\
||
true
# Process test results even if tests fail.
cat
$OUTPUT_DIR
/joblog
# The directory that is copied from Docker back into the Jenkins workspace.
COPY_FROM_DOCKER
=
/var/local/git/protobuf/testoutput
mkdir
-p
$COPY_FROM_DOCKER
TESTOUTPUT_XML_FILE
=
$COPY_FROM_DOCKER
/testresults.xml
# Process all the output files from "parallel" and package them into a single
# .xml file with detailed, broken-down test output.
python
$MY_DIR
/make_test_output.py
$OUTPUT_DIR
>
$TESTOUTPUT_XML_FILE
ls
-l
$TESTOUTPUT_XML_FILE
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment