{"action":"created","comment":{"url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/comments/56408338","id":56408338,"diff_hunk":"@@ -0,0 +1,257 @@\n+/**\n+ * JBoss, Home of Professional Open Source\n+ * Copyright 2016, Red Hat Middleware LLC, and individual contributors\n+ * by the @authors tag. See the copyright.txt in the distribution for a\n+ * full listing of individual contributors.\n+ * <p>\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+ * http://www.apache.org/licenses/LICENSE-2.0\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+package org.arquillian.drone.browserstack.extension.local;\n+\n+import java.io.BufferedReader;\n+import java.io.File;\n+import java.io.IOException;\n+import java.io.InputStreamReader;\n+import java.io.UnsupportedEncodingException;\n+import java.util.ArrayList;\n+import java.util.Arrays;\n+import java.util.List;\n+import java.util.concurrent.Callable;\n+import java.util.concurrent.CountDownLatch;\n+import java.util.concurrent.Executors;\n+import java.util.concurrent.FutureTask;\n+import java.util.concurrent.TimeUnit;\n+import java.util.logging.Logger;\n+\n+import org.arquillian.spacelift.Spacelift;\n+import org.arquillian.spacelift.task.archive.UnzipTool;\n+import org.arquillian.spacelift.task.net.DownloadTool;\n+\n+/**\n+ * Is responsible for starting a BrowserStackLocal binary\n+ *\n+ * @author <a href=\"mailto:mjobanek@redhat.com\">Matous Jobanek</a>\n+ */\n+public class BrowserStackLocalRunner {\n+\n+    private static Logger log = Logger.getLogger(BrowserStackLocalRunner.class.getName());\n+\n+    private static BrowserStackLocalRunner browserStackLocalRunner = null;\n+\n+    private final File browserStackLocalDirectory = new File(\"target\" + File.separator + \"browserstacklocal\");\n+    private final File browserStackLocalFile =\n+        new File(browserStackLocalDirectory.getPath() + File.separator + \"BrowserStackLocal\" + (PlatformUtils\n+            .isWindows() ? \".exe\" : \"\"));\n+    private final String basicUrl = \"https://www.browserstack.com/browserstack-local/\";\n+\n+    private final CountDownLatch countDownLatch = new CountDownLatch(1);\n+    private Process process = null;\n+\n+    private BrowserStackLocalRunner() {\n+    }\n+\n+    /**\n+     * Returns an instance of BrowserStackLocalRunner. If there has been already created, returns this one, otherwise\n+     * creates and returns a new one - behaves like singleton\n+     *\n+     * @return An instance of BrowserStackLocalRunner\n+     */\n+    public static BrowserStackLocalRunner createBrowserStackLocalInstance() {\n+        if (browserStackLocalRunner == null) {\n+            browserStackLocalRunner = new BrowserStackLocalRunner();\n+        }\n+        return browserStackLocalRunner;\n+    }\n+\n+    /**\n+     * Indirectly runs BrowserStackLocal binary. In case that the binary has been already run, then does nothing.\n+     *\n+     * @param accessKey      An accessKey the binary should be ran with\n+     * @param additionalArgs additional arguments\n+     * @param localBinary    Path to a local binary of the BrowserStackLocal. If none, then it will be downloaded.\n+     */\n+    public void runBrowserStackLocal(String accessKey, String additionalArgs, String localBinary) {\n+        if (process != null) {\n+            return;\n+        }\n+        if (isEmpty(localBinary)) {\n+            if (!browserStackLocalFile.exists()) {\n+                prepareBrowserStackLocal();\n+            }\n+            runTheBinary(browserStackLocalFile, accessKey, additionalArgs);\n+\n+        } else {\n+            runTheBinary(new File(localBinary), accessKey, additionalArgs);\n+        }\n+    }\n+\n+    /**\n+     * Runs BrowserStackLocal binary. In case that the binary has been already run, then does nothing.\n+     *\n+     * @param binaryFile     A binary file to be run\n+     * @param accessKey      An accessKey the binary should be ran with\n+     * @param additionalArgs additional arguments\n+     */\n+    private void runTheBinary(File binaryFile, String accessKey, String additionalArgs) {\n+        List<String> args = new ArrayList<String>();\n+        args.add(binaryFile.getAbsolutePath());\n+        args.add(accessKey);\n+        if (!isEmpty(additionalArgs)) {\n+            args.addAll(Arrays.asList(additionalArgs.split(\" \")));\n+        }\n+        ProcessBuilder processBuilder = new ProcessBuilder().command(args);\n+\n+        try {\n+            process = processBuilder.start();\n+\n+            final Reader reader = new Reader();\n+            reader.start();\n+            Runtime.getRuntime().addShutdownHook(new CloseChildProcess());\n+            countDownLatch.await(20, TimeUnit.SECONDS);\n+\n+        } catch (UnsupportedEncodingException e) {\n+            e.printStackTrace();\n+        } catch (IOException e) {\n+            e.printStackTrace();\n+        } catch (InterruptedException e) {\n+            e.printStackTrace();\n+        }\n+    }\n+\n+    /**\n+     * Prepares the BrowserStackLocal binary. Creates the directory target/browserstacklocal; downloads a zip file\n+     * containing the binary; extracts it into the created directory and marks the binary as executable.\n+     */\n+    private void prepareBrowserStackLocal() {\n+        String platformBinaryNameUrl = getPlatformBinaryNameUrl();\n+        File browserStackLocalZipFile =\n+            new File(browserStackLocalDirectory.getPath() + File.separator + platformBinaryNameUrl);\n+        String url = basicUrl + platformBinaryNameUrl;\n+\n+        log.info(\"Creating directory: \" + browserStackLocalDirectory);\n+        browserStackLocalDirectory.mkdir();\n+\n+        log.info(\"downloading zip file from: \" + url + \" to \" + browserStackLocalZipFile.getPath());\n+        Spacelift.task(DownloadTool.class).from(url).to(browserStackLocalZipFile.getPath()).execute().await();\n+\n+        log.info(\"extracting zip file: \" + browserStackLocalZipFile + \" to \" + browserStackLocalDirectory.getPath());\n+        Spacelift.task(browserStackLocalZipFile, UnzipTool.class).toDir(browserStackLocalDirectory.getPath()).execute()","path":"extension/arquillian-drone-browserstack-extension/src/main/java/org/arquillian/drone/browserstack/extension/local/BrowserStackLocalRunner.java","position":146,"original_position":146,"commit_id":"d90706e645abcadd659ab15ccdc3642c77b5be6d","original_commit_id":"d90706e645abcadd659ab15ccdc3642c77b5be6d","user":{"login":"smiklosovic","id":588603,"avatar_url":"https://avatars.githubusercontent.com/u/588603?v=3","gravatar_id":"","url":"https://api.github.com/users/smiklosovic","html_url":"https://github.com/smiklosovic","followers_url":"https://api.github.com/users/smiklosovic/followers","following_url":"https://api.github.com/users/smiklosovic/following{/other_user}","gists_url":"https://api.github.com/users/smiklosovic/gists{/gist_id}","starred_url":"https://api.github.com/users/smiklosovic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smiklosovic/subscriptions","organizations_url":"https://api.github.com/users/smiklosovic/orgs","repos_url":"https://api.github.com/users/smiklosovic/repos","events_url":"https://api.github.com/users/smiklosovic/events{/privacy}","received_events_url":"https://api.github.com/users/smiklosovic/received_events","type":"User","site_admin":false},"body":"just a hint, these commands tends to be too long and harder to read, i prefer something like this:\r\n\r\n`\r\nSpacelift.task(browserStackLocalZipFile, UnzipTool.class)\r\n    .toDir(browserStackLocalDirectory.getPath())\r\n    .execute()\r\n`","created_at":"2016-03-16T20:27:18Z","updated_at":"2016-03-16T20:27:18Z","html_url":"https://github.com/arquillian/arquillian-extension-drone/pull/62#discussion_r56408338","pull_request_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62","_links":{"self":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/comments/56408338"},"html":{"href":"https://github.com/arquillian/arquillian-extension-drone/pull/62#discussion_r56408338"},"pull_request":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62"}}},"pull_request":{"url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62","id":63062663,"html_url":"https://github.com/arquillian/arquillian-extension-drone/pull/62","diff_url":"https://github.com/arquillian/arquillian-extension-drone/pull/62.diff","patch_url":"https://github.com/arquillian/arquillian-extension-drone/pull/62.patch","issue_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/issues/62","number":62,"state":"open","locked":false,"title":"Arquillian Drone BrowserStack extension","user":{"login":"MatousJobanek","id":1510709,"avatar_url":"https://avatars.githubusercontent.com/u/1510709?v=3","gravatar_id":"","url":"https://api.github.com/users/MatousJobanek","html_url":"https://github.com/MatousJobanek","followers_url":"https://api.github.com/users/MatousJobanek/followers","following_url":"https://api.github.com/users/MatousJobanek/following{/other_user}","gists_url":"https://api.github.com/users/MatousJobanek/gists{/gist_id}","starred_url":"https://api.github.com/users/MatousJobanek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatousJobanek/subscriptions","organizations_url":"https://api.github.com/users/MatousJobanek/orgs","repos_url":"https://api.github.com/users/MatousJobanek/repos","events_url":"https://api.github.com/users/MatousJobanek/events{/privacy}","received_events_url":"https://api.github.com/users/MatousJobanek/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-03-16T13:19:44Z","updated_at":"2016-03-16T20:27:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"85e8787b2d27ac5cab06dc399ae49ea02d0921a4","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62/commits","review_comments_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62/comments","review_comment_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/comments{/number}","comments_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/issues/62/comments","statuses_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/statuses/d90706e645abcadd659ab15ccdc3642c77b5be6d","head":{"label":"MatousJobanek:browserstack","ref":"browserstack","sha":"d90706e645abcadd659ab15ccdc3642c77b5be6d","user":{"login":"MatousJobanek","id":1510709,"avatar_url":"https://avatars.githubusercontent.com/u/1510709?v=3","gravatar_id":"","url":"https://api.github.com/users/MatousJobanek","html_url":"https://github.com/MatousJobanek","followers_url":"https://api.github.com/users/MatousJobanek/followers","following_url":"https://api.github.com/users/MatousJobanek/following{/other_user}","gists_url":"https://api.github.com/users/MatousJobanek/gists{/gist_id}","starred_url":"https://api.github.com/users/MatousJobanek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatousJobanek/subscriptions","organizations_url":"https://api.github.com/users/MatousJobanek/orgs","repos_url":"https://api.github.com/users/MatousJobanek/repos","events_url":"https://api.github.com/users/MatousJobanek/events{/privacy}","received_events_url":"https://api.github.com/users/MatousJobanek/received_events","type":"User","site_admin":false},"repo":{"id":37663766,"name":"arquillian-extension-drone","full_name":"MatousJobanek/arquillian-extension-drone","owner":{"login":"MatousJobanek","id":1510709,"avatar_url":"https://avatars.githubusercontent.com/u/1510709?v=3","gravatar_id":"","url":"https://api.github.com/users/MatousJobanek","html_url":"https://github.com/MatousJobanek","followers_url":"https://api.github.com/users/MatousJobanek/followers","following_url":"https://api.github.com/users/MatousJobanek/following{/other_user}","gists_url":"https://api.github.com/users/MatousJobanek/gists{/gist_id}","starred_url":"https://api.github.com/users/MatousJobanek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatousJobanek/subscriptions","organizations_url":"https://api.github.com/users/MatousJobanek/orgs","repos_url":"https://api.github.com/users/MatousJobanek/repos","events_url":"https://api.github.com/users/MatousJobanek/events{/privacy}","received_events_url":"https://api.github.com/users/MatousJobanek/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MatousJobanek/arquillian-extension-drone","description":"Arquillian Drone Extension","fork":true,"url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone","forks_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/forks","keys_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/teams","hooks_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/hooks","issue_events_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/issues/events{/number}","events_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/events","assignees_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/assignees{/user}","branches_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/branches{/branch}","tags_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/tags","blobs_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/git/refs{/sha}","trees_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/statuses/{sha}","languages_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/languages","stargazers_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/stargazers","contributors_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/contributors","subscribers_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/subscribers","subscription_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/subscription","commits_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/commits{/sha}","git_commits_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/git/commits{/sha}","comments_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/comments{/number}","issue_comment_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/issues/comments{/number}","contents_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/contents/{+path}","compare_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/merges","archive_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/downloads","issues_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/issues{/number}","pulls_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/pulls{/number}","milestones_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/milestones{/number}","notifications_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/labels{/name}","releases_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/releases{/id}","deployments_url":"https://api.github.com/repos/MatousJobanek/arquillian-extension-drone/deployments","created_at":"2015-06-18T14:19:21Z","updated_at":"2016-02-23T12:30:12Z","pushed_at":"2016-03-16T15:13:10Z","git_url":"git://github.com/MatousJobanek/arquillian-extension-drone.git","ssh_url":"git@github.com:MatousJobanek/arquillian-extension-drone.git","clone_url":"https://github.com/MatousJobanek/arquillian-extension-drone.git","svn_url":"https://github.com/MatousJobanek/arquillian-extension-drone","homepage":"","size":1883,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"arquillian:master","ref":"master","sha":"43967a8fbc958b224d5fe518f3efa138f1e976db","user":{"login":"arquillian","id":330981,"avatar_url":"https://avatars.githubusercontent.com/u/330981?v=3","gravatar_id":"","url":"https://api.github.com/users/arquillian","html_url":"https://github.com/arquillian","followers_url":"https://api.github.com/users/arquillian/followers","following_url":"https://api.github.com/users/arquillian/following{/other_user}","gists_url":"https://api.github.com/users/arquillian/gists{/gist_id}","starred_url":"https://api.github.com/users/arquillian/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arquillian/subscriptions","organizations_url":"https://api.github.com/users/arquillian/orgs","repos_url":"https://api.github.com/users/arquillian/repos","events_url":"https://api.github.com/users/arquillian/events{/privacy}","received_events_url":"https://api.github.com/users/arquillian/received_events","type":"Organization","site_admin":false},"repo":{"id":1529695,"name":"arquillian-extension-drone","full_name":"arquillian/arquillian-extension-drone","owner":{"login":"arquillian","id":330981,"avatar_url":"https://avatars.githubusercontent.com/u/330981?v=3","gravatar_id":"","url":"https://api.github.com/users/arquillian","html_url":"https://github.com/arquillian","followers_url":"https://api.github.com/users/arquillian/followers","following_url":"https://api.github.com/users/arquillian/following{/other_user}","gists_url":"https://api.github.com/users/arquillian/gists{/gist_id}","starred_url":"https://api.github.com/users/arquillian/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arquillian/subscriptions","organizations_url":"https://api.github.com/users/arquillian/orgs","repos_url":"https://api.github.com/users/arquillian/repos","events_url":"https://api.github.com/users/arquillian/events{/privacy}","received_events_url":"https://api.github.com/users/arquillian/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/arquillian/arquillian-extension-drone","description":"Arquillian Drone Extension","fork":false,"url":"https://api.github.com/repos/arquillian/arquillian-extension-drone","forks_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/forks","keys_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/keys{/key_id}","collaborators_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/teams","hooks_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/hooks","issue_events_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/issues/events{/number}","events_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/events","assignees_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/assignees{/user}","branches_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/branches{/branch}","tags_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/tags","blobs_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/git/refs{/sha}","trees_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/git/trees{/sha}","statuses_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/statuses/{sha}","languages_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/languages","stargazers_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/stargazers","contributors_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/contributors","subscribers_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/subscribers","subscription_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/subscription","commits_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/commits{/sha}","git_commits_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/git/commits{/sha}","comments_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/comments{/number}","issue_comment_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/issues/comments{/number}","contents_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/contents/{+path}","compare_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/compare/{base}...{head}","merges_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/merges","archive_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/downloads","issues_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/issues{/number}","pulls_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls{/number}","milestones_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/milestones{/number}","notifications_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/labels{/name}","releases_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/releases{/id}","deployments_url":"https://api.github.com/repos/arquillian/arquillian-extension-drone/deployments","created_at":"2011-03-26T16:24:18Z","updated_at":"2015-11-10T22:56:01Z","pushed_at":"2016-03-16T15:13:10Z","git_url":"git://github.com/arquillian/arquillian-extension-drone.git","ssh_url":"git@github.com:arquillian/arquillian-extension-drone.git","clone_url":"https://github.com/arquillian/arquillian-extension-drone.git","svn_url":"https://github.com/arquillian/arquillian-extension-drone","homepage":"","size":2037,"stargazers_count":28,"watchers_count":28,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":23,"mirror_url":null,"open_issues_count":8,"forks":23,"open_issues":8,"watchers":28,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62"},"html":{"href":"https://github.com/arquillian/arquillian-extension-drone/pull/62"},"issue":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/issues/62"},"comments":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/issues/62/comments"},"review_comments":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62/comments"},"review_comment":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/pulls/62/commits"},"statuses":{"href":"https://api.github.com/repos/arquillian/arquillian-extension-drone/statuses/d90706e645abcadd659ab15ccdc3642c77b5be6d"}}}}