mirror of https://github.com/grpc/grpc-java.git
buildscripts: add Kokoro-based CI for Android APK stats (#3984)
This commit is contained in:
parent
921b668ad5
commit
4369e8cd9a
|
|
@ -1,5 +1,5 @@
|
||||||
# Config file for internal CI
|
# Config file for internal CI
|
||||||
|
|
||||||
# Location of the continuous shell script in repository.
|
# Location of the continuous shell script in repository.
|
||||||
build_file: "grpc-java/buildscripts/kokoro/cronet.sh"
|
build_file: "grpc-java/buildscripts/kokoro/android.sh"
|
||||||
timeout_mins: 45
|
timeout_mins: 45
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -exu -o pipefail
|
||||||
|
cat /VERSION
|
||||||
|
|
||||||
|
BASE_DIR="$(pwd)"
|
||||||
|
|
||||||
|
# Build Cronet
|
||||||
|
|
||||||
|
cd "$BASE_DIR/github/grpc-java/cronet"
|
||||||
|
./cronet_deps.sh
|
||||||
|
../gradlew --include-build .. build
|
||||||
|
|
||||||
|
|
||||||
|
# Install gRPC and codegen for the Android examples
|
||||||
|
# (a composite gradle build can't find protoc-gen-grpc-java)
|
||||||
|
|
||||||
|
cd "$BASE_DIR/github/grpc-java"
|
||||||
|
|
||||||
|
export GRADLE_OPTS=-Xmx512m
|
||||||
|
export PROTOBUF_VERSION=3.5.1
|
||||||
|
export LDFLAGS=-L/tmp/protobuf/lib
|
||||||
|
export CXXFLAGS=-I/tmp/protobuf/include
|
||||||
|
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
||||||
|
export OS_NAME=$(uname)
|
||||||
|
|
||||||
|
# Proto deps
|
||||||
|
buildscripts/make_dependencies.sh
|
||||||
|
ln -s "/tmp/protobuf-${PROTOBUF_VERSION}/$(uname -s)-$(uname -p)" /tmp/protobuf
|
||||||
|
|
||||||
|
./gradlew install
|
||||||
|
|
||||||
|
cd ./examples/android/clientcache
|
||||||
|
./gradlew build
|
||||||
|
cd ../routeguide
|
||||||
|
./gradlew build
|
||||||
|
cd ../helloworld
|
||||||
|
./gradlew build
|
||||||
|
|
||||||
|
|
||||||
|
# Skip APK size and dex count comparisons for non-PR builds
|
||||||
|
|
||||||
|
if [[ -z "$KOKORO_GITHUB_PULL_REQUEST_COMMIT" ]]; then
|
||||||
|
echo "Skipping APK size and dex count"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Save a copy of set_github_status.py (it may differ from the base commit)
|
||||||
|
|
||||||
|
SET_GITHUB_STATUS="$TMPDIR/set_github_status.py"
|
||||||
|
cp "$BASE_DIR/github/grpc-java/buildscripts/set_github_status.py" "$SET_GITHUB_STATUS"
|
||||||
|
|
||||||
|
|
||||||
|
# Collect APK size and dex count stats for the helloworld example
|
||||||
|
|
||||||
|
read -r ignored new_dex_count < \
|
||||||
|
<("${ANDROID_HOME}/tools/bin/apkanalyzer" dex references app/build/outputs/apk/release/app-release-unsigned.apk)
|
||||||
|
|
||||||
|
new_apk_size="$(stat --printf=%s app/build/outputs/apk/release/app-release-unsigned.apk)"
|
||||||
|
|
||||||
|
|
||||||
|
# Get the APK size and dex count stats using the pull request base commit
|
||||||
|
|
||||||
|
cd $BASE_DIR/github/grpc-java
|
||||||
|
git checkout HEAD^
|
||||||
|
./gradlew install
|
||||||
|
cd examples/android/helloworld/
|
||||||
|
./gradlew build
|
||||||
|
|
||||||
|
read -r ignored old_dex_count < \
|
||||||
|
<("${ANDROID_HOME}/tools/bin/apkanalyzer" dex references app/build/outputs/apk/release/app-release-unsigned.apk)
|
||||||
|
|
||||||
|
old_apk_size="$(stat --printf=%s app/build/outputs/apk/release/app-release-unsigned.apk)"
|
||||||
|
|
||||||
|
dex_count_delta="$((new_dex_count-old_dex_count))"
|
||||||
|
|
||||||
|
apk_size_delta="$((new_apk_size-old_apk_size))"
|
||||||
|
|
||||||
|
|
||||||
|
# Update the statuses with the deltas
|
||||||
|
|
||||||
|
gsutil cp gs://grpc-testing-secrets/github_credentials/oauth_token.txt ~/
|
||||||
|
|
||||||
|
"$SET_GITHUB_STATUS" \
|
||||||
|
--sha1 "$KOKORO_GITHUB_PULL_REQUEST_COMMIT" \
|
||||||
|
--state success \
|
||||||
|
--description "New DEX reference count: $(printf "%'d" "$new_dex_count") (delta: $(printf "%'d" "$dex_count_delta"))" \
|
||||||
|
--context android/dex_diff --oauth_file ~/oauth_token.txt
|
||||||
|
|
||||||
|
"$SET_GITHUB_STATUS" \
|
||||||
|
--sha1 "$KOKORO_GITHUB_PULL_REQUEST_COMMIT" \
|
||||||
|
--state success \
|
||||||
|
--description "New APK size in bytes: $(printf "%'d" "$new_apk_size") (delta: $(printf "%'d" "$apk_size_delta"))" \
|
||||||
|
--context android/apk_diff --oauth_file ~/oauth_token.txt
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -exu -o pipefail
|
|
||||||
cat /VERSION
|
|
||||||
|
|
||||||
cd ./github/grpc-java/cronet
|
|
||||||
./cronet_deps.sh
|
|
||||||
../gradlew --include-build .. build
|
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env python2.7
|
||||||
|
#
|
||||||
|
# Copyright 2018 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.
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import urllib2
|
||||||
|
|
||||||
|
|
||||||
|
def run():
|
||||||
|
argp = argparse.ArgumentParser(description='Set status on pull request')
|
||||||
|
|
||||||
|
argp.add_argument(
|
||||||
|
'--sha1', type=str, help='SHA1 of the commit', required=True)
|
||||||
|
argp.add_argument(
|
||||||
|
'--state',
|
||||||
|
type=str,
|
||||||
|
choices=('error', 'failure', 'pending', 'success'),
|
||||||
|
help='State to set',
|
||||||
|
required=True)
|
||||||
|
argp.add_argument(
|
||||||
|
'--description', type=str, help='Status description', required=True)
|
||||||
|
argp.add_argument('--context', type=str, help='Status context', required=True)
|
||||||
|
argp.add_argument(
|
||||||
|
'--oauth_file', type=str, help='File with OAuth token', required=True)
|
||||||
|
|
||||||
|
args = argp.parse_args()
|
||||||
|
sha1 = args.sha1
|
||||||
|
state = args.state
|
||||||
|
description = args.description
|
||||||
|
context = args.context
|
||||||
|
oauth_file = args.oauth_file
|
||||||
|
|
||||||
|
with open(oauth_file, 'r') as oauth_file_reader:
|
||||||
|
oauth_token = oauth_file_reader.read().replace('\n', '')
|
||||||
|
|
||||||
|
req = urllib2.Request(
|
||||||
|
url='https://api.github.com/repos/grpc/grpc-java/statuses/%s' % sha1,
|
||||||
|
data=json.dumps({
|
||||||
|
'state': state,
|
||||||
|
'description': description,
|
||||||
|
'context': context,
|
||||||
|
}),
|
||||||
|
headers={
|
||||||
|
'Authorization': 'token %s' % oauth_token,
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
})
|
||||||
|
print urllib2.urlopen(req).read()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
run()
|
||||||
Loading…
Reference in New Issue