From 8640f92c24a22bd636b22e533a18db8648cf9a17 Mon Sep 17 00:00:00 2001
From: Jan Tattermusch <jtattermusch@google.com>
Date: Mon, 1 Feb 2016 18:58:46 -0800
Subject: add artifact builder for python

---
 .../dockerfile/grpc_artifact_linux_x64/Dockerfile  | 14 +++++++
 .../dockerfile/grpc_artifact_linux_x86/Dockerfile  | 14 +++++++
 tools/run_tests/artifact_targets.py                | 32 ++++++++++++++-
 tools/run_tests/build_artifact_python.sh           | 47 ++++++++++++++++++++++
 4 files changed, 106 insertions(+), 1 deletion(-)
 create mode 100755 tools/run_tests/build_artifact_python.sh

(limited to 'tools')

diff --git a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile
index de40247a73..80c719dff7 100644
--- a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile
@@ -58,6 +58,20 @@ RUN apt-get update && apt-get install -y \
   wget \
   zip && apt-get clean
 
+
+##################
+# Python dependencies
+
+RUN apt-get update && apt-get install -y \
+    python-all-dev \
+    python3-all-dev \
+    python-pip
+
+RUN pip install pip --upgrade
+RUN pip install virtualenv
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 tox
+
+
 RUN mkdir /var/local/jenkins
 
 # Define the default command.
diff --git a/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile b/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile
index 774b4523a1..e033a81ace 100644
--- a/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile
@@ -58,6 +58,20 @@ RUN apt-get update && apt-get install -y \
   wget \
   zip && apt-get clean
 
+
+##################
+# Python dependencies
+
+RUN apt-get update && apt-get install -y \
+    python-all-dev \
+    python3-all-dev \
+    python-pip
+
+# Install Python packages from PyPI
+RUN pip install pip --upgrade
+RUN pip install virtualenv
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 tox
+
 RUN mkdir /var/local/jenkins
 
 # Define the default command.
diff --git a/tools/run_tests/artifact_targets.py b/tools/run_tests/artifact_targets.py
index a34fa8e4fa..32a98c90b8 100644
--- a/tools/run_tests/artifact_targets.py
+++ b/tools/run_tests/artifact_targets.py
@@ -80,6 +80,34 @@ def macos_arch_env(arch):
   return {'CFLAGS': arch_arg, 'LDFLAGS': arch_arg}
 
 
+class PythonArtifact:
+  """Builds Python artifacts."""
+
+  def __init__(self, platform, arch):
+    self.name = 'python_%s_%s' % (platform, arch)
+    self.platform = platform
+    self.arch = arch
+    self.labels = ['artifact', 'python', platform, arch]
+
+  def pre_build_jobspecs(self):
+      return []
+
+  def build_jobspec(self):
+    if self.platform == 'windows':
+      raise Exception('Not supported yet.')
+    else:
+      if self.platform == 'linux':
+        return create_docker_jobspec(self.name,
+            'tools/dockerfile/grpc_artifact_linux_%s' % self.arch,
+            'tools/run_tests/build_artifact_python.sh')
+      else:
+        return create_jobspec(self.name,
+                              ['tools/run_tests/build_artifact_python.sh'])
+
+  def __str__(self):
+    return self.name
+
+
 class CSharpExtArtifact:
   """Builds C# native extension library"""
 
@@ -134,4 +162,6 @@ def targets():
           CSharpExtArtifact('macos', 'x86'),
           CSharpExtArtifact('macos', 'x64'),
           CSharpExtArtifact('windows', 'x86'),
-          CSharpExtArtifact('windows', 'x64')]
+          CSharpExtArtifact('windows', 'x64'),
+          PythonArtifact('linux', 'x86'),
+          PythonArtifact('linux', 'x64')]
diff --git a/tools/run_tests/build_artifact_python.sh b/tools/run_tests/build_artifact_python.sh
new file mode 100755
index 0000000000..0ff6b2f8c0
--- /dev/null
+++ b/tools/run_tests/build_artifact_python.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+# Copyright 2016, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -ex
+
+cd $(dirname $0)/../..
+
+pip install --upgrade six
+pip install --upgrade setuptools
+
+pip install -rrequirements.txt
+
+GRPC_PYTHON_BUILD_WITH_CYTHON=1 python setup.py \
+    bdist_wheel \
+    sdist \
+    bdist_egg_grpc_custom
+
+mkdir -p artifacts
+
+cp -r dist/* artifacts
\ No newline at end of file
-- 
cgit v1.2.3