{"action":"created","comment":{"url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/comments/168626899","pull_request_review_id":97025908,"id":168626899,"diff_hunk":"@@ -0,0 +1,231 @@\n+/*\n+ *  Copyright 2018 original author or authors.\n+ *\n+ *  Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *  you may not use this file except in compliance with the License.\n+ *  You may obtain a copy of the License at\n+ *\n+ *       http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ *  Unless required by applicable law or agreed to in writing, software\n+ *  distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *  See the License for the specific language governing permissions and\n+ *  limitations under the License.\n+ */\n+\n+package org.springframework.cloud.gcp.autoconfigure.pubsub.it;\n+\n+import java.util.HashMap;\n+import java.util.Map;\n+\n+import com.google.cloud.pubsub.v1.AckReplyConsumer;\n+import org.junit.After;\n+import org.junit.Before;\n+import org.junit.BeforeClass;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mockito;\n+\n+import org.springframework.beans.factory.annotation.Autowired;\n+import org.springframework.beans.factory.annotation.Qualifier;\n+import org.springframework.boot.test.context.SpringBootTest;\n+import org.springframework.cloud.gcp.autoconfigure.core.GcpContextAutoConfiguration;\n+import org.springframework.cloud.gcp.autoconfigure.pubsub.GcpPubSubAutoConfiguration;\n+import org.springframework.cloud.gcp.autoconfigure.pubsub.GcpPubSubEmulatorConfiguration;\n+import org.springframework.cloud.gcp.autoconfigure.pubsub.GcpPubSubProperties;\n+import org.springframework.cloud.gcp.core.GcpProjectIdProvider;\n+import org.springframework.cloud.gcp.pubsub.PubSubAdmin;\n+import org.springframework.cloud.gcp.pubsub.core.PubSubTemplate;\n+import org.springframework.cloud.gcp.pubsub.integration.AckMode;\n+import org.springframework.cloud.gcp.pubsub.integration.inbound.PubSubInboundChannelAdapter;\n+import org.springframework.cloud.gcp.pubsub.integration.outbound.PubSubMessageHandler;\n+import org.springframework.cloud.gcp.pubsub.support.GcpHeaders;\n+import org.springframework.context.annotation.Bean;\n+import org.springframework.context.annotation.Configuration;\n+import org.springframework.context.annotation.Lazy;\n+import org.springframework.integration.annotation.ServiceActivator;\n+import org.springframework.integration.channel.QueueChannel;\n+import org.springframework.integration.config.EnableIntegration;\n+import org.springframework.messaging.Message;\n+import org.springframework.messaging.MessageChannel;\n+import org.springframework.messaging.MessageHeaders;\n+import org.springframework.messaging.PollableChannel;\n+import org.springframework.messaging.support.MessageBuilder;\n+import org.springframework.test.annotation.DirtiesContext;\n+import org.springframework.test.context.junit4.SpringRunner;\n+import org.springframework.util.concurrent.ListenableFutureCallback;\n+\n+import static org.assertj.core.api.Assertions.assertThat;\n+import static org.assertj.core.api.Assumptions.assumeThat;\n+import static org.mockito.ArgumentMatchers.any;\n+import static org.mockito.Mockito.times;\n+import static org.mockito.Mockito.verify;\n+\n+/**\n+ * @author João André Martins\n+ */\n+@SpringBootTest(\n+\t\tproperties = {\"spring.cloud.gcp.pubsub.emulatorHost=localhost:8085\"},\n+\t\tclasses = {GcpPubSubAutoConfiguration.class,\n+\t\t\t\tGcpPubSubEmulatorConfiguration.class,\n+\t\t\t\tGcpContextAutoConfiguration.class,\n+\t\t\t\tPubSubChannelAdaptersIT.IntegrationConfiguration.class\n+\t\t}\n+)\n+@RunWith(SpringRunner.class)\n+public class PubSubChannelAdaptersIT {\n+\n+\tprivate static final String EMULATOR_HOST_ENVVAR_NAME = \"PUBSUB_EMULATOR_HOST\";\n+\n+\t@Autowired\n+\t@Qualifier(\"outputChannel\")\n+\tprivate PollableChannel channel;\n+\n+\t@Autowired\n+\tprivate PubSubAdmin pubSubAdmin;\n+\n+\t@Autowired\n+\tprivate GcpPubSubProperties pubSubProperties;\n+\n+\t@Autowired\n+\t@Qualifier(\"inputChannel\")\n+\tprivate MessageChannel inputChannel;\n+\n+\t@Autowired\n+\tprivate PubSubInboundChannelAdapter inboundChannelAdapter;\n+\n+\t@Autowired\n+\tprivate PubSubMessageHandler outboundChannelAdapter;\n+\n+\t@BeforeClass\n+\tpublic static void checkEmulatorIsRunning() {\n+\t\tassumeThat(System.getenv(EMULATOR_HOST_ENVVAR_NAME)).isNotNull();\n+\t}\n+\n+\t@Before\n+\tpublic void setUp() {\n+\t\tthis.pubSubAdmin.createTopic(\"desafinado\");\n+\t\tthis.pubSubAdmin.createSubscription(\"doralice\", \"desafinado\");\n+\t}\n+\n+\t@After\n+\tpublic void tearDown() {\n+\t\tthis.pubSubAdmin.deleteTopic(\"desafinado\");\n+\t\tthis.pubSubAdmin.deleteSubscription(\"doralice\");\n+\t}\n+\n+\t@Test\n+\tpublic void sendAndReceiveMessage() {\n+\t\tMap<String, Object> headers = new HashMap<>();\n+\t\t// Only String values for now..\n+\t\theaders.put(\"storm\", \"lift your skinny fists\");\n+\t\theaders.put(\"static\", \"lift your skinny fists\");\n+\t\theaders.put(\"sleep\", \"lift your skinny fists\");\n+\n+\t\tthis.inputChannel.send(\n+\t\t\t\tMessageBuilder.createMessage(\"I am a message.\",  new MessageHeaders(headers)));\n+\n+\t\tMessage<?> message = this.channel.receive(5000);\n+\t\tassertThat(message).isNotNull();\n+\t\tassertThat(message.getPayload()).isInstanceOf(String.class);\n+\t\tString payload = (String) message.getPayload();\n+\t\tassertThat(payload).isEqualTo(\"I am a message.\");\n+\n+\t\tassertThat(message.getHeaders().size()).isEqualTo(6);\n+\t\tassertThat(message.getHeaders().get(\"storm\")).isEqualTo(\"lift your skinny fists\");\n+\t\tassertThat(message.getHeaders().get(\"static\")).isEqualTo(\"lift your skinny fists\");\n+\t\tassertThat(message.getHeaders().get(\"sleep\")).isEqualTo(\"lift your skinny fists\");\n+\t}\n+\n+\t@Test\n+\t@DirtiesContext\n+\tpublic void sendAndReceiveMessageInBytes() {\n+\t\tthis.inboundChannelAdapter.setMessageConverter(null);\n+\t\tthis.inputChannel.send(MessageBuilder.withPayload(\"I am a message.\").build());\n+\n+\t\tMessage<?> message = this.channel.receive(5000);\n+\t\tassertThat(message).isNotNull();\n+\t\tassertThat(message.getPayload()).isInstanceOf(byte[].class);\n+\t\tString stringPayload = new String((byte[]) message.getPayload());\n+\t\tassertThat(stringPayload).isEqualTo(\"I am a message.\");\n+\t}\n+\n+\t@Test\n+\t@DirtiesContext\n+\tpublic void sendAndReceiveMessageManualAck() {\n+\t\tthis.inboundChannelAdapter.setAckMode(AckMode.MANUAL);\n+\t\tthis.inputChannel.send(MessageBuilder.withPayload(\"I am a message.\").build());\n+\n+\t\tMessage<?> message = this.channel.receive(5000);\n+\t\tassertThat(message).isNotNull();\n+\t\tAckReplyConsumer acker =\n+\t\t\t\t(AckReplyConsumer) message.getHeaders().get(GcpHeaders.ACKNOWLEDGEMENT);\n+\t\tassertThat(acker).isNotNull();\n+\t\tacker.nack();\n+\t\tmessage = this.channel.receive(5000);\n+\t\tassertThat(message).isNotNull();\n+\t\tacker = (AckReplyConsumer) message.getHeaders().get(GcpHeaders.ACKNOWLEDGEMENT);\n+\t\tassertThat(acker).isNotNull();\n+\t\tacker.ack();\n+\t\tmessage = this.channel.receive(5000);\n+\t\tassertThat(message).isNull();\n+\t}\n+\n+\t@Test\n+\t@DirtiesContext","path":"spring-cloud-gcp-autoconfigure/src/test/java/org/springframework/cloud/gcp/autoconfigure/pubsub/it/PubSubChannelAdaptersIT.java","position":176,"original_position":176,"commit_id":"7dee470da664a8e4c1a31291623e1eaabf4f7469","original_commit_id":"7dee470da664a8e4c1a31291623e1eaabf4f7469","user":{"login":"artembilan","id":1071590,"avatar_url":"https://avatars3.githubusercontent.com/u/1071590?v=4","gravatar_id":"","url":"https://api.github.com/users/artembilan","html_url":"https://github.com/artembilan","followers_url":"https://api.github.com/users/artembilan/followers","following_url":"https://api.github.com/users/artembilan/following{/other_user}","gists_url":"https://api.github.com/users/artembilan/gists{/gist_id}","starred_url":"https://api.github.com/users/artembilan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/artembilan/subscriptions","organizations_url":"https://api.github.com/users/artembilan/orgs","repos_url":"https://api.github.com/users/artembilan/repos","events_url":"https://api.github.com/users/artembilan/events{/privacy}","received_events_url":"https://api.github.com/users/artembilan/received_events","type":"User","site_admin":false},"body":"Can we consider to use `start()/stop()` on the `this.inboundChannelAdapter` instead?\r\n\r\nI fully don't like when tests spend too much time. There are many other interesting things rather than wait for tests to pass, when we can just make them faster.","created_at":"2018-02-15T22:22:37Z","updated_at":"2018-02-15T22:24:39Z","html_url":"https://github.com/spring-cloud/spring-cloud-gcp/pull/436#discussion_r168626899","pull_request_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/comments/168626899"},"html":{"href":"https://github.com/spring-cloud/spring-cloud-gcp/pull/436#discussion_r168626899"},"pull_request":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436"}}},"pull_request":{"url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436","id":169251832,"html_url":"https://github.com/spring-cloud/spring-cloud-gcp/pull/436","diff_url":"https://github.com/spring-cloud/spring-cloud-gcp/pull/436.diff","patch_url":"https://github.com/spring-cloud/spring-cloud-gcp/pull/436.patch","issue_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/436","number":436,"state":"open","locked":false,"title":"Adds integration tests for SI Pub/Sub channel adapters","user":{"login":"joaoandremartins","id":3290856,"avatar_url":"https://avatars0.githubusercontent.com/u/3290856?v=4","gravatar_id":"","url":"https://api.github.com/users/joaoandremartins","html_url":"https://github.com/joaoandremartins","followers_url":"https://api.github.com/users/joaoandremartins/followers","following_url":"https://api.github.com/users/joaoandremartins/following{/other_user}","gists_url":"https://api.github.com/users/joaoandremartins/gists{/gist_id}","starred_url":"https://api.github.com/users/joaoandremartins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joaoandremartins/subscriptions","organizations_url":"https://api.github.com/users/joaoandremartins/orgs","repos_url":"https://api.github.com/users/joaoandremartins/repos","events_url":"https://api.github.com/users/joaoandremartins/events{/privacy}","received_events_url":"https://api.github.com/users/joaoandremartins/received_events","type":"User","site_admin":false},"body":"Fixes issue with string payloads on inbound adapter being considered as\r\nbyte arrays and making conversion error.\r\nEmulator autoconfiguration for TransportChannelProvider isn't kicking\r\nin, removing @ConditionalOnMissingBean worked.\r\n\r\nAn issue with this PR is that the `spring.cloud.gcp.pubsub.emulatorHost` property needs to be manually populated. Ideally, we would auto-populate that property with the value of the `PUBSUB_EMULATOR_HOST` envvar.","created_at":"2018-02-14T23:36:20Z","updated_at":"2018-02-15T22:24:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7571ba5c7493aac42b291f6c0de952110d8f9bd0","assignee":null,"assignees":[],"requested_reviewers":[{"login":"meltsufin","id":17732492,"avatar_url":"https://avatars2.githubusercontent.com/u/17732492?v=4","gravatar_id":"","url":"https://api.github.com/users/meltsufin","html_url":"https://github.com/meltsufin","followers_url":"https://api.github.com/users/meltsufin/followers","following_url":"https://api.github.com/users/meltsufin/following{/other_user}","gists_url":"https://api.github.com/users/meltsufin/gists{/gist_id}","starred_url":"https://api.github.com/users/meltsufin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meltsufin/subscriptions","organizations_url":"https://api.github.com/users/meltsufin/orgs","repos_url":"https://api.github.com/users/meltsufin/repos","events_url":"https://api.github.com/users/meltsufin/events{/privacy}","received_events_url":"https://api.github.com/users/meltsufin/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436/commits","review_comments_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436/comments","review_comment_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/436/comments","statuses_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/statuses/7dee470da664a8e4c1a31291623e1eaabf4f7469","head":{"label":"spring-cloud:si-pubsub-it","ref":"si-pubsub-it","sha":"7dee470da664a8e4c1a31291623e1eaabf4f7469","user":{"login":"spring-cloud","id":7815877,"avatar_url":"https://avatars0.githubusercontent.com/u/7815877?v=4","gravatar_id":"","url":"https://api.github.com/users/spring-cloud","html_url":"https://github.com/spring-cloud","followers_url":"https://api.github.com/users/spring-cloud/followers","following_url":"https://api.github.com/users/spring-cloud/following{/other_user}","gists_url":"https://api.github.com/users/spring-cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/spring-cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spring-cloud/subscriptions","organizations_url":"https://api.github.com/users/spring-cloud/orgs","repos_url":"https://api.github.com/users/spring-cloud/repos","events_url":"https://api.github.com/users/spring-cloud/events{/privacy}","received_events_url":"https://api.github.com/users/spring-cloud/received_events","type":"Organization","site_admin":false},"repo":{"id":86105877,"name":"spring-cloud-gcp","full_name":"spring-cloud/spring-cloud-gcp","owner":{"login":"spring-cloud","id":7815877,"avatar_url":"https://avatars0.githubusercontent.com/u/7815877?v=4","gravatar_id":"","url":"https://api.github.com/users/spring-cloud","html_url":"https://github.com/spring-cloud","followers_url":"https://api.github.com/users/spring-cloud/followers","following_url":"https://api.github.com/users/spring-cloud/following{/other_user}","gists_url":"https://api.github.com/users/spring-cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/spring-cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spring-cloud/subscriptions","organizations_url":"https://api.github.com/users/spring-cloud/orgs","repos_url":"https://api.github.com/users/spring-cloud/repos","events_url":"https://api.github.com/users/spring-cloud/events{/privacy}","received_events_url":"https://api.github.com/users/spring-cloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/spring-cloud/spring-cloud-gcp","description":"Integration for Google Cloud Platform APIs with Spring","fork":false,"url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp","forks_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/forks","keys_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/teams","hooks_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/hooks","issue_events_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/events{/number}","events_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/events","assignees_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/assignees{/user}","branches_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/branches{/branch}","tags_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/tags","blobs_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/refs{/sha}","trees_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/statuses/{sha}","languages_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/languages","stargazers_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/stargazers","contributors_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/contributors","subscribers_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/subscribers","subscription_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/subscription","commits_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/commits{/sha}","git_commits_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/commits{/sha}","comments_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/comments{/number}","issue_comment_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/comments{/number}","contents_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/contents/{+path}","compare_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/merges","archive_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/downloads","issues_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues{/number}","pulls_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls{/number}","milestones_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/milestones{/number}","notifications_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/labels{/name}","releases_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/releases{/id}","deployments_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/deployments","created_at":"2017-03-24T19:58:20Z","updated_at":"2018-02-15T00:30:14Z","pushed_at":"2018-02-15T21:34:00Z","git_url":"git://github.com/spring-cloud/spring-cloud-gcp.git","ssh_url":"git@github.com:spring-cloud/spring-cloud-gcp.git","clone_url":"https://github.com/spring-cloud/spring-cloud-gcp.git","svn_url":"https://github.com/spring-cloud/spring-cloud-gcp","homepage":null,"size":1802,"stargazers_count":69,"watchers_count":69,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":30,"mirror_url":null,"archived":false,"open_issues_count":48,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":30,"open_issues":48,"watchers":69,"default_branch":"master"}},"base":{"label":"spring-cloud:master","ref":"master","sha":"061a1a86538164752f9c583fcf16f99432400218","user":{"login":"spring-cloud","id":7815877,"avatar_url":"https://avatars0.githubusercontent.com/u/7815877?v=4","gravatar_id":"","url":"https://api.github.com/users/spring-cloud","html_url":"https://github.com/spring-cloud","followers_url":"https://api.github.com/users/spring-cloud/followers","following_url":"https://api.github.com/users/spring-cloud/following{/other_user}","gists_url":"https://api.github.com/users/spring-cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/spring-cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spring-cloud/subscriptions","organizations_url":"https://api.github.com/users/spring-cloud/orgs","repos_url":"https://api.github.com/users/spring-cloud/repos","events_url":"https://api.github.com/users/spring-cloud/events{/privacy}","received_events_url":"https://api.github.com/users/spring-cloud/received_events","type":"Organization","site_admin":false},"repo":{"id":86105877,"name":"spring-cloud-gcp","full_name":"spring-cloud/spring-cloud-gcp","owner":{"login":"spring-cloud","id":7815877,"avatar_url":"https://avatars0.githubusercontent.com/u/7815877?v=4","gravatar_id":"","url":"https://api.github.com/users/spring-cloud","html_url":"https://github.com/spring-cloud","followers_url":"https://api.github.com/users/spring-cloud/followers","following_url":"https://api.github.com/users/spring-cloud/following{/other_user}","gists_url":"https://api.github.com/users/spring-cloud/gists{/gist_id}","starred_url":"https://api.github.com/users/spring-cloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spring-cloud/subscriptions","organizations_url":"https://api.github.com/users/spring-cloud/orgs","repos_url":"https://api.github.com/users/spring-cloud/repos","events_url":"https://api.github.com/users/spring-cloud/events{/privacy}","received_events_url":"https://api.github.com/users/spring-cloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/spring-cloud/spring-cloud-gcp","description":"Integration for Google Cloud Platform APIs with Spring","fork":false,"url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp","forks_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/forks","keys_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/teams","hooks_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/hooks","issue_events_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/events{/number}","events_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/events","assignees_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/assignees{/user}","branches_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/branches{/branch}","tags_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/tags","blobs_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/refs{/sha}","trees_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/statuses/{sha}","languages_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/languages","stargazers_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/stargazers","contributors_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/contributors","subscribers_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/subscribers","subscription_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/subscription","commits_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/commits{/sha}","git_commits_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/git/commits{/sha}","comments_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/comments{/number}","issue_comment_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/comments{/number}","contents_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/contents/{+path}","compare_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/merges","archive_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/downloads","issues_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues{/number}","pulls_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls{/number}","milestones_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/milestones{/number}","notifications_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/labels{/name}","releases_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/releases{/id}","deployments_url":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/deployments","created_at":"2017-03-24T19:58:20Z","updated_at":"2018-02-15T00:30:14Z","pushed_at":"2018-02-15T21:34:00Z","git_url":"git://github.com/spring-cloud/spring-cloud-gcp.git","ssh_url":"git@github.com:spring-cloud/spring-cloud-gcp.git","clone_url":"https://github.com/spring-cloud/spring-cloud-gcp.git","svn_url":"https://github.com/spring-cloud/spring-cloud-gcp","homepage":null,"size":1802,"stargazers_count":69,"watchers_count":69,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":30,"mirror_url":null,"archived":false,"open_issues_count":48,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":30,"open_issues":48,"watchers":69,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436"},"html":{"href":"https://github.com/spring-cloud/spring-cloud-gcp/pull/436"},"issue":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/436"},"comments":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/issues/436/comments"},"review_comments":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436/comments"},"review_comment":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/pulls/436/commits"},"statuses":{"href":"https://api.github.com/repos/spring-cloud/spring-cloud-gcp/statuses/7dee470da664a8e4c1a31291623e1eaabf4f7469"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"artembilan"}}