{"action":"created","comment":{"url":"https://api.github.com/repos/istio/istio/pulls/comments/217223968","pull_request_review_id":154885796,"id":217223968,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNzIyMzk2OA==","diff_hunk":"@@ -0,0 +1,228 @@\n+#!/bin/bash\n+\n+# This test checks for control and data plane upgrade from the passed in version to $HUB/$TAG.\n+# It runs the following steps:\n+# 1. Installs istio with multiple gateway replicas at source version. Version is defined by tag e.g. 1.0.0\n+# 2. Installs fortio echosrv with a couple of different subsets/destination rules with multiple replicas.\n+# 3. Sends external traffic to echosrv through ingress gateway.\n+# 4. Sends internal traffic to echosrv from fortio load pod.\n+# 5. Upgrades control plane to $HUB/$TAG. *** Ensure these are available or upgrade will fail! ***\n+# 6. Does a rolling restart of one of the echosrv subsets.\n+# 7. Parses the output from the load pod to check for any errors during upgrade and returns 1 is any are found.\n+#\n+# Note 1: in order to generate the correct manifest, the script must git checkout the source and target release tags.\n+#         This will fail if the workspace is not clean.\n+# Note 2: assumes clean cluster with nothing installed. Try kubectl delete namespace --now istio-system test.\n+\n+usage() {\n+    echo \"Usage:\"\n+    echo \"  ./test_upgrade_from.sh <from tag>\" \n+    echo\n+    echo '  e.g. ./test_upgrade_from.sh 1.0.0 (target is $HUB/$TAG)'\n+    echo\n+    exit 1\n+}\n+\n+if [[ -z \"${1}\" ]]; then\n+    usage\n+fi\n+\n+FROM_TAG=${1}\n+FROM_HUB=gcr.io/istio-release\n+\n+ISTIO_ROOT=${GOPATH}/src/istio.io/istio\n+LOCAL_FORTIO_LOG=/tmp/fortio_local.log\n+POD_FORTIO_LOG=/tmp/fortio_pod.log\n+\n+# Make sure to change templates/*.yaml with the correct address if this changes.\n+TEST_NAMESPACE=test\n+\n+original_branch=`git rev-parse --abbrev-ref HEAD`\n+cur_branch=${original_branch}\n+cur_sha=`git rev-parse HEAD`\n+\n+installIstioSystemAtVersionHelmTemplate() {\n+   helm template ${ISTIO_ROOT}/install/kubernetes/helm/istio \\\n+    --name istio --namespace istio-system \\\n+    --set gateways.istio-ingressgateway.replicaCount=4 \\\n+    --set gateways.istio-ingressgateway.autoscaleMin=4 \\\n+    --set global.hub=${1} \\\n+    --set global.tag=${2} > ${ISTIO_ROOT}/istio.yaml\n+\n+   kubectl apply -n istio-system -f ${ISTIO_ROOT}/istio.yaml\n+}\n+\n+gitChangeToTag() {\n+   original_branch=`git rev-parse --abbrev-ref HEAD`\n+   git checkout tags/${1} || die \"Cannot git checkout, ensure your workspace is clean.\"\n+   cur_branch=`git rev-parse --abbrev-ref HEAD`\n+   cur_sha=`git rev-parse HEAD`\n+   writeMsg \"Switching branch from ${original_branch} to tags/${1}\"\n+}\n+\n+gitRestorePrevBranch() {\n+   git checkout ${original_branch}\n+   cur_branch=`git rev-parse --abbrev-ref HEAD`\n+   cur_sha=`git rev-parse HEAD`\n+   writeMsg \"Switching branch to ${original_branch}\"\n+}\n+\n+installIstioSystemAtTag() {\n+   gitChangeToTag ${2}\n+   installIstioSystemAtVersionHelmTemplate ${1} ${2}\n+   gitRestorePrevBranch\n+}\n+\n+installTest() {\n+    writeMsg \"Installing test deployments\"\n+   kubectl apply -n ${TEST_NAMESPACE} -f ${ISTIO_ROOT}/tests/upgrade/templates/gateway.yaml\n+   # We don't want to auto-inject into istio-system, so echosrv and load client must be in different namespace.\n+   kubectl apply -n ${TEST_NAMESPACE} -f ${ISTIO_ROOT}/tests/upgrade/templates/fortio.yaml\n+   sleep 10\n+}\n+\n+sendInternalRequestTraffic() {\n+   writeMsg \"Sending internal traffic\"\n+   kubectl apply -n ${TEST_NAMESPACE} -f ${ISTIO_ROOT}/tests/upgrade/templates/fortio-cli.yaml\n+}\n+\n+sendExternalRequestTraffic() {\n+    writeMsg \"Sending external traffic\"\n+    fortio load -c 32 -t 300s -qps 10 -H \"Host:echosrv.test.svc.cluster.local\" http://${1}/echo?size=200 &> ${LOCAL_FORTIO_LOG}\n+}\n+\n+restartDataPlane() {\n+    # Apply label within deployment spec.\n+    # This is a hack to force a rolling restart without making any material changes to spec.\n+    cur_time=$(date +%s)\n+    writeMsg \"Restarting deployment ${1}\"\n+    kubectl patch deployment ${1} -n ${TEST_NAMESPACE} -p'{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"echosrv\",\"env\":[{\"name\":\"RESTART_\",\"value\":\"1\"}]}]}}}}'\n+}\n+\n+writeMsg() {\n+    printf \"\\n\\n****************\\n\\n${1}\\n\\n****************\\n\\n\"\n+\n+}\n+\n+waitForIngress() {\n+    sleep_time_sec=10\n+    INGRESS_HOST=\"\"\n+    while [ -z ${INGRESS_HOST} ]; do\n+        echo \"Waiting for ingress-gateway addr...\"\n+        INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n+        INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name==\"http2\")].port}')\n+        INGRESS_ADDR=${INGRESS_HOST}:${INGRESS_PORT}\n+        sleep ${sleep_time_sec}\n+        (( sleep_time_sofar += $sleep_time_sec ))\n+        if (( sleep_time_sofar > 300 )); then\n+            echo \"Timed out waiting for ingress-gateway address\"\n+            exit 1\n+        fi\n+    done\n+    echo \"Got ingress-gateway addr: ${INGRESS_ADDR}\"\n+}\n+\n+\n+waitForPodsReady() {\n+    sleep_time_sec=10\n+    while :; do\n+        echo \"Waiting for pods to be ready in ${1}...\"\n+        pods_str=$(kubectl -n ${1} get pods | tail -n +2 )\n+        arr=()\n+        while read -r line; do\n+           arr+=(\"$line\")\n+        done <<< \"$pods_str\"\n+\n+        ready=\"true\"\n+        for line in \"${arr[@]}\"; do\n+            if [[ ${line} != *\"Running\"* ]]; then\n+                ready=\"false\"\n+            fi\n+        done\n+        if [  \"${ready}\" = \"true\" ]; then\n+            echo \"All pods ready.\"\n+            return\n+        fi\n+\n+        sleep ${sleep_time_sec}\n+        (( sleep_time_sofar += $sleep_time_sec ))\n+        if (( sleep_time_sofar > 300 )); then\n+            echo \"Timed out waiting for pods to be ready.\"\n+            echo ${pods_str}\n+            exit 1\n+        fi\n+    done\n+}\n+\n+checkEchosrv() {\n+    sleep_time_sec=10\n+    while :; do\n+        resp=$( curl -o /dev/null -s -w \"%{http_code}\\n\" -HHost:echosrv.${TEST_NAMESPACE}.svc.cluster.local http://${INGRESS_ADDR}/echo )\n+        if [[ \"${resp}\" = *\"200\"* ]]; then\n+            echo \"Got correct response from echosrv.\"\n+            return\n+        else\n+            echo \"Got bad echosrv response: ${resp}\"\n+        fi\n+\n+        sleep ${sleep_time_sec}\n+        (( sleep_time_sofar += $sleep_time_sec ))\n+        if (( sleep_time_sofar > 300 )); then\n+            echo \"Timed out waiting for 200 from echosrv.\"\n+            exit 1\n+        fi\n+    done\n+}\n+\n+git fetch upstream --tags --prune\n+git fetch origin --tags --prune\n+\n+kubectl create namespace istio-system\n+kubectl create namespace ${TEST_NAMESPACE}\n+kubectl label namespace ${TEST_NAMESPACE} istio-injection=enabled\n+\n+pushd ${ISTIO_ROOT}\n+\n+installIstioSystemAtTag ${FROM_HUB} ${FROM_TAG}\n+waitForIngress\n+waitForPodsReady istio-system\n+\n+installTest\n+waitForPodsReady ${TEST_NAMESPACE}\n+sleep 20\n+checkEchosrv\n+\n+sendInternalRequestTraffic\n+sendExternalRequestTraffic ${INGRESS_ADDR}\n+sleep 20\n+installIstioSystemAtVersionHelmTemplate ${HUB} ${TAG}\n+waitForPodsReady istio-system\n+sleep 60\n+restartDataPlane echosrv-deployment-v1\n+sleep 100","path":"tests/upgrade/test_upgrade_from.sh","position":202,"original_position":202,"commit_id":"c2ad25c5faa401fcb02cb0e1ee01c12e7ae7e910","original_commit_id":"c2ad25c5faa401fcb02cb0e1ee01c12e7ae7e910","user":{"login":"nmittler","id":6493296,"node_id":"MDQ6VXNlcjY0OTMyOTY=","avatar_url":"https://avatars3.githubusercontent.com/u/6493296?v=4","gravatar_id":"","url":"https://api.github.com/users/nmittler","html_url":"https://github.com/nmittler","followers_url":"https://api.github.com/users/nmittler/followers","following_url":"https://api.github.com/users/nmittler/following{/other_user}","gists_url":"https://api.github.com/users/nmittler/gists{/gist_id}","starred_url":"https://api.github.com/users/nmittler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nmittler/subscriptions","organizations_url":"https://api.github.com/users/nmittler/orgs","repos_url":"https://api.github.com/users/nmittler/repos","events_url":"https://api.github.com/users/nmittler/events{/privacy}","received_events_url":"https://api.github.com/users/nmittler/received_events","type":"User","site_admin":false},"body":"Could we not do a wait for the pods rather than sleeping?","created_at":"2018-09-12T23:48:36Z","updated_at":"2018-09-12T23:48:37Z","html_url":"https://github.com/istio/istio/pull/8562#discussion_r217223968","pull_request_url":"https://api.github.com/repos/istio/istio/pulls/8562","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/istio/istio/pulls/comments/217223968"},"html":{"href":"https://github.com/istio/istio/pull/8562#discussion_r217223968"},"pull_request":{"href":"https://api.github.com/repos/istio/istio/pulls/8562"}}},"pull_request":{"url":"https://api.github.com/repos/istio/istio/pulls/8562","id":214055947,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE0MDU1OTQ3","html_url":"https://github.com/istio/istio/pull/8562","diff_url":"https://github.com/istio/istio/pull/8562.diff","patch_url":"https://github.com/istio/istio/pull/8562.patch","issue_url":"https://api.github.com/repos/istio/istio/issues/8562","number":8562,"state":"open","locked":false,"title":"Upgrade integration test","user":{"login":"ostromart","id":30089849,"node_id":"MDQ6VXNlcjMwMDg5ODQ5","avatar_url":"https://avatars3.githubusercontent.com/u/30089849?v=4","gravatar_id":"","url":"https://api.github.com/users/ostromart","html_url":"https://github.com/ostromart","followers_url":"https://api.github.com/users/ostromart/followers","following_url":"https://api.github.com/users/ostromart/following{/other_user}","gists_url":"https://api.github.com/users/ostromart/gists{/gist_id}","starred_url":"https://api.github.com/users/ostromart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ostromart/subscriptions","organizations_url":"https://api.github.com/users/ostromart/orgs","repos_url":"https://api.github.com/users/ostromart/repos","events_url":"https://api.github.com/users/ostromart/events{/privacy}","received_events_url":"https://api.github.com/users/ostromart/received_events","type":"User","site_admin":false},"body":"This test tests control and data plane upgrade from a source tag to the helm template generated at $HUB/$TAG in the current branch. The make upgrade-test target is currently hard-coded to 1.0.1 but this can be used for any combination of upgrades/downgrades.\r\n\r\nIt runs the following:\r\n1. Installs istio with multiple gateway replicas at source version. Version is defined by tag e.g. 1.0.0\r\n2. Installs echosrv with a couple of different subsets/destination rules with multiple replicas.\r\n3. Sends external traffic to echosrv through ingress gateway.\r\n4. Sends internal traffic to echosrv from fortio load pod.\r\n5. Upgrades control plane to $HUB/$TAG using helm from the current branch.\r\n6. Does a rolling restart of one of the echosrv subsets.\r\n7. Parses the output from the load pod to check for any errors during upgrade and returns 1 is any are found.\r\n\r\n","created_at":"2018-09-07T22:44:25Z","updated_at":"2018-09-12T23:48:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9896652078038cbef004fa861de2ed302732c163","assignee":null,"assignees":[],"requested_reviewers":[{"login":"costinm","id":84202,"node_id":"MDQ6VXNlcjg0MjAy","avatar_url":"https://avatars1.githubusercontent.com/u/84202?v=4","gravatar_id":"","url":"https://api.github.com/users/costinm","html_url":"https://github.com/costinm","followers_url":"https://api.github.com/users/costinm/followers","following_url":"https://api.github.com/users/costinm/following{/other_user}","gists_url":"https://api.github.com/users/costinm/gists{/gist_id}","starred_url":"https://api.github.com/users/costinm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/costinm/subscriptions","organizations_url":"https://api.github.com/users/costinm/orgs","repos_url":"https://api.github.com/users/costinm/repos","events_url":"https://api.github.com/users/costinm/events{/privacy}","received_events_url":"https://api.github.com/users/costinm/received_events","type":"User","site_admin":false},{"login":"yutongz","id":25786429,"node_id":"MDQ6VXNlcjI1Nzg2NDI5","avatar_url":"https://avatars2.githubusercontent.com/u/25786429?v=4","gravatar_id":"","url":"https://api.github.com/users/yutongz","html_url":"https://github.com/yutongz","followers_url":"https://api.github.com/users/yutongz/followers","following_url":"https://api.github.com/users/yutongz/following{/other_user}","gists_url":"https://api.github.com/users/yutongz/gists{/gist_id}","starred_url":"https://api.github.com/users/yutongz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yutongz/subscriptions","organizations_url":"https://api.github.com/users/yutongz/orgs","repos_url":"https://api.github.com/users/yutongz/repos","events_url":"https://api.github.com/users/yutongz/events{/privacy}","received_events_url":"https://api.github.com/users/yutongz/received_events","type":"User","site_admin":false},{"login":"hklai","id":31747472,"node_id":"MDQ6VXNlcjMxNzQ3NDcy","avatar_url":"https://avatars3.githubusercontent.com/u/31747472?v=4","gravatar_id":"","url":"https://api.github.com/users/hklai","html_url":"https://github.com/hklai","followers_url":"https://api.github.com/users/hklai/followers","following_url":"https://api.github.com/users/hklai/following{/other_user}","gists_url":"https://api.github.com/users/hklai/gists{/gist_id}","starred_url":"https://api.github.com/users/hklai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hklai/subscriptions","organizations_url":"https://api.github.com/users/hklai/orgs","repos_url":"https://api.github.com/users/hklai/repos","events_url":"https://api.github.com/users/hklai/events{/privacy}","received_events_url":"https://api.github.com/users/hklai/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":491318011,"node_id":"MDU6TGFiZWw0OTEzMTgwMTE=","url":"https://api.github.com/repos/istio/istio/labels/cla:%20yes","name":"cla: yes","color":"bfdadc","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/istio/istio/pulls/8562/commits","review_comments_url":"https://api.github.com/repos/istio/istio/pulls/8562/comments","review_comment_url":"https://api.github.com/repos/istio/istio/pulls/comments{/number}","comments_url":"https://api.github.com/repos/istio/istio/issues/8562/comments","statuses_url":"https://api.github.com/repos/istio/istio/statuses/c2ad25c5faa401fcb02cb0e1ee01c12e7ae7e910","head":{"label":"ostromart:upgrade-test","ref":"upgrade-test","sha":"c2ad25c5faa401fcb02cb0e1ee01c12e7ae7e910","user":{"login":"ostromart","id":30089849,"node_id":"MDQ6VXNlcjMwMDg5ODQ5","avatar_url":"https://avatars3.githubusercontent.com/u/30089849?v=4","gravatar_id":"","url":"https://api.github.com/users/ostromart","html_url":"https://github.com/ostromart","followers_url":"https://api.github.com/users/ostromart/followers","following_url":"https://api.github.com/users/ostromart/following{/other_user}","gists_url":"https://api.github.com/users/ostromart/gists{/gist_id}","starred_url":"https://api.github.com/users/ostromart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ostromart/subscriptions","organizations_url":"https://api.github.com/users/ostromart/orgs","repos_url":"https://api.github.com/users/ostromart/repos","events_url":"https://api.github.com/users/ostromart/events{/privacy}","received_events_url":"https://api.github.com/users/ostromart/received_events","type":"User","site_admin":false},"repo":{"id":119454979,"node_id":"MDEwOlJlcG9zaXRvcnkxMTk0NTQ5Nzk=","name":"istio","full_name":"ostromart/istio","owner":{"login":"ostromart","id":30089849,"node_id":"MDQ6VXNlcjMwMDg5ODQ5","avatar_url":"https://avatars3.githubusercontent.com/u/30089849?v=4","gravatar_id":"","url":"https://api.github.com/users/ostromart","html_url":"https://github.com/ostromart","followers_url":"https://api.github.com/users/ostromart/followers","following_url":"https://api.github.com/users/ostromart/following{/other_user}","gists_url":"https://api.github.com/users/ostromart/gists{/gist_id}","starred_url":"https://api.github.com/users/ostromart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ostromart/subscriptions","organizations_url":"https://api.github.com/users/ostromart/orgs","repos_url":"https://api.github.com/users/ostromart/repos","events_url":"https://api.github.com/users/ostromart/events{/privacy}","received_events_url":"https://api.github.com/users/ostromart/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ostromart/istio","description":"An open platform to connect, manage, and secure microservices.","fork":true,"url":"https://api.github.com/repos/ostromart/istio","forks_url":"https://api.github.com/repos/ostromart/istio/forks","keys_url":"https://api.github.com/repos/ostromart/istio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ostromart/istio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ostromart/istio/teams","hooks_url":"https://api.github.com/repos/ostromart/istio/hooks","issue_events_url":"https://api.github.com/repos/ostromart/istio/issues/events{/number}","events_url":"https://api.github.com/repos/ostromart/istio/events","assignees_url":"https://api.github.com/repos/ostromart/istio/assignees{/user}","branches_url":"https://api.github.com/repos/ostromart/istio/branches{/branch}","tags_url":"https://api.github.com/repos/ostromart/istio/tags","blobs_url":"https://api.github.com/repos/ostromart/istio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ostromart/istio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ostromart/istio/git/refs{/sha}","trees_url":"https://api.github.com/repos/ostromart/istio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ostromart/istio/statuses/{sha}","languages_url":"https://api.github.com/repos/ostromart/istio/languages","stargazers_url":"https://api.github.com/repos/ostromart/istio/stargazers","contributors_url":"https://api.github.com/repos/ostromart/istio/contributors","subscribers_url":"https://api.github.com/repos/ostromart/istio/subscribers","subscription_url":"https://api.github.com/repos/ostromart/istio/subscription","commits_url":"https://api.github.com/repos/ostromart/istio/commits{/sha}","git_commits_url":"https://api.github.com/repos/ostromart/istio/git/commits{/sha}","comments_url":"https://api.github.com/repos/ostromart/istio/comments{/number}","issue_comment_url":"https://api.github.com/repos/ostromart/istio/issues/comments{/number}","contents_url":"https://api.github.com/repos/ostromart/istio/contents/{+path}","compare_url":"https://api.github.com/repos/ostromart/istio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ostromart/istio/merges","archive_url":"https://api.github.com/repos/ostromart/istio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ostromart/istio/downloads","issues_url":"https://api.github.com/repos/ostromart/istio/issues{/number}","pulls_url":"https://api.github.com/repos/ostromart/istio/pulls{/number}","milestones_url":"https://api.github.com/repos/ostromart/istio/milestones{/number}","notifications_url":"https://api.github.com/repos/ostromart/istio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ostromart/istio/labels{/name}","releases_url":"https://api.github.com/repos/ostromart/istio/releases{/id}","deployments_url":"https://api.github.com/repos/ostromart/istio/deployments","created_at":"2018-01-29T23:24:42Z","updated_at":"2018-04-26T17:09:04Z","pushed_at":"2018-09-12T23:36:07Z","git_url":"git://github.com/ostromart/istio.git","ssh_url":"git@github.com:ostromart/istio.git","clone_url":"https://github.com/ostromart/istio.git","svn_url":"https://github.com/ostromart/istio","homepage":"https://istio.io","size":47894,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"istio:master","ref":"master","sha":"f015d7c2c6ddc6f687857cfed31a56cb13768bac","user":{"login":"istio","id":23534644,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTM0NjQ0","avatar_url":"https://avatars1.githubusercontent.com/u/23534644?v=4","gravatar_id":"","url":"https://api.github.com/users/istio","html_url":"https://github.com/istio","followers_url":"https://api.github.com/users/istio/followers","following_url":"https://api.github.com/users/istio/following{/other_user}","gists_url":"https://api.github.com/users/istio/gists{/gist_id}","starred_url":"https://api.github.com/users/istio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/istio/subscriptions","organizations_url":"https://api.github.com/users/istio/orgs","repos_url":"https://api.github.com/users/istio/repos","events_url":"https://api.github.com/users/istio/events{/privacy}","received_events_url":"https://api.github.com/users/istio/received_events","type":"Organization","site_admin":false},"repo":{"id":74175805,"node_id":"MDEwOlJlcG9zaXRvcnk3NDE3NTgwNQ==","name":"istio","full_name":"istio/istio","owner":{"login":"istio","id":23534644,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTM0NjQ0","avatar_url":"https://avatars1.githubusercontent.com/u/23534644?v=4","gravatar_id":"","url":"https://api.github.com/users/istio","html_url":"https://github.com/istio","followers_url":"https://api.github.com/users/istio/followers","following_url":"https://api.github.com/users/istio/following{/other_user}","gists_url":"https://api.github.com/users/istio/gists{/gist_id}","starred_url":"https://api.github.com/users/istio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/istio/subscriptions","organizations_url":"https://api.github.com/users/istio/orgs","repos_url":"https://api.github.com/users/istio/repos","events_url":"https://api.github.com/users/istio/events{/privacy}","received_events_url":"https://api.github.com/users/istio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/istio/istio","description":"Connect, secure, control, and observe services.","fork":false,"url":"https://api.github.com/repos/istio/istio","forks_url":"https://api.github.com/repos/istio/istio/forks","keys_url":"https://api.github.com/repos/istio/istio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/istio/istio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/istio/istio/teams","hooks_url":"https://api.github.com/repos/istio/istio/hooks","issue_events_url":"https://api.github.com/repos/istio/istio/issues/events{/number}","events_url":"https://api.github.com/repos/istio/istio/events","assignees_url":"https://api.github.com/repos/istio/istio/assignees{/user}","branches_url":"https://api.github.com/repos/istio/istio/branches{/branch}","tags_url":"https://api.github.com/repos/istio/istio/tags","blobs_url":"https://api.github.com/repos/istio/istio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/istio/istio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/istio/istio/git/refs{/sha}","trees_url":"https://api.github.com/repos/istio/istio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/istio/istio/statuses/{sha}","languages_url":"https://api.github.com/repos/istio/istio/languages","stargazers_url":"https://api.github.com/repos/istio/istio/stargazers","contributors_url":"https://api.github.com/repos/istio/istio/contributors","subscribers_url":"https://api.github.com/repos/istio/istio/subscribers","subscription_url":"https://api.github.com/repos/istio/istio/subscription","commits_url":"https://api.github.com/repos/istio/istio/commits{/sha}","git_commits_url":"https://api.github.com/repos/istio/istio/git/commits{/sha}","comments_url":"https://api.github.com/repos/istio/istio/comments{/number}","issue_comment_url":"https://api.github.com/repos/istio/istio/issues/comments{/number}","contents_url":"https://api.github.com/repos/istio/istio/contents/{+path}","compare_url":"https://api.github.com/repos/istio/istio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/istio/istio/merges","archive_url":"https://api.github.com/repos/istio/istio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/istio/istio/downloads","issues_url":"https://api.github.com/repos/istio/istio/issues{/number}","pulls_url":"https://api.github.com/repos/istio/istio/pulls{/number}","milestones_url":"https://api.github.com/repos/istio/istio/milestones{/number}","notifications_url":"https://api.github.com/repos/istio/istio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/istio/istio/labels{/name}","releases_url":"https://api.github.com/repos/istio/istio/releases{/id}","deployments_url":"https://api.github.com/repos/istio/istio/deployments","created_at":"2016-11-18T23:57:21Z","updated_at":"2018-09-12T22:35:05Z","pushed_at":"2018-09-12T23:36:09Z","git_url":"git://github.com/istio/istio.git","ssh_url":"git@github.com:istio/istio.git","clone_url":"https://github.com/istio/istio.git","svn_url":"https://github.com/istio/istio","homepage":"https://istio.io","size":48502,"stargazers_count":11615,"watchers_count":11615,"language":"Go","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1688,"mirror_url":null,"archived":false,"open_issues_count":912,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":1688,"open_issues":912,"watchers":11615,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/istio/istio/pulls/8562"},"html":{"href":"https://github.com/istio/istio/pull/8562"},"issue":{"href":"https://api.github.com/repos/istio/istio/issues/8562"},"comments":{"href":"https://api.github.com/repos/istio/istio/issues/8562/comments"},"review_comments":{"href":"https://api.github.com/repos/istio/istio/pulls/8562/comments"},"review_comment":{"href":"https://api.github.com/repos/istio/istio/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/istio/istio/pulls/8562/commits"},"statuses":{"href":"https://api.github.com/repos/istio/istio/statuses/c2ad25c5faa401fcb02cb0e1ee01c12e7ae7e910"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"nmittler"}}