aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/distrib/python/grpcio_tools/grpc_version.py2
-rw-r--r--tools/dockerfile/grpc_artifact_android_ndk/Dockerfile31
-rw-r--r--tools/doxygen/Doxyfile.c++2
-rw-r--r--tools/doxygen/Doxyfile.c++.internal2
-rw-r--r--tools/internal_ci/linux/grpc_build_artifacts_extra_release.cfg26
-rw-r--r--tools/internal_ci/linux/grpc_publish_packages.sh250
-rw-r--r--tools/package_hosting/404.html1
-rw-r--r--tools/package_hosting/build-201807.xsl114
-rw-r--r--tools/package_hosting/dirindex.css16
-rw-r--r--tools/package_hosting/home.xsl86
-rw-r--r--tools/package_hosting/style.css76
-rwxr-xr-xtools/package_hosting/upload_web_assets.sh30
-rwxr-xr-xtools/profiling/ios_bin/binary_size.py2
-rw-r--r--tools/run_tests/artifacts/artifact_targets.py19
-rwxr-xr-xtools/run_tests/artifacts/build_artifact_csharp_android.sh1
-rwxr-xr-xtools/run_tests/artifacts/build_artifact_csharp_ios.sh23
-rw-r--r--tools/run_tests/generated/sources_and_headers.json82
-rw-r--r--tools/run_tests/generated/tests.json24
18 files changed, 684 insertions, 103 deletions
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index ae249e7386..ccb69a8ebc 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -14,4 +14,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
-VERSION = '1.14.0.dev0'
+VERSION = '1.15.0.dev0'
diff --git a/tools/dockerfile/grpc_artifact_android_ndk/Dockerfile b/tools/dockerfile/grpc_artifact_android_ndk/Dockerfile
index 77b6acfb16..be96f131f9 100644
--- a/tools/dockerfile/grpc_artifact_android_ndk/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_android_ndk/Dockerfile
@@ -12,9 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Docker file for building gRPC artifacts.
+# Docker file for building gRPC artifacts for Android.
-# Recent enough cmake (>=3.9) needed by Android SDK
FROM debian:sid
RUN apt-get update && apt-get install -y debian-keyring && apt-key update
@@ -47,20 +46,26 @@ RUN apt-get update && apt-key update && apt-get install -y \
wget \
zip && apt-get clean
-# Cmake for cross-compilation
-RUN apt-get update && apt-get install -y cmake golang && apt-get clean
+# golang needed to build BoringSSL with cmake
+RUN apt-get update && apt-get install -y golang && apt-get clean
-##################
-# Android NDK
+# Java required by Android SDK
+RUN apt-get update && apt-get -y install openjdk-8-jdk && apt-get clean
-# Download and install Android NDK
-RUN wget -q https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip -O android_ndk.zip \
- && unzip -q android_ndk.zip \
- && rm android_ndk.zip \
- && mv ./android-ndk-r16b /opt
-ENV ANDROID_NDK_PATH /opt/android-ndk-r16b
+# Install Android SDK
+ENV ANDROID_SDK_VERSION 4333796
+RUN mkdir -p /opt/android-sdk && cd /opt/android-sdk && \
+ wget -q https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_VERSION}.zip && \
+ unzip -q sdk-tools-linux-${ANDROID_SDK_VERSION}.zip && \
+ rm sdk-tools-linux-${ANDROID_SDK_VERSION}.zip
+ENV ANDROID_SDK_PATH /opt/android-sdk
-RUN apt-get update && apt-get install -y libpthread-stubs0-dev && apt-get clean
+# Install Android NDK and cmake using sdkmanager
+RUN mkdir -p ~/.android && touch ~/.android/repositories.cfg
+RUN yes | ${ANDROID_SDK_PATH}/tools/bin/sdkmanager --licenses # accept all licenses
+RUN ${ANDROID_SDK_PATH}/tools/bin/sdkmanager ndk-bundle 'cmake;3.6.4111459'
+ENV ANDROID_NDK_PATH ${ANDROID_SDK_PATH}/ndk-bundle
+ENV ANDROID_SDK_CMAKE ${ANDROID_SDK_PATH}/cmake/3.6.4111459/bin/cmake
RUN mkdir /var/local/jenkins
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index 322ab5eb98..2f06bda016 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.14.0-dev
+PROJECT_NUMBER = 1.15.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index ba322a90a5..a46ebe6197 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.14.0-dev
+PROJECT_NUMBER = 1.15.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/tools/internal_ci/linux/grpc_build_artifacts_extra_release.cfg b/tools/internal_ci/linux/grpc_build_artifacts_extra_release.cfg
new file mode 100644
index 0000000000..619e3ea3a9
--- /dev/null
+++ b/tools/internal_ci/linux/grpc_build_artifacts_extra_release.cfg
@@ -0,0 +1,26 @@
+# Copyright 2017 gRPC authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Config file for the internal CI (in protobuf text format)
+
+# Location of the continuous shell script in repository.
+build_file: "grpc/tools/internal_ci/linux/grpc_build_artifacts_extra.sh"
+timeout_mins: 240
+action {
+ define_artifacts {
+ regex: "**/*sponge_log.xml"
+ regex: "github/grpc/reports/**"
+ regex: "github/grpc/artifacts/**"
+ }
+}
diff --git a/tools/internal_ci/linux/grpc_publish_packages.sh b/tools/internal_ci/linux/grpc_publish_packages.sh
index 89da36987e..fecb9a5e09 100644
--- a/tools/internal_ci/linux/grpc_publish_packages.sh
+++ b/tools/internal_ci/linux/grpc_publish_packages.sh
@@ -17,94 +17,214 @@ set -ex
shopt -s nullglob
-export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json
-
-GCS_ROOT=gs://packages.grpc.io
-MANIFEST_FILE=index.xml
-ARCHIVE_UUID=${KOKORO_BUILD_ID:-$(uuidgen)}
-GIT_BRANCH_NAME=master #${KOKORO_GITHUB_COMMIT:-master}
-GIT_COMMIT=${KOKORO_GIT_COMMIT:-unknown}
-ARCHIVE_TIMESTAMP=$(date -Iseconds)
-TARGET_DIR=$(mktemp -d grpc_publish_packages.sh.XXXX)
-YEAR_MONTH_PREFIX=$(date "+%Y/%m")
-YEAR_PREFIX=${YEAR_MONTH_PREFIX%%/*}
-UPLOAD_ROOT=$TARGET_DIR/$YEAR_PREFIX
-RELATIVE_PATH=$YEAR_MONTH_PREFIX/$ARCHIVE_UUID
-BUILD_ROOT=$TARGET_DIR/$RELATIVE_PATH
-
-LINUX_PACKAGES=$KOKORO_GFILE_DIR/github/grpc/artifacts
-WINDOWS_PACKAGES=$KOKORO_GFILE_DIR/github/grpc/artifacts
-# TODO(mmx): enable linux_extra
-# LINUX_EXTRA_PACKAGES=$KOKORO_GFILE_DIR/github/grpc/artifacts
-
-PYTHON_PACKAGES=(
- "$LINUX_PACKAGES"/grpcio-[0-9]*.whl
- "$LINUX_PACKAGES"/grpcio-[0-9]*.tar.gz
- "$LINUX_PACKAGES"/grpcio_tools-[0-9]*.whl
- "$LINUX_PACKAGES"/grpcio-tools-[0-9]*.tar.gz
- "$LINUX_PACKAGES"/grpcio-health-checking-[0-9]*.tar.gz
- "$LINUX_PACKAGES"/grpcio-reflection-[0-9]*.tar.gz
- "$LINUX_PACKAGES"/grpcio-testing-[0-9]*.tar.gz
- #"$LINUX_EXTRA_PACKAGES"/grpcio-[0-9]*.whl
- #"$LINUX_EXTRA_PACKAGES"/grpcio_tools-[0-9]*.whl
+INPUT_ARTIFACTS=$KOKORO_GFILE_DIR/github/grpc/artifacts
+INDEX_FILENAME=index.xml
+
+BUILD_ID=${KOKORO_BUILD_ID:-$(uuidgen)}
+BUILD_BRANCH_NAME=master
+BUILD_GIT_COMMIT=${KOKORO_GIT_COMMIT:-unknown}
+BUILD_TIMESTAMP=$(date -Iseconds)
+BUILD_RELPATH=$(date "+%Y/%m")/$BUILD_ID/
+
+GCS_ROOT=gs://packages.grpc.io/
+GCS_ARCHIVE_PREFIX=archive/
+GCS_ARCHIVE_ROOT=$GCS_ROOT$GCS_ARCHIVE_PREFIX
+GCS_INDEX=$GCS_ROOT$INDEX_FILENAME
+
+LOCAL_STAGING_TEMPDIR=$(mktemp -d)
+LOCAL_BUILD_ROOT=$LOCAL_STAGING_TEMPDIR/$BUILD_RELPATH
+LOCAL_BUILD_INDEX=$LOCAL_BUILD_ROOT$INDEX_FILENAME
+
+mkdir -p "$LOCAL_BUILD_ROOT"
+
+find "$INPUT_ARTIFACTS" -type f
+
+# protoc Plugins
+PROTOC_PLUGINS_ZIPPED_PACKAGES=$(mktemp -d)
+for zip_dir in protoc_windows_{x86,x64}
+do
+ zip -jr "$PROTOC_PLUGINS_ZIPPED_PACKAGES/$zip_dir.zip" "$INPUT_ARTIFACTS/$zip_dir/"*
+done
+for tar_dir in protoc_{linux,macos}_{x86,x64}
+do
+ chmod +x "$INPUT_ARTIFACTS/$tar_dir"/*
+ tar -cvzf "$PROTOC_PLUGINS_ZIPPED_PACKAGES/$tar_dir.tar.gz" -C "$INPUT_ARTIFACTS/$tar_dir" .
+done
+
+PROTOC_PACKAGES=(
+ "$PROTOC_PLUGINS_ZIPPED_PACKAGES"/protoc_windows_{x86,x64}.zip
+ "$PROTOC_PLUGINS_ZIPPED_PACKAGES"/protoc_{linux,macos}_{x86,x64}.tar.gz
)
-PHP_PACKAGES=(
- "$LINUX_PACKAGES"/grpc-[0-9]*.tgz
+# C#
+UNZIPPED_CSHARP_PACKAGES=$(mktemp -d)
+unzip "$INPUT_ARTIFACTS/csharp_nugets_windows_dotnetcli.zip" -d "$UNZIPPED_CSHARP_PACKAGES"
+CSHARP_PACKAGES=(
+ "$UNZIPPED_CSHARP_PACKAGES"/*
)
-RUBY_PACKAGES=(
- "$LINUX_PACKAGES"/grpc-[0-9]*.gem
- "$LINUX_PACKAGES"/grpc-tools-[0-9]*.gem
+# Python
+PYTHON_GRPCIO_PACKAGES=(
+ "$INPUT_ARTIFACTS"/grpcio-[0-9]*.tar.gz
+ "$INPUT_ARTIFACTS"/grpcio-[0-9]*.whl
+ "$INPUT_ARTIFACTS"/python_linux_extra_arm*/grpcio-[0-9]*.whl
+)
+PYTHON_GRPCIO_TOOLS_PACKAGES=(
+ "$INPUT_ARTIFACTS"/grpcio-tools-[0-9]*.tar.gz
+ "$INPUT_ARTIFACTS"/grpcio_tools-[0-9]*.whl
+ "$INPUT_ARTIFACTS"/python_linux_extra_arm*/grpcio_tools-[0-9]*.whl
+)
+PYTHON_GRPCIO_HEALTH_CHECKING_PACKAGES=(
+ "$INPUT_ARTIFACTS"/grpcio-health-checking-[0-9]*.tar.gz
+)
+PYTHON_GRPCIO_REFLECTION_PACKAGES=(
+ "$INPUT_ARTIFACTS"/grpcio-reflection-[0-9]*.tar.gz
+)
+PYTHON_GRPCIO_TESTING_PACKAGES=(
+ "$INPUT_ARTIFACTS"/grpcio-testing-[0-9]*.tar.gz
)
-CSHARP_PACKAGES=(
- "$WINDOWS_PACKAGES"/csharp_nugets_windows_dotnetcli.zip
+# PHP
+PHP_PACKAGES=(
+ "$INPUT_ARTIFACTS"/grpc-[0-9]*.tgz
+)
+
+# Ruby
+RUBY_PACKAGES=(
+ "$INPUT_ARTIFACTS"/grpc-[0-9]*.gem
+ "$INPUT_ARTIFACTS"/grpc-tools-[0-9]*.gem
)
function add_to_manifest() {
- local xml_type=$1
- local xml_name
- xml_name=$(basename "$2")
- local xml_sha256
- xml_sha256=$(openssl sha256 -r "$2" | cut -d " " -f 1)
- cp "$2" "$BUILD_ROOT"
- echo "<artifact type='$xml_type' name='$xml_name' sha256='$xml_sha256' />"
+ local artifact_type=$1
+ local artifact_file=$2
+ local artifact_prefix=$3
+ local artifact_name
+ artifact_name=$(basename "$artifact_file")
+ local artifact_size
+ artifact_size=$(stat -c%s "$artifact_file")
+ local artifact_sha256
+ artifact_sha256=$(openssl sha256 -r "$artifact_file" | cut -d " " -f 1)
+ local artifact_target=$LOCAL_BUILD_ROOT/$artifact_type/$artifact_prefix
+ mkdir -p "$artifact_target"
+ cp "$artifact_file" "$artifact_target"
+ cat <<EOF
+ <artifact name='$artifact_name'
+ type='$artifact_type'
+ path='$artifact_type/$artifact_prefix$artifact_name'
+ size='$artifact_size'
+ sha256='$artifact_sha256' />
+EOF
}
-mkdir -p "$BUILD_ROOT"
-
{
cat <<EOF
<?xml version="1.0"?>
-<?xml-stylesheet href="/web-assets/build.xsl" type="text/xsl"?>
+<?xml-stylesheet href="/web-assets/build-201807.xsl" type="text/xsl"?>
+<build id='$BUILD_ID' timestamp='$BUILD_TIMESTAMP' version="201807">
+ <metadata>
+ <project>gRPC</project>
+ <repository>https://github.com/grpc/grpc</repository>
+ <branch>$BUILD_BRANCH_NAME</branch>
+ <commit>$BUILD_GIT_COMMIT</commit>
+ </metadata>
+ <artifacts>
EOF
- echo "<build id='$ARCHIVE_UUID' timestamp='$ARCHIVE_TIMESTAMP'>"
- echo "<metadata>"
- echo "<branch>$GIT_BRANCH_NAME</branch>"
- echo "<commit>$GIT_COMMIT</commit>"
- echo "</metadata><artifacts>"
- for pkg in "${PYTHON_PACKAGES[@]}"; do add_to_manifest python "$pkg"; done
+ for pkg in "${PROTOC_PACKAGES[@]}"; do add_to_manifest protoc "$pkg"; done
for pkg in "${CSHARP_PACKAGES[@]}"; do add_to_manifest csharp "$pkg"; done
for pkg in "${PHP_PACKAGES[@]}"; do add_to_manifest php "$pkg"; done
+ for pkg in "${PYTHON_GRPCIO_PACKAGES[@]}"; do add_to_manifest python "$pkg" grpcio/; done
+ for pkg in "${PYTHON_GRPCIO_TOOLS_PACKAGES[@]}"; do add_to_manifest python "$pkg" grpcio-tools/; done
+ for pkg in "${PYTHON_GRPCIO_HEALTH_CHECKING_PACKAGES[@]}"; do add_to_manifest python "$pkg" grpcio-health-checking/; done
+ for pkg in "${PYTHON_GRPCIO_REFLECTION_PACKAGES[@]}"; do add_to_manifest python "$pkg" grpcio-reflection/; done
+ for pkg in "${PYTHON_GRPCIO_TESTING_PACKAGES[@]}"; do add_to_manifest python "$pkg" grpcio-testing/; done
for pkg in "${RUBY_PACKAGES[@]}"; do add_to_manifest ruby "$pkg"; done
- echo "</artifacts></build>"
-}> "$BUILD_ROOT/$MANIFEST_FILE"
+ cat <<EOF
+ </artifacts>
+</build>
+EOF
+}> "$LOCAL_BUILD_INDEX"
+
+LOCAL_BUILD_INDEX_SIZE=$(stat -c%s "$LOCAL_BUILD_INDEX")
+LOCAL_BUILD_INDEX_SHA256=$(openssl sha256 -r "$LOCAL_BUILD_INDEX" | cut -d " " -f 1)
-BUILD_XML_SHA=$(openssl sha256 -r "$BUILD_ROOT/$MANIFEST_FILE" | cut -d " " -f 1)
+OLD_INDEX=$(mktemp)
+NEW_INDEX=$(mktemp)
-PREV_HOME=$(mktemp old-XXXXX-$MANIFEST_FILE)
-NEW_HOME=$(mktemp new-XXXXX-$MANIFEST_FILE)
-gsutil cp "$GCS_ROOT/$MANIFEST_FILE" "$PREV_HOME"
+# Download the current /index.xml into $OLD_INDEX
+gsutil cp "$GCS_INDEX" "$OLD_INDEX"
{
- head --lines=4 "$PREV_HOME"
- echo "<build id='$ARCHIVE_UUID' timestamp='$ARCHIVE_TIMESTAMP' branch='$GIT_BRANCH_NAME' commit='$GIT_COMMIT' manifest='archive/$RELATIVE_PATH/$MANIFEST_FILE' manifest-sha256='$BUILD_XML_SHA' />"
- tail --lines=+5 "$PREV_HOME"
-}> "$NEW_HOME"
+ # we want to add an entry as the first child under <builds> tag
+ # we can get by without a real XML parser by rewriting the header,
+ # injecting our new tag, and then dumping the rest of the file as is.
+ cat <<EOF
+<?xml version="1.0"?>
+<?xml-stylesheet href="/web-assets/home.xsl" type="text/xsl"?>
+<packages>
+ <builds>
+ <build id='$BUILD_ID'
+ timestamp='$BUILD_TIMESTAMP'
+ branch='$BUILD_BRANCH_NAME'
+ commit='$BUILD_GIT_COMMIT'
+ path='$GCS_ARCHIVE_PREFIX$BUILD_RELPATH$INDEX_FILENAME'
+ size='$LOCAL_BUILD_INDEX_SIZE'
+ sha256='$LOCAL_BUILD_INDEX_SHA256' />
+EOF
+ tail --lines=+5 "$OLD_INDEX"
+}> "$NEW_INDEX"
-gsutil -m cp -r "$UPLOAD_ROOT" "$GCS_ROOT/archive"
-gsutil -h "Content-Type:application/xml" cp "$NEW_HOME" "$GCS_ROOT/$MANIFEST_FILE"
+function generate_directory_index()
+{
+ local target_dir=$1
+ local current_directory_name
+ current_directory_name=$(basename "$target_dir")
+ cat <<EOF
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>Index of $current_directory_name - packages.grpc.io</title>
+ <link rel="stylesheet" type="text/css" href="/web-assets/dirindex.css" />
+ </head>
+ <body>
+ <h1>Index of <a href="#"><code>$current_directory_name</code></a></h1>
+ <ul>
+ <li><a href="#">.</a></li>
+ <li><a href="..">..</a></li>
+EOF
+
+(
+ cd "$target_dir"
+ find * -maxdepth 0 -type d -print | sort | while read -r line
+ do
+ echo " <li><a href='$line/'>$line/</a></li>"
+ done
+ find * -maxdepth 0 -type f -print | sort | while read -r line
+ do
+ echo " <li><a href='$line'>$line</a></li>"
+ done
+)
+
+cat <<EOF
+ </ul>
+ </body>
+</html>
+EOF
+}
+
+# Upload the current build artifacts
+gsutil -m cp -r "$LOCAL_STAGING_TEMPDIR/${BUILD_RELPATH%%/*}" "$GCS_ARCHIVE_ROOT"
+# Upload directory indicies for subdirectories
+(
+ cd "$LOCAL_BUILD_ROOT"
+ find * -type d | while read -r directory
+ do
+ generate_directory_index "$directory" | gsutil -h 'Content-Type:text/html' cp - "$GCS_ARCHIVE_ROOT$BUILD_RELPATH$directory/$INDEX_FILENAME"
+ done
+)
+# Upload the new /index.xml
+gsutil -h "Content-Type:application/xml" cp "$NEW_INDEX" "$GCS_INDEX"
diff --git a/tools/package_hosting/404.html b/tools/package_hosting/404.html
new file mode 100644
index 0000000000..44d986c4b0
--- /dev/null
+++ b/tools/package_hosting/404.html
@@ -0,0 +1 @@
+404 Not Found
diff --git a/tools/package_hosting/build-201807.xsl b/tools/package_hosting/build-201807.xsl
new file mode 100644
index 0000000000..69a190446f
--- /dev/null
+++ b/tools/package_hosting/build-201807.xsl
@@ -0,0 +1,114 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:template match="//build">
+ <html>
+ <head>
+ <title>Artifacts for gRPC Build <xsl:value-of select="@id"/> </title>
+ <link rel="stylesheet" type="text/css" href="/web-assets/style.css" />
+ <link rel="apple-touch-icon" href="/web-assets/favicons/apple-touch-icon.png" sizes="180x180" />
+ <link rel="icon" type="image/png" href="/web-assets/favicons/android-chrome-192x192.png" sizes="192x192" />
+ <link rel="icon" type="image/png" href="/web-assets/favicons/favicon-32x32.png" sizes="32x32" />
+ <link rel="icon" type="image/png" href="/web-assets/favicons/favicon-16x16.png" sizes="16x16" />
+ <link rel="manifest" href="/web-assets/favicons/manifest.json" />
+ <link rel="mask-icon" href="/web-assets/favicons/safari-pinned-tab.svg" color="#2DA6B0" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/web-assets/favicons/mstile-150x150.png" />
+
+ <meta name="og:title" content="gRPC Package Build"/>
+ <meta name="og:image" content="https://grpc.io/img/grpc_square_reverse_4x.png"/>
+ <meta name="og:description" content="gRPC Package Build"/>
+ </head>
+ <body bgcolor="#ffffff">
+ <div id="topbar">
+ <span class="title">Artifacts for gRPC Build <xsl:value-of select="@id"/></span>
+ </div>
+ <div id="main">
+ <div id="metadata">
+ <span class="fieldname">Build: </span> <a href='#'><xsl:value-of select="@id"/></a>
+ [<a href="https://source.cloud.google.com/results/invocations/{@id}">invocation</a>]<br />
+ <span class="fieldname">Timestamp: </span>
+ <xsl:value-of select="@timestamp"/> <br />
+ <span class="fieldname">Branch: </span>
+ <a href="https://github.com/grpc/grpc/tree/{./metadata/branch[text()]}">
+ <xsl:value-of select="./metadata/branch[text()]" />
+ </a><br />
+ <span class="fieldname">Commit: </span>
+ <a href="https://github.com/grpc/grpc/tree/{./metadata/commit[text()]}">
+ <xsl:value-of select="./metadata/commit[text()]" /><br /></a>
+ </div>
+ <xsl:apply-templates select="artifacts" />
+ <br />
+ <br />
+
+ <p class="description"><a href="https://grpc.io">gRPC</a> is a <a href="https://www.cncf.io" class="external">Cloud Native Computing Foundation</a> project. <a href="https://policies.google.com/privacy" class="external">Privacy Policy</a>.</p>
+ <p class="description">
+ Copyright &#169;&#160;<xsl:value-of select="substring(@timestamp, 1, 4)" />&#160;<a href="https://github.com/grpc/grpc/blob/{./metadata/commit[text()]}/AUTHORS">The gRPC Authors</a></p>
+ <br />
+ <br />
+ </div>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="artifacts">
+<h2> gRPC <code>protoc</code> Plugins </h2>
+<table>
+<xsl:apply-templates select="artifact[@type='protoc']">
+ <xsl:sort select="artifact/@name" />
+ </xsl:apply-templates>
+</table>
+
+<h2> C# </h2>
+<table>
+<xsl:apply-templates select="artifact[@type='csharp']">
+ <xsl:sort select="artifact/@name" />
+ </xsl:apply-templates>
+</table>
+
+<h2> PHP </h2>
+<table>
+<xsl:apply-templates select="artifact[@type='php']">
+ <xsl:sort select="artifact/@name" />
+ </xsl:apply-templates>
+</table>
+
+<h2> Python </h2>
+<script type="text/javascript">
+// <![CDATA[
+var pythonRepoLink = document.createElement("a");
+pythonRepoLink.href = './python';
+var pythonRepo = pythonRepoLink.href;
+document.write("<p><code>" +
+"$ pip install --pre --upgrade --force-reinstall --extra-index-url \\<br />" +
+"&nbsp;&nbsp;&nbsp;&nbsp;<a href='" + pythonRepo + "'>" + pythonRepo + "</a> \\<br />" +
+"&nbsp;&nbsp;&nbsp;&nbsp;grpcio grpcio-{tools,health-checking,reflection,testing}</code></p>");
+// ]]>
+</script>
+<table>
+ <xsl:apply-templates select="artifact[@type='python']">
+ <xsl:sort select="artifact/@name" />
+ </xsl:apply-templates>
+</table>
+
+<h2> Ruby </h2>
+<table>
+<xsl:apply-templates select="artifact[@type='ruby']">
+ <xsl:sort select="artifact/@name" />
+ </xsl:apply-templates>
+</table>
+
+</xsl:template>
+
+
+<xsl:template match="artifact">
+<tr>
+<td class="name"> <a href="{@path}"><xsl:value-of select="@name" /></a> </td>
+<td class="hash"> <xsl:value-of select="@sha256"/> </td>
+</tr>
+</xsl:template>
+
+<xsl:template match="metadata">
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/tools/package_hosting/dirindex.css b/tools/package_hosting/dirindex.css
new file mode 100644
index 0000000000..6c4b04ea32
--- /dev/null
+++ b/tools/package_hosting/dirindex.css
@@ -0,0 +1,16 @@
+ul {
+ list-style-type: none;
+}
+a{
+ text-decoration: none;
+}
+a:hover {
+ text-decoration: underline;
+}
+ul li a {
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', 'Courier New', Courier, monospace
+}
+h1 {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif
+}
+
diff --git a/tools/package_hosting/home.xsl b/tools/package_hosting/home.xsl
new file mode 100644
index 0000000000..3f79303b1b
--- /dev/null
+++ b/tools/package_hosting/home.xsl
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:template match="//packages">
+ <html>
+ <head>
+ <title>gRPC Packages</title>
+ <link rel="stylesheet" type="text/css" href="/web-assets/style.css" />
+ <link rel="apple-touch-icon" href="/web-assets/favicons/apple-touch-icon.png" sizes="180x180" />
+ <link rel="icon" type="image/png" href="/web-assets/favicons/android-chrome-192x192.png" sizes="192x192" />
+ <link rel="icon" type="image/png" href="/web-assets/favicons/favicon-32x32.png" sizes="32x32" />
+ <link rel="icon" type="image/png" href="/web-assets/favicons/favicon-16x16.png" sizes="16x16" />
+ <link rel="manifest" href="/web-assets/favicons/manifest.json" />
+ <link rel="mask-icon" href="/web-assets/favicons/safari-pinned-tab.svg" color="#2DA6B0" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/web-assets/favicons/mstile-150x150.png" />
+ <meta name="og:title" content="gRPC Packages"/>
+ <meta name="og:image" content="https://grpc.io/img/grpc_square_reverse_4x.png"/>
+ <meta name="og:description" content="gRPC Packages"/>
+ </head>
+ <body bgcolor="#ffffff">
+ <div id="topbar">
+ <span class="title">gRPC Packages</span>
+ </div>
+ <div id="main">
+ <xsl:apply-templates select="releases" />
+ <xsl:apply-templates select="builds" />
+ <br />
+ <br />
+ <p class="description"><a href="https://grpc.io">gRPC</a> is a <a href="https://www.cncf.io" class="external">Cloud Native Computing Foundation</a> project. <a href="https://policies.google.com/privacy" class="external">Privacy Policy</a>.</p>
+ <p class="description">Copyright &#169; 2018 <a href="https://github.com/grpc/grpc/blob/master/AUTHORS">The gRPC Authors</a></p>
+ </div>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="releases">
+ <h2>Official gRPC Releases</h2>
+ <p>Commits corresponding to <a href="https://github.com/grpc/grpc/releases">official gRPC release points and release candidates</a> are tagged on GitHub.</p>
+ <p>To maximize usability, gRPC supports the standard way of adding dependencies in your language of choice (if there is one).
+ In most languages, the gRPC runtime comes in form of a package available in your language's package manager.</p>
+ <p>For instructions on how to use the language-specific gRPC runtime in your project, please refer to the following:</p>
+ <ul>
+ <li><a href="https://github.com/grpc/grpc/blob/master/src/cpp">C++</a>: follow the instructions under the <a href="https://github.com/grpc/grpc/tree/master/src/cpp"><code>src/cpp</code> directory</a></li>
+ <li><a href="https://github.com/grpc/grpc/blob/master/src/csharp">C#</a>: NuGet package <code>Grpc</code></li>
+ <li><a href="https://github.com/grpc/grpc-dart">Dart</a>: pub package <code>grpc</code></li>
+ <li><a href="https://github.com/grpc/grpc-go">Go</a>: <code>go get google.golang.org/grpc</code></li>
+ <li><a href="https://github.com/grpc/grpc-java">Java</a>: Use JARs from <a href="https://mvnrepository.com/artifact/io.grpc">gRPC Maven Central Repository</a></li>
+ <li><a href="https://github.com/grpc/grpc-node">Node</a>: <code>npm install grpc</code></li>
+ <li><a href="https://github.com/grpc/grpc/blob/master/src/objective-c">Objective-C</a>: Add <code>gRPC-ProtoRPC</code> dependency to podspec</li>
+ <li><a href="https://github.com/grpc/grpc/blob/master/src/php">PHP</a>: <code>pecl install grpc</code></li>
+ <li><a href="https://github.com/grpc/grpc/blob/master/src/python/grpcio">Python</a>: <code>pip install grpcio</code></li>
+ <li><a href="https://github.com/grpc/grpc/blob/master/src/ruby">Ruby</a>: <code>gem install grpc</code></li>
+ <li><a href="https://github.com/grpc/grpc-web">WebJS</a>: follow the <a href="https://github.com/grpc/grpc-web">instructions in <code>grpc-web</code> repository</a></li>
+ </ul>
+</xsl:template>
+
+<xsl:template match="builds">
+ <h2> Daily Builds of <a href="https://github.com/grpc/grpc/tree/master"><code>master</code></a> Branch</h2>
+ <p>gRPC packages are built on a daily basis at the <code>HEAD</code> of <a href="https://github.com/grpc/grpc/tree/master">the <code>master</code> branch</a> and are archived here.</p>
+ <p>
+ <a href="#">The current document</a> (view source) is an XML feed pointing to the packages as they get built and uploaded.
+ You can subscribe to this feed and fetch, deploy, and test the precompiled packages with your continuous integration infrastructure.
+ </p>
+ <p>For stable release packages, please consult the above section and the common package manager for your language.</p>
+ <table style="border:solid black 1px">
+ <tr style="background-color:lightgray">
+ <td>Timestamp</td>
+ <td>Commit</td>
+ <td>Build ID</td>
+ </tr>
+ <xsl:apply-templates select="build[@branch='master']">
+ <xsl:sort select="@timestamp" data-type="text" order="descending" />
+ </xsl:apply-templates>
+ </table>
+</xsl:template>
+
+<xsl:template match="build">
+ <tr>
+ <td class="name"><xsl:value-of select="@timestamp" /></td>
+ <td class="name"> <a href="https://github.com/grpc/grpc/tree/{@commit}"><xsl:value-of select="@commit" /></a></td>
+ <td class="name"> <a href="{@path}"><xsl:value-of select="@id" /></a></td>
+ </tr>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/tools/package_hosting/style.css b/tools/package_hosting/style.css
new file mode 100644
index 0000000000..dbd26d50cf
--- /dev/null
+++ b/tools/package_hosting/style.css
@@ -0,0 +1,76 @@
+html, body
+{
+ margin: 0;
+ font-family: sans-serif;
+}
+
+a, a:visited, a:link, a:active {
+ color: #2da6b0;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #2da6b0;
+ text-decoration: underline;
+}
+
+#topbar {
+ background-color: #2da6b0;
+ height: 60px;
+ margin:auto;
+}
+
+#topbar .title {
+ position: relative;
+ top: 24px;
+ left: 24px;
+ color: white;
+ font-family: sans-serif;
+ font-weight: bold;
+}
+
+#main {
+ max-width:1100px;
+ margin:auto;
+}
+
+#main h2 {
+ text-align: left;
+}
+
+#main table {
+ width:100%;
+ border-collapse: collapse;
+ font-size: small;
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Courier New', Courier, monospace;
+}
+#main table tr td {
+ border: solid black 1px;
+ padding: 5px;
+}
+
+#main table tr td.hash {
+ text-align: right;
+ border-left: none;
+ font-size: x-small;
+}
+
+#main table tr td.name {
+ text-align: left;
+ border-right: none;
+}
+
+p.description
+{
+ font-size: smaller;
+}
+
+#metadata {
+ margin-top: 15px;
+ padding: 15px;
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Courier New', Courier, monospace;
+}
+
+#metadata span.fieldname {
+ font-family: sans-serif;
+} \ No newline at end of file
diff --git a/tools/package_hosting/upload_web_assets.sh b/tools/package_hosting/upload_web_assets.sh
new file mode 100755
index 0000000000..dcf258e38e
--- /dev/null
+++ b/tools/package_hosting/upload_web_assets.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+# Copyright 2018 The gRPC Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -ex
+
+cd "$(dirname "$0")"
+
+GCS_WEB_ASSETS=gs://packages.grpc.io/web-assets/
+
+WEB_ASSETS=(
+ 404.html
+ build-201807.xsl
+ dirindex.css
+ home.xsl
+ style.css
+)
+
+gsutil -m cp "${WEB_ASSETS[@]}" "$GCS_WEB_ASSETS"
diff --git a/tools/profiling/ios_bin/binary_size.py b/tools/profiling/ios_bin/binary_size.py
index cde09023f2..b07adb5734 100755
--- a/tools/profiling/ios_bin/binary_size.py
+++ b/tools/profiling/ios_bin/binary_size.py
@@ -86,7 +86,7 @@ def build(where, frameworks):
'src/objective-c/examples/Sample/Build-%s' % where)
-text = ''
+text = 'Objective-C binary sizes\n'
for frameworks in [False, True]:
build('new', frameworks)
new_size = get_size('new', frameworks)
diff --git a/tools/run_tests/artifacts/artifact_targets.py b/tools/run_tests/artifacts/artifact_targets.py
index edde3eae28..3a1142dfee 100644
--- a/tools/run_tests/artifacts/artifact_targets.py
+++ b/tools/run_tests/artifacts/artifact_targets.py
@@ -212,11 +212,15 @@ class RubyArtifact:
class CSharpExtArtifact:
"""Builds C# native extension library"""
- def __init__(self, platform, arch):
+ def __init__(self, platform, arch, arch_abi=None):
self.name = 'csharp_ext_%s_%s' % (platform, arch)
self.platform = platform
self.arch = arch
+ self.arch_abi = arch_abi
self.labels = ['artifact', 'csharp', platform, arch]
+ if arch_abi:
+ self.name += '_%s' % arch_abi
+ self.labels.append(arch_abi)
def pre_build_jobspecs(self):
return []
@@ -227,7 +231,14 @@ class CSharpExtArtifact:
self.name,
'tools/dockerfile/grpc_artifact_android_ndk',
'tools/run_tests/artifacts/build_artifact_csharp_android.sh',
- environ={})
+ environ={
+ 'ANDROID_ABI': self.arch_abi
+ })
+ elif self.arch == 'ios':
+ return create_jobspec(
+ self.name,
+ ['tools/run_tests/artifacts/build_artifact_csharp_ios.sh'],
+ use_workspace=True)
elif self.platform == 'windows':
cmake_arch_option = 'Win32' if self.arch == 'x86' else self.arch
return create_jobspec(
@@ -348,7 +359,9 @@ def targets():
for Cls in (CSharpExtArtifact, ProtocArtifact)
for platform in ('linux', 'macos', 'windows') for arch in ('x86', 'x64')
] + [
- CSharpExtArtifact('linux', 'android'),
+ CSharpExtArtifact('linux', 'android', arch_abi='arm64-v8a'),
+ CSharpExtArtifact('linux', 'android', arch_abi='armeabi-v7a'),
+ CSharpExtArtifact('macos', 'ios'),
PythonArtifact('linux', 'x86', 'cp27-cp27m'),
PythonArtifact('linux', 'x86', 'cp27-cp27mu'),
PythonArtifact('linux', 'x86', 'cp34-cp34m'),
diff --git a/tools/run_tests/artifacts/build_artifact_csharp_android.sh b/tools/run_tests/artifacts/build_artifact_csharp_android.sh
index ba598e76a4..067eb30edc 100755
--- a/tools/run_tests/artifacts/build_artifact_csharp_android.sh
+++ b/tools/run_tests/artifacts/build_artifact_csharp_android.sh
@@ -17,6 +17,7 @@ set -ex
cd "$(dirname "$0")/../../.."
+# ANDROID_ABI is set by the job definition in artifact_targets.py
src/csharp/experimental/build_native_ext_for_android.sh
mkdir -p "${ARTIFACTS_OUT}"
diff --git a/tools/run_tests/artifacts/build_artifact_csharp_ios.sh b/tools/run_tests/artifacts/build_artifact_csharp_ios.sh
new file mode 100755
index 0000000000..c902a45db7
--- /dev/null
+++ b/tools/run_tests/artifacts/build_artifact_csharp_ios.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+# Copyright 2018 The gRPC Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -ex
+
+cd "$(dirname "$0")/../../.."
+
+src/csharp/experimental/build_native_ext_for_ios.sh
+
+mkdir -p "${ARTIFACTS_OUT}"
+cp libs/ios/libgrpc_csharp_ext.a libs/ios/libgrpc.a "${ARTIFACTS_OUT}"
diff --git a/tools/run_tests/generated/sources_and_headers.json b/tools/run_tests/generated/sources_and_headers.json
index 7953fa3772..072402b2cf 100644
--- a/tools/run_tests/generated/sources_and_headers.json
+++ b/tools/run_tests/generated/sources_and_headers.json
@@ -3124,10 +3124,10 @@
"gpr_test_util",
"grpc",
"grpc++",
- "grpc++_channelz_proto",
"grpc++_test",
"grpc++_test_util",
- "grpc_test_util"
+ "grpc_test_util",
+ "grpcpp_channelz_proto"
],
"headers": [],
"is_filegroup": false,
@@ -3165,10 +3165,31 @@
"gpr_test_util",
"grpc",
"grpc++",
- "grpc++_channelz_proto",
+ "grpc++_test_util",
+ "grpc_test_util",
+ "grpcpp_channelz",
+ "grpcpp_channelz_proto"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "channelz_service_test",
+ "src": [
+ "test/cpp/end2end/channelz_service_test.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
"grpc++_test",
"grpc++_test_util",
- "grpc_test_util"
+ "grpc_test_util",
+ "grpcpp_channelz_proto"
],
"headers": [],
"is_filegroup": false,
@@ -7532,6 +7553,28 @@
"deps": [
"grpc",
"grpc++",
+ "grpcpp_channelz_proto"
+ ],
+ "headers": [
+ "include/grpcpp/ext/channelz_service_plugin.h",
+ "src/cpp/server/channelz/channelz_service.h"
+ ],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "grpcpp_channelz",
+ "src": [
+ "include/grpcpp/ext/channelz_service_plugin.h",
+ "src/cpp/server/channelz/channelz_service.cc",
+ "src/cpp/server/channelz/channelz_service.h",
+ "src/cpp/server/channelz/channelz_service_plugin.cc"
+ ],
+ "third_party": false,
+ "type": "lib"
+ },
+ {
+ "deps": [
+ "grpc",
+ "grpc++",
"grpc++_test_config",
"grpc++_test_util",
"grpc_test_util"
@@ -7718,6 +7761,7 @@
"test/cpp/qps/histogram.h",
"test/cpp/qps/interarrival.h",
"test/cpp/qps/parse_json.h",
+ "test/cpp/qps/qps_server_builder.h",
"test/cpp/qps/qps_worker.h",
"test/cpp/qps/report.h",
"test/cpp/qps/server.h",
@@ -7739,6 +7783,8 @@
"test/cpp/qps/interarrival.h",
"test/cpp/qps/parse_json.cc",
"test/cpp/qps/parse_json.h",
+ "test/cpp/qps/qps_server_builder.cc",
+ "test/cpp/qps/qps_server_builder.h",
"test/cpp/qps/qps_worker.cc",
"test/cpp/qps/qps_worker.h",
"test/cpp/qps/report.cc",
@@ -10889,20 +10935,6 @@
"type": "filegroup"
},
{
- "deps": [],
- "headers": [
- "src/proto/grpc/channelz/channelz.grpc.pb.h",
- "src/proto/grpc/channelz/channelz.pb.h",
- "src/proto/grpc/channelz/channelz_mock.grpc.pb.h"
- ],
- "is_filegroup": true,
- "language": "c++",
- "name": "grpc++_channelz_proto",
- "src": [],
- "third_party": false,
- "type": "filegroup"
- },
- {
"deps": [
"grpc_codegen"
],
@@ -11377,5 +11409,19 @@
],
"third_party": false,
"type": "filegroup"
+ },
+ {
+ "deps": [],
+ "headers": [
+ "src/proto/grpc/channelz/channelz.grpc.pb.h",
+ "src/proto/grpc/channelz/channelz.pb.h",
+ "src/proto/grpc/channelz/channelz_mock.grpc.pb.h"
+ ],
+ "is_filegroup": true,
+ "language": "c++",
+ "name": "grpcpp_channelz_proto",
+ "src": [],
+ "third_party": false,
+ "type": "filegroup"
}
]
diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json
index 5c556a2f52..a5439a5db1 100644
--- a/tools/run_tests/generated/tests.json
+++ b/tools/run_tests/generated/tests.json
@@ -3770,6 +3770,30 @@
"flaky": false,
"gtest": true,
"language": "c++",
+ "name": "channelz_service_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "uses_polling": true
+ },
+ {
+ "args": [],
+ "benchmark": false,
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": true,
+ "language": "c++",
"name": "channelz_test",
"platforms": [
"linux",