{"action":"created","comment":{"url":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/comments/216724947","pull_request_review_id":154274788,"id":216724947,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNjcyNDk0Nw==","diff_hunk":"@@ -0,0 +1,573 @@\n+\"\"\"\n+Copyright (c) 2018 Red Hat, Inc\n+All rights reserved.\n+\n+This software may be modified and distributed under the terms\n+of the BSD license. See the LICENSE file for details.\n+\"\"\"\n+\n+from atomic_reactor.constants import (PLUGIN_GROUP_MANIFESTS_KEY,\n+                                      PLUGIN_CHECK_AND_SET_PLATFORMS_KEY,\n+                                      MEDIA_TYPE_DOCKER_V1,\n+                                      MEDIA_TYPE_DOCKER_V2_SCHEMA1,\n+                                      MEDIA_TYPE_DOCKER_V2_SCHEMA2,\n+                                      MEDIA_TYPE_DOCKER_V2_MANIFEST_LIST,\n+                                      MEDIA_TYPE_OCI_V1, MEDIA_TYPE_OCI_V1_INDEX)\n+from atomic_reactor.plugin import ExitPlugin\n+from atomic_reactor.plugins.exit_verify_media_types import (VerifyMediaTypesPlugin,\n+                                                            RegistryTimeoutError)\n+from atomic_reactor.inner import TagConf, PushConf\n+from atomic_reactor.util import ImageName\n+import atomic_reactor.util as AtomicReactorUtil\n+from atomic_reactor.plugins.pre_reactor_config import (ReactorConfig,\n+                                                       ReactorConfigPlugin,\n+                                                       ReactorConfigKeys,\n+                                                       WORKSPACE_CONF_KEY)\n+from osbs.utils import RegistryURI\n+\n+from flexmock import flexmock\n+import pytest\n+import requests\n+import json\n+import responses\n+import re\n+\n+from tests.constants import MOCK\n+if MOCK:\n+    from tests.retry_mock import mock_get_retry_session\n+\n+DIGEST_V1 = 'sha256:7de72140ec27a911d3f88d60335f08d6530a4af136f7beab47797a196e840afd'\n+DIGEST_V2 = 'sha256:85a7e3fb684787b86e64808c5b91d926afda9d6b35a0642a72d7a746452e71c1'\n+\n+class MockerTasker(object):\n+    def __init__(self):\n+        self.pulled_images = []\n+\n+    def pull_image(self, image, insecure):\n+        self.pulled_images.append(image)\n+        return image.to_str()\n+\n+    def inspect_image(self, image):\n+        pass\n+\n+\n+class TestVerifyImageTypes(object):\n+    TEST_UNIQUE_IMAGE = 'foo:unique-tag'\n+\n+\n+    def get_response_config_json(media_type):\n+        config = {\n+            'digest': 'sha256:2c782e3a93d34d89ea4cf54052768be117caed54803263dd1f3798ce42aac14',\n+            'mediaType': 'application/octet-stream',\n+            'size': 4132\n+        }\n+        layer1 = {\n+            'digest': 'sha256:16dc1f96e3a1bb628be2e00518fec2bb97bd5933859de592a00e2eb7774b',\n+            'mediaType': 'application/vnd.docker.image.rootfs.diff.tar.gzip',\n+            'size': 71907148\n+        }\n+        layer2 = {\n+            'digest': 'sha256:cebc0565e1f096016765f55fde87a6f60fdb1208c0b5017e35a856ff578f',\n+            'mediaType': 'application/vnd.docker.image.rootfs.diff.tar.gzip',\n+            'size': 3945724\n+        }\n+        return {\n+            'config': config,\n+            'layers': [ layer1, layer2 ],\n+            'mediaType': media_type,\n+            'schemaVersion': 2\n+        }\n+\n+    broken_response = {\n+        'schemaVersion': 'foo',\n+        'not-mediaType': 'bar'\n+    }\n+\n+    config_response_none = requests.Response()\n+    (flexmock(config_response_none,\n+              raise_for_status=lambda: None,\n+              status_code=requests.codes.ok,\n+              json=get_response_config_json(MEDIA_TYPE_DOCKER_V2_SCHEMA2),\n+              headers={\n+                'Content-Type': 'application/invalid+json',\n+                'Docker-Content-Digest': \"12\"\n+              }))\n+    config_response_v1 = requests.Response()\n+    (flexmock(config_response_v1,\n+              raise_for_status=lambda: None,\n+              status_code=requests.codes.ok,\n+              json=get_response_config_json(DIGEST_V1),\n+              headers={\n+                'Content-Type': 'application/json'\n+              }))\n+    config_response_config_v1 = requests.Response()\n+    (flexmock(config_response_config_v1,\n+              raise_for_status=lambda: None,\n+              status_code=requests.codes.ok,\n+              json=get_response_config_json(MEDIA_TYPE_DOCKER_V2_SCHEMA1),\n+              headers={\n+                'Content-Type': 'application/vnd.docker.distribution.manifest.v1+json',\n+                'Docker-Content-Digest': DIGEST_V1\n+              }))\n+    config_response_config_v2 = requests.Response()\n+    (flexmock(config_response_config_v2,\n+              raise_for_status=lambda: None,\n+              status_code=requests.codes.ok,\n+              json=get_response_config_json(MEDIA_TYPE_DOCKER_V2_SCHEMA2),\n+              headers={\n+                'Content-Type': 'application/vnd.docker.distribution.manifest.v2+json',\n+                'Docker-Content-Digest': DIGEST_V2\n+              }))\n+    config_response_config_v2_list = requests.Response()\n+    (flexmock(config_response_config_v2_list,\n+              raise_for_status=lambda: None,\n+              status_code=requests.codes.ok,\n+              json=get_response_config_json(MEDIA_TYPE_DOCKER_V2_MANIFEST_LIST),\n+              headers={\n+                'Content-Type': 'application/vnd.docker.distribution.manifest.list.v2+json',\n+              }))\n+\n+    def workflow(self, build_process_failed=False, registries=None, registry_types=None,\n+                 platforms=None, platform_descriptors=None, group=True, no_amd64=False,\n+                 fail=False):\n+        tag_conf = TagConf()\n+        tag_conf.add_unique_image(self.TEST_UNIQUE_IMAGE)\n+\n+        push_conf = PushConf()\n+\n+        if platform_descriptors is None:\n+            platform_descriptors = [\n+                {'platform': 'x86_64', 'architecture': 'amd64'},\n+                {'platform': 'ppc64le', 'architecture': 'ppc64le'},\n+                {'platform': 's390x', 'architecture': 's390x'},\n+            ]\n+\n+        if platforms is None:\n+            platforms = [descriptor['platform'] for descriptor in platform_descriptors]\n+\n+        if registries is None and registry_types is None:\n+            registry_types = [MEDIA_TYPE_DOCKER_V1, MEDIA_TYPE_DOCKER_V2_SCHEMA1,\n+                              MEDIA_TYPE_DOCKER_V2_SCHEMA2, MEDIA_TYPE_DOCKER_V2_MANIFEST_LIST]\n+\n+        if registries is None:\n+            registries = [ {\n+                'url': 'https://container-registry.example.com/v2',\n+                'version': 'v2',\n+                'insecure': True,\n+                'expected_media_types': registry_types\n+            } ]\n+        conf = {\n+            ReactorConfigKeys.VERSION_KEY: 1,\n+            'registries': registries,\n+        }\n+        if platform_descriptors:\n+            conf['platform_descriptors'] = platform_descriptors\n+\n+        plugin_workspace = {\n+            ReactorConfigPlugin.key: {\n+                WORKSPACE_CONF_KEY: ReactorConfig(conf)\n+            }\n+        }\n+\n+        for registry in registries:\n+            def get_manifest(request):\n+                media_types = request.headers.get('Accept', '').split(',')\n+                content_type = media_types[0]\n+\n+                return (200, {'Content-Type': content_type}, '{}')\n+\n+            url_regex = \"r'\" + registry['url'] + \".*/manifests/.*'\"\n+            url = re.compile(url_regex)\n+            responses.add_callback(responses.GET, url, callback=get_manifest)\n+\n+            expected_types = registry.get('expected_media_types', [])\n+            if fail == \"bad_results\":\n+                response_types = [MEDIA_TYPE_DOCKER_V1]\n+            elif no_amd64:\n+                response_types = [MEDIA_TYPE_DOCKER_V2_MANIFEST_LIST]\n+            else:\n+                response_types = expected_types\n+\n+            reguri = RegistryURI(registry['url']).docker_uri\n+            if re.match('http(s)?://', reguri):\n+                urlbase = reguri\n+            else:\n+                urlbase = 'https://{0}'.format(reguri)\n+\n+            actual_v2_url = urlbase + \"/v2/foo/manifests/unique-tag\"\n+            actual_v1_url = urlbase + \"/v1/repositories/foo/tags/unique-tag\"\n+\n+            v1_response = self.config_response_none\n+            v2_response = self.config_response_none\n+            v2_list_response = self.config_response_none\n+            if MEDIA_TYPE_DOCKER_V2_SCHEMA1 in response_types:\n+                v1_response = self.config_response_config_v1\n+            if MEDIA_TYPE_DOCKER_V2_SCHEMA2 in response_types:\n+                v2_response = self.config_response_config_v2\n+            if MEDIA_TYPE_DOCKER_V2_MANIFEST_LIST in response_types:\n+                v2_list_response = self.config_response_config_v2_list\n+            v2_header_v1 = {'Accept': MEDIA_TYPE_DOCKER_V2_SCHEMA1}\n+            v2_header_v2 = {'Accept': MEDIA_TYPE_DOCKER_V2_SCHEMA2}\n+            manifest_header = {'Accept': MEDIA_TYPE_DOCKER_V2_MANIFEST_LIST}\n+\n+            (flexmock(requests.Session)\n+                .should_receive('get')\n+                .with_args(actual_v2_url, headers=v2_header_v1,\n+                            auth=None, verify=False)\n+                .and_return(v1_response))\n+            (flexmock(requests.Session)\n+                .should_receive('get')\n+                .with_args(actual_v2_url, headers=v2_header_v2,\n+                            auth=None, verify=False)\n+                .and_return(v2_response))\n+            (flexmock(requests.Session)\n+                .should_receive('get')\n+                .with_args(actual_v2_url, headers={'Accept': MEDIA_TYPE_OCI_V1},\n+                            auth=None, verify=False)\n+                .and_return(self.config_response_none))\n+            (flexmock(requests.Session)\n+                .should_receive('get')\n+                .with_args(actual_v2_url, headers={'Accept': MEDIA_TYPE_OCI_V1_INDEX},\n+                            auth=None, verify=False)\n+                .and_return(self.config_response_none))\n+            (flexmock(requests.Session)\n+                .should_receive('get')\n+                .with_args(actual_v2_url, headers=manifest_header,\n+                            auth=None, verify=False)","path":"tests/plugins/test_verify_media_types.py","position":236,"original_position":236,"commit_id":"a4065b4f44f6f20d583c6fdb8fda5fe874506714","original_commit_id":"a4065b4f44f6f20d583c6fdb8fda5fe874506714","user":{"login":"stickler-ci","id":16011037,"node_id":"MDQ6VXNlcjE2MDExMDM3","avatar_url":"https://avatars3.githubusercontent.com/u/16011037?v=4","gravatar_id":"","url":"https://api.github.com/users/stickler-ci","html_url":"https://github.com/stickler-ci","followers_url":"https://api.github.com/users/stickler-ci/followers","following_url":"https://api.github.com/users/stickler-ci/following{/other_user}","gists_url":"https://api.github.com/users/stickler-ci/gists{/gist_id}","starred_url":"https://api.github.com/users/stickler-ci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stickler-ci/subscriptions","organizations_url":"https://api.github.com/users/stickler-ci/orgs","repos_url":"https://api.github.com/users/stickler-ci/repos","events_url":"https://api.github.com/users/stickler-ci/events{/privacy}","received_events_url":"https://api.github.com/users/stickler-ci/received_events","type":"User","site_admin":false},"body":"E127 continuation line over-indented for visual indent","created_at":"2018-09-11T16:01:17Z","updated_at":"2018-09-11T16:01:20Z","html_url":"https://github.com/projectatomic/atomic-reactor/pull/1071#discussion_r216724947","pull_request_url":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/comments/216724947"},"html":{"href":"https://github.com/projectatomic/atomic-reactor/pull/1071#discussion_r216724947"},"pull_request":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071"}}},"pull_request":{"url":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071","id":214681421,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE0NjgxNDIx","html_url":"https://github.com/projectatomic/atomic-reactor/pull/1071","diff_url":"https://github.com/projectatomic/atomic-reactor/pull/1071.diff","patch_url":"https://github.com/projectatomic/atomic-reactor/pull/1071.patch","issue_url":"https://api.github.com/repos/projectatomic/atomic-reactor/issues/1071","number":1071,"state":"open","locked":false,"title":"verify_media_types plugin","user":{"login":"mlangsdorf","id":8007405,"node_id":"MDQ6VXNlcjgwMDc0MDU=","avatar_url":"https://avatars0.githubusercontent.com/u/8007405?v=4","gravatar_id":"","url":"https://api.github.com/users/mlangsdorf","html_url":"https://github.com/mlangsdorf","followers_url":"https://api.github.com/users/mlangsdorf/followers","following_url":"https://api.github.com/users/mlangsdorf/following{/other_user}","gists_url":"https://api.github.com/users/mlangsdorf/gists{/gist_id}","starred_url":"https://api.github.com/users/mlangsdorf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mlangsdorf/subscriptions","organizations_url":"https://api.github.com/users/mlangsdorf/orgs","repos_url":"https://api.github.com/users/mlangsdorf/repos","events_url":"https://api.github.com/users/mlangsdorf/events{/privacy}","received_events_url":"https://api.github.com/users/mlangsdorf/received_events","type":"User","site_admin":false},"body":"Add the verify_media_types plugin. It runs in place of pulp_pull on builds that don't run pulp.\r\n\r\nWhen it runs, it\r\n1. gets the list of expected media types for each registry\r\n2. checks there aren't any overrides for the expected types. the only current override is if the x86_64 build did not run, only manifest lists are available.\r\n3. checks that a digest or images is available for each expected type\r\n4. returns the list of expected types or raises if an expected type does not have a digest or image.","created_at":"2018-09-11T15:53:15Z","updated_at":"2018-09-11T16:01:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"37d849c9e02b3b209c104fde3b5168ab0e0d7fe3","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071/commits","review_comments_url":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071/comments","review_comment_url":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/comments{/number}","comments_url":"https://api.github.com/repos/projectatomic/atomic-reactor/issues/1071/comments","statuses_url":"https://api.github.com/repos/projectatomic/atomic-reactor/statuses/a4065b4f44f6f20d583c6fdb8fda5fe874506714","head":{"label":"mlangsdorf:osbs6108","ref":"osbs6108","sha":"a4065b4f44f6f20d583c6fdb8fda5fe874506714","user":{"login":"mlangsdorf","id":8007405,"node_id":"MDQ6VXNlcjgwMDc0MDU=","avatar_url":"https://avatars0.githubusercontent.com/u/8007405?v=4","gravatar_id":"","url":"https://api.github.com/users/mlangsdorf","html_url":"https://github.com/mlangsdorf","followers_url":"https://api.github.com/users/mlangsdorf/followers","following_url":"https://api.github.com/users/mlangsdorf/following{/other_user}","gists_url":"https://api.github.com/users/mlangsdorf/gists{/gist_id}","starred_url":"https://api.github.com/users/mlangsdorf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mlangsdorf/subscriptions","organizations_url":"https://api.github.com/users/mlangsdorf/orgs","repos_url":"https://api.github.com/users/mlangsdorf/repos","events_url":"https://api.github.com/users/mlangsdorf/events{/privacy}","received_events_url":"https://api.github.com/users/mlangsdorf/received_events","type":"User","site_admin":false},"repo":{"id":96132282,"node_id":"MDEwOlJlcG9zaXRvcnk5NjEzMjI4Mg==","name":"atomic-reactor","full_name":"mlangsdorf/atomic-reactor","owner":{"login":"mlangsdorf","id":8007405,"node_id":"MDQ6VXNlcjgwMDc0MDU=","avatar_url":"https://avatars0.githubusercontent.com/u/8007405?v=4","gravatar_id":"","url":"https://api.github.com/users/mlangsdorf","html_url":"https://github.com/mlangsdorf","followers_url":"https://api.github.com/users/mlangsdorf/followers","following_url":"https://api.github.com/users/mlangsdorf/following{/other_user}","gists_url":"https://api.github.com/users/mlangsdorf/gists{/gist_id}","starred_url":"https://api.github.com/users/mlangsdorf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mlangsdorf/subscriptions","organizations_url":"https://api.github.com/users/mlangsdorf/orgs","repos_url":"https://api.github.com/users/mlangsdorf/repos","events_url":"https://api.github.com/users/mlangsdorf/events{/privacy}","received_events_url":"https://api.github.com/users/mlangsdorf/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mlangsdorf/atomic-reactor","description":"Simple python library for building docker images.","fork":true,"url":"https://api.github.com/repos/mlangsdorf/atomic-reactor","forks_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/forks","keys_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/teams","hooks_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/hooks","issue_events_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/issues/events{/number}","events_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/events","assignees_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/assignees{/user}","branches_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/branches{/branch}","tags_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/tags","blobs_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/git/refs{/sha}","trees_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/statuses/{sha}","languages_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/languages","stargazers_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/stargazers","contributors_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/contributors","subscribers_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/subscribers","subscription_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/subscription","commits_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/commits{/sha}","git_commits_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/git/commits{/sha}","comments_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/comments{/number}","issue_comment_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/issues/comments{/number}","contents_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/contents/{+path}","compare_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/merges","archive_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/downloads","issues_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/issues{/number}","pulls_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/pulls{/number}","milestones_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/milestones{/number}","notifications_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/labels{/name}","releases_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/releases{/id}","deployments_url":"https://api.github.com/repos/mlangsdorf/atomic-reactor/deployments","created_at":"2017-07-03T16:50:59Z","updated_at":"2018-09-11T15:41:11Z","pushed_at":"2018-09-11T15:41:24Z","git_url":"git://github.com/mlangsdorf/atomic-reactor.git","ssh_url":"git@github.com:mlangsdorf/atomic-reactor.git","clone_url":"https://github.com/mlangsdorf/atomic-reactor.git","svn_url":"https://github.com/mlangsdorf/atomic-reactor","homepage":"","size":3656,"stargazers_count":0,"watchers_count":0,"language":"Python","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":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"projectatomic:master","ref":"master","sha":"309ec2bea8b1a1b04568ee9ce45b0578f38af413","user":{"login":"projectatomic","id":6852258,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4NTIyNTg=","avatar_url":"https://avatars1.githubusercontent.com/u/6852258?v=4","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"repo":{"id":25527782,"node_id":"MDEwOlJlcG9zaXRvcnkyNTUyNzc4Mg==","name":"atomic-reactor","full_name":"projectatomic/atomic-reactor","owner":{"login":"projectatomic","id":6852258,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4NTIyNTg=","avatar_url":"https://avatars1.githubusercontent.com/u/6852258?v=4","gravatar_id":"","url":"https://api.github.com/users/projectatomic","html_url":"https://github.com/projectatomic","followers_url":"https://api.github.com/users/projectatomic/followers","following_url":"https://api.github.com/users/projectatomic/following{/other_user}","gists_url":"https://api.github.com/users/projectatomic/gists{/gist_id}","starred_url":"https://api.github.com/users/projectatomic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectatomic/subscriptions","organizations_url":"https://api.github.com/users/projectatomic/orgs","repos_url":"https://api.github.com/users/projectatomic/repos","events_url":"https://api.github.com/users/projectatomic/events{/privacy}","received_events_url":"https://api.github.com/users/projectatomic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/projectatomic/atomic-reactor","description":"Simple python library for building docker images.","fork":false,"url":"https://api.github.com/repos/projectatomic/atomic-reactor","forks_url":"https://api.github.com/repos/projectatomic/atomic-reactor/forks","keys_url":"https://api.github.com/repos/projectatomic/atomic-reactor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projectatomic/atomic-reactor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projectatomic/atomic-reactor/teams","hooks_url":"https://api.github.com/repos/projectatomic/atomic-reactor/hooks","issue_events_url":"https://api.github.com/repos/projectatomic/atomic-reactor/issues/events{/number}","events_url":"https://api.github.com/repos/projectatomic/atomic-reactor/events","assignees_url":"https://api.github.com/repos/projectatomic/atomic-reactor/assignees{/user}","branches_url":"https://api.github.com/repos/projectatomic/atomic-reactor/branches{/branch}","tags_url":"https://api.github.com/repos/projectatomic/atomic-reactor/tags","blobs_url":"https://api.github.com/repos/projectatomic/atomic-reactor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projectatomic/atomic-reactor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projectatomic/atomic-reactor/git/refs{/sha}","trees_url":"https://api.github.com/repos/projectatomic/atomic-reactor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projectatomic/atomic-reactor/statuses/{sha}","languages_url":"https://api.github.com/repos/projectatomic/atomic-reactor/languages","stargazers_url":"https://api.github.com/repos/projectatomic/atomic-reactor/stargazers","contributors_url":"https://api.github.com/repos/projectatomic/atomic-reactor/contributors","subscribers_url":"https://api.github.com/repos/projectatomic/atomic-reactor/subscribers","subscription_url":"https://api.github.com/repos/projectatomic/atomic-reactor/subscription","commits_url":"https://api.github.com/repos/projectatomic/atomic-reactor/commits{/sha}","git_commits_url":"https://api.github.com/repos/projectatomic/atomic-reactor/git/commits{/sha}","comments_url":"https://api.github.com/repos/projectatomic/atomic-reactor/comments{/number}","issue_comment_url":"https://api.github.com/repos/projectatomic/atomic-reactor/issues/comments{/number}","contents_url":"https://api.github.com/repos/projectatomic/atomic-reactor/contents/{+path}","compare_url":"https://api.github.com/repos/projectatomic/atomic-reactor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projectatomic/atomic-reactor/merges","archive_url":"https://api.github.com/repos/projectatomic/atomic-reactor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projectatomic/atomic-reactor/downloads","issues_url":"https://api.github.com/repos/projectatomic/atomic-reactor/issues{/number}","pulls_url":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls{/number}","milestones_url":"https://api.github.com/repos/projectatomic/atomic-reactor/milestones{/number}","notifications_url":"https://api.github.com/repos/projectatomic/atomic-reactor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projectatomic/atomic-reactor/labels{/name}","releases_url":"https://api.github.com/repos/projectatomic/atomic-reactor/releases{/id}","deployments_url":"https://api.github.com/repos/projectatomic/atomic-reactor/deployments","created_at":"2014-10-21T14:45:11Z","updated_at":"2018-09-11T14:58:18Z","pushed_at":"2018-09-11T15:53:16Z","git_url":"git://github.com/projectatomic/atomic-reactor.git","ssh_url":"git@github.com:projectatomic/atomic-reactor.git","clone_url":"https://github.com/projectatomic/atomic-reactor.git","svn_url":"https://github.com/projectatomic/atomic-reactor","homepage":"","size":3773,"stargazers_count":105,"watchers_count":105,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":45,"mirror_url":null,"archived":false,"open_issues_count":58,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":45,"open_issues":58,"watchers":105,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071"},"html":{"href":"https://github.com/projectatomic/atomic-reactor/pull/1071"},"issue":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/issues/1071"},"comments":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/issues/1071/comments"},"review_comments":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071/comments"},"review_comment":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/pulls/1071/commits"},"statuses":{"href":"https://api.github.com/repos/projectatomic/atomic-reactor/statuses/a4065b4f44f6f20d583c6fdb8fda5fe874506714"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"stickler-ci"}}