{"action":"created","comment":{"url":"https://api.github.com/repos/cfengine/core/pulls/comments/168834674","pull_request_review_id":97273189,"id":168834674,"diff_hunk":"@@ -0,0 +1,240 @@\n+#!/bin/sh\n+# Author: Mike Weilgart <mike.weilgart@verticalsysadmin.com>\n+#   (inspired by Aleksey Tsalolikhin)\n+# Date: 8 January 2018\n+# Purpose: Test the CFEngine health of a host\n+# and report on it using Test Anything Protocol\n+# (https://testanything.org/)\n+\n+ok_versions='\n+-e 3.7.3\n+-e 3.10.2\n+' # to be fed to: grep -qFx $ok_versions\n+\n+################################## FRAMEWORK ##################################\n+\n+# You shouldn't need to modify anything in this section.\n+# Skip ahead to TESTS instead.\n+\n+test_number=0\n+\n+outcome() {\n+  # Accepts from one to three args:\n+  # First - outcome, should be 'ok' or 'not ok'\n+  # Second - optional description\n+  # Third - optional directive\n+  # (see TAP specification https://testanything.org/tap-specification.html)\n+\n+  # (Third arg not currently used.)\n+\n+  test_number=\"$((test_number+1))\"\n+  printf '%s %d%s%s\\n' \"$1\" \"$test_number\" ${2+\" - $2\"} ${3+\" # $3\"}\n+  # See https://unix.stackexchange.com/a/68488/135943\n+  # for the basis of the shell trick in use here\n+}\n+\n+succeed() {\n+  outcome ok \"$@\"\n+}\n+\n+fail() {\n+  outcome 'not ok' \"$@\"\n+}\n+\n+bail() {\n+  printf 'Bail out!%s\\n' ${1+\" $1\"}\n+  exit\n+}\n+\n+trap 'printf \"1..%d\\n\" \"$test_number\"' EXIT\n+\n+#################################### TESTS ####################################\n+\n+# I recommend custom checks be added only at the end.\n+# Skip ahead to CUSTOM TESTS.\n+\n+# Show host key (digest)\n+printf '# '\n+cf-key -p /var/cfengine/ppkeys/localhost.pub 2>/dev/null || echo SHA not available\n+\n+# VERSION CHECKS\n+# makes use of 'ok_versions' defined at top of script\n+\n+version_data=\"$(cf-agent -V 2>/dev/null)\"\n+if [ \"$?\" = 127 ]; then # Don't go further if cf-agent missing\n+  bail \"$(cf-agent -V 2>&1 1>/dev/null)\"\n+fi\n+\n+# Beware literal newlines; don't try adding trailing comments!\n+core_version_line=\"${version_data%\n+*}\" # e.g. 'CFEngine Core 3.7.3'\n+core_version=\"${core_version_line##* }\" # e.g. '3.7.3'\n+enterprise_version_line=\"${version_data#*\n+}\" # e.g. 'CFEngine Enterprise 3.7.3'\n+enterprise_version=\"${enterprise_version_line##* }\" # e.g. '3.7.3'\n+\n+desc=\"Expected Core version\"\n+if printf '%s\\n' \"$core_version\" | grep -qFx $ok_versions; then\n+  succeed \"$desc\"\n+else\n+  fail \"$desc\"\n+fi\n+\n+desc=\"Expected Enterprise version\"\n+if printf '%s\\n' \"$enterprise_version\" | grep -qFx $ok_versions; then\n+  succeed \"$desc\"\n+else\n+  fail \"$desc\"\n+fi\n+\n+desc=\"Core version matches Enterprise version\"\n+# In pathological cases these may not match.\n+# The individual checks for Core and Enterprise versions ok\n+# may not detect these pathological cases if e.g. 3.7.3 and 3.10.2\n+# are both allowed (\"okay\") versions, so we test it separately.\n+if [ \"$core_version\" = \"$enterprise_version\" ]; then\n+  succeed \"$desc\"\n+else\n+  fail \"$desc\"\n+fi\n+\n+# Show actual version data\n+# (Can be commented out if you only allow one version anyway.)\n+printf '# %s\\n' \"$core_version_line\" \"$enterprise_version_line\"\n+\n+# CFENGINE FUNCTIONING\n+\n+# Check all three daemons as separate tests\n+for d in cf-execd cf-monitord cf-serverd; do\n+  desc=\"$d running\"\n+  if pgrep \"$d\" >/dev/null 2>/dev/null; then\n+    succeed \"$desc\"\n+  else\n+    fail \"$desc\"\n+  fi\n+done\n+\n+# Test for recent run:\n+\n+# 15 minutes is three times the out-of-the-box default run interval (5 min)\n+# However, as noted by Neil Watson\n+# (in this ticket: https://tracker.mender.io/browse/CFE-769),\n+# most large CFEngine installations use longer (less frequent) run intervals.\n+\n+# Note also THIS TEST MAY FAIL ON NON-LINUX SYSTEMS.\n+# There is no portable approach I can find for this 'stat' command.\n+# However, I consider this a minor (negligible) issue.\n+# (It will also fail with coreutils 8.6, but 8.5 and 8.7+ are fine:\n+# see https://unix.stackexchange.com/q/3348/135943.)  :)\n+\n+desc=\"cf-agent ran in last 15 minutes\"\n+if [ \"$(($(date +%s)-$(stat -c %Y /var/cfengine/promise_summary.log)))\" -lt 900 ]; then\n+  succeed \"$desc\"\n+else\n+  fail \"$desc\"\n+fi\n+\n+# HUB CHECKS\n+\n+desc=\"Bootstrapped to hub (policy_server.dat exists)\"\n+if [ -f /var/cfengine/policy_server.dat ]; then\n+  succeed \"$desc\"\n+  hub_ip=\"$(cat /var/cfengine/policy_server.dat)\"\n+  printf '# Hub IP is %s\\n' \"$hub_ip\"\n+else\n+  fail \"$desc\"\n+  bail 'Not connected to any hub.'\n+fi\n+\n+desc=\"Hub is connecting to host\"\n+if cf-key -s | grep ^Incoming | grep -qF \"$hub_ip\"; then\n+  succeed \"$desc\"\n+\n+  hub_lastseen=\"$(cf-key -s |grep -F \"$hub_ip\" |awk '/^Incoming/{print $4, $5, $6, $7, $8}')\"\n+  hub_lastseen_in_seconds=\"$(date +%s -d \"$hub_lastseen\")\"\n+  now=\"$(date +%s)\"\n+  seconds_since_conn=\"$((now-hub_lastseen_in_seconds))\"\n+\n+  desc=\"Hub connected to host within last 15 minutes\"\n+  if [ \"$seconds_since_conn\" -lt 900 ]; then\n+    succeed \"$desc\"\n+  else\n+    fail \"$desc\"\n+  fi\n+  printf '# Has been %d seconds since last connection\\n' \"$seconds_since_conn\"\n+\n+else\n+  # Hub connection fail\n+  fail \"$desc\"\n+fi\n+\n+### SYSTEM CHECKS\n+\n+disk_usage=\"$(df -P / | awk '/\\//{print $5}')\"\n+\n+desc=\"Filesystem has free space\"\n+if [ \"$disk_usage\" = '100%' ]; then\n+  fail \"$desc\"\n+  bail \"Can't continue with full disk\"\n+else\n+  succeed \"$desc\"\n+  printf '# Disk usage is %s\\n' \"$disk_usage\"\n+fi\n+\n+desc=\"Filesystem is writable\"\n+if touch /tmp/cf_diag_test 2>/dev/null; then\n+  succeed \"$desc\"\n+  rm /tmp/cf_diag_test\n+else\n+  fail \"$desc\"\n+  bail \"Can't continue with read-only filesystem\"\n+fi\n+\n+### POLICY CHECKS\n+\n+for f in promises.cf update.cf; do\n+  desc=\"$f exists\"\n+  if [ -f /var/cfengine/inputs/\"$f\" ]; then\n+    succeed \"$desc\"\n+  else\n+    fail \"$desc\"\n+    bail \"No $f\"\n+  fi\n+done\n+\n+# The tests below this point may take a long time to run,\n+# depending on how efficiently your CFEngine policy is written.\n+\n+for f in promises.cf update.cf; do\n+  desc=\"$f is runnable\"\n+  if cf-agent -f \"$f\" >/dev/null 2>&1; then\n+    succeed \"$desc\"\n+  else\n+    fail \"$desc\"\n+    bail \"$f not runnable\"\n+  fi\n+done\n+\n+desc=\"Update run fixes changes to policy\"\n+# Running update policy (after deleting flag file)\n+# should repair alteration of promises.cf\n+echo '#cf-diag_comment' >> /var/cfengine/inputs/promises.cf\n+rm -f /var/cfengine/inputs/cf_promises_validated\n+cf-agent -K -f update.cf >/dev/null 2>&1\n+if grep -q cf-diag_comment /var/cfengine/inputs/promises.cf; then\n+  fail \"$desc\"\n+else\n+  succeed \"$desc\"\n+fi\n+\n+############################### CUSTOM TESTS ##################################\n+\n+# Add custom tests here (if you really need them).\n+# Use the general form:\n+#\n+#   desc=\"Name of test (descriptive string)\"\n+#   if some-command-that-should-succeed; then\n+#     succeed \"$desc\"\n+#   else\n+#     fail \"$desc\"\n+#   fi","path":"contrib/cf-diag.sh","position":240,"original_position":240,"commit_id":"833604e1b5a24745e2cc1c6bfea0fe5ce446a157","original_commit_id":"833604e1b5a24745e2cc1c6bfea0fe5ce446a157","user":{"login":"Lex-2008","id":6545284,"avatar_url":"https://avatars0.githubusercontent.com/u/6545284?v=4","gravatar_id":"","url":"https://api.github.com/users/Lex-2008","html_url":"https://github.com/Lex-2008","followers_url":"https://api.github.com/users/Lex-2008/followers","following_url":"https://api.github.com/users/Lex-2008/following{/other_user}","gists_url":"https://api.github.com/users/Lex-2008/gists{/gist_id}","starred_url":"https://api.github.com/users/Lex-2008/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Lex-2008/subscriptions","organizations_url":"https://api.github.com/users/Lex-2008/orgs","repos_url":"https://api.github.com/users/Lex-2008/repos","events_url":"https://api.github.com/users/Lex-2008/events{/privacy}","received_events_url":"https://api.github.com/users/Lex-2008/received_events","type":"User","site_admin":false},"body":"Yes, like nested `if`s...\r\n\r\nBut maybe for simple cases?","created_at":"2018-02-16T18:28:43Z","updated_at":"2018-02-16T18:28:43Z","html_url":"https://github.com/cfengine/core/pull/3022#discussion_r168834674","pull_request_url":"https://api.github.com/repos/cfengine/core/pulls/3022","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/cfengine/core/pulls/comments/168834674"},"html":{"href":"https://github.com/cfengine/core/pull/3022#discussion_r168834674"},"pull_request":{"href":"https://api.github.com/repos/cfengine/core/pulls/3022"}},"in_reply_to_id":168830484},"pull_request":{"url":"https://api.github.com/repos/cfengine/core/pulls/3022","id":168362584,"html_url":"https://github.com/cfengine/core/pull/3022","diff_url":"https://github.com/cfengine/core/pull/3022.diff","patch_url":"https://github.com/cfengine/core/pull/3022.patch","issue_url":"https://api.github.com/repos/cfengine/core/issues/3022","number":3022,"state":"open","locked":false,"title":"Create cf-diag.sh","user":{"login":"mikeweilgart","id":15166719,"avatar_url":"https://avatars0.githubusercontent.com/u/15166719?v=4","gravatar_id":"","url":"https://api.github.com/users/mikeweilgart","html_url":"https://github.com/mikeweilgart","followers_url":"https://api.github.com/users/mikeweilgart/followers","following_url":"https://api.github.com/users/mikeweilgart/following{/other_user}","gists_url":"https://api.github.com/users/mikeweilgart/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeweilgart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeweilgart/subscriptions","organizations_url":"https://api.github.com/users/mikeweilgart/orgs","repos_url":"https://api.github.com/users/mikeweilgart/repos","events_url":"https://api.github.com/users/mikeweilgart/events{/privacy}","received_events_url":"https://api.github.com/users/mikeweilgart/received_events","type":"User","site_admin":false},"body":"This is a standalone diagnostic shell script that should run properly on ANY system that can run CFEngine.\r\nIt is intended for operator use in quickly diagnosing a system.  However, it uses \"test anything protocol\" so can\r\nalso be used from any \"harness\" designed for that.  (https://testanything.org/)\r\n\r\nOne test (\"cf-agent ran in last 15 minutes\") may falsely fail on systems without GNU coreutils (I depend on \"stat\"\r\nfor that test), but otherwise I would expect this script to work on a wide variety of OSes.","created_at":"2018-02-09T23:01:18Z","updated_at":"2018-02-16T18:28:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"723d5d9137d794a04ebe7f3588ad6fb72112364b","assignee":{"login":"nickanderson","id":202896,"avatar_url":"https://avatars0.githubusercontent.com/u/202896?v=4","gravatar_id":"","url":"https://api.github.com/users/nickanderson","html_url":"https://github.com/nickanderson","followers_url":"https://api.github.com/users/nickanderson/followers","following_url":"https://api.github.com/users/nickanderson/following{/other_user}","gists_url":"https://api.github.com/users/nickanderson/gists{/gist_id}","starred_url":"https://api.github.com/users/nickanderson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickanderson/subscriptions","organizations_url":"https://api.github.com/users/nickanderson/orgs","repos_url":"https://api.github.com/users/nickanderson/repos","events_url":"https://api.github.com/users/nickanderson/events{/privacy}","received_events_url":"https://api.github.com/users/nickanderson/received_events","type":"User","site_admin":false},"assignees":[{"login":"nickanderson","id":202896,"avatar_url":"https://avatars0.githubusercontent.com/u/202896?v=4","gravatar_id":"","url":"https://api.github.com/users/nickanderson","html_url":"https://github.com/nickanderson","followers_url":"https://api.github.com/users/nickanderson/followers","following_url":"https://api.github.com/users/nickanderson/following{/other_user}","gists_url":"https://api.github.com/users/nickanderson/gists{/gist_id}","starred_url":"https://api.github.com/users/nickanderson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickanderson/subscriptions","organizations_url":"https://api.github.com/users/nickanderson/orgs","repos_url":"https://api.github.com/users/nickanderson/repos","events_url":"https://api.github.com/users/nickanderson/events{/privacy}","received_events_url":"https://api.github.com/users/nickanderson/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/cfengine/core/pulls/3022/commits","review_comments_url":"https://api.github.com/repos/cfengine/core/pulls/3022/comments","review_comment_url":"https://api.github.com/repos/cfengine/core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cfengine/core/issues/3022/comments","statuses_url":"https://api.github.com/repos/cfengine/core/statuses/833604e1b5a24745e2cc1c6bfea0fe5ce446a157","head":{"label":"mikeweilgart:patch-2","ref":"patch-2","sha":"833604e1b5a24745e2cc1c6bfea0fe5ce446a157","user":{"login":"mikeweilgart","id":15166719,"avatar_url":"https://avatars0.githubusercontent.com/u/15166719?v=4","gravatar_id":"","url":"https://api.github.com/users/mikeweilgart","html_url":"https://github.com/mikeweilgart","followers_url":"https://api.github.com/users/mikeweilgart/followers","following_url":"https://api.github.com/users/mikeweilgart/following{/other_user}","gists_url":"https://api.github.com/users/mikeweilgart/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeweilgart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeweilgart/subscriptions","organizations_url":"https://api.github.com/users/mikeweilgart/orgs","repos_url":"https://api.github.com/users/mikeweilgart/repos","events_url":"https://api.github.com/users/mikeweilgart/events{/privacy}","received_events_url":"https://api.github.com/users/mikeweilgart/received_events","type":"User","site_admin":false},"repo":{"id":46297367,"name":"core","full_name":"mikeweilgart/core","owner":{"login":"mikeweilgart","id":15166719,"avatar_url":"https://avatars0.githubusercontent.com/u/15166719?v=4","gravatar_id":"","url":"https://api.github.com/users/mikeweilgart","html_url":"https://github.com/mikeweilgart","followers_url":"https://api.github.com/users/mikeweilgart/followers","following_url":"https://api.github.com/users/mikeweilgart/following{/other_user}","gists_url":"https://api.github.com/users/mikeweilgart/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeweilgart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeweilgart/subscriptions","organizations_url":"https://api.github.com/users/mikeweilgart/orgs","repos_url":"https://api.github.com/users/mikeweilgart/repos","events_url":"https://api.github.com/users/mikeweilgart/events{/privacy}","received_events_url":"https://api.github.com/users/mikeweilgart/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikeweilgart/core","description":"CFEngine Community","fork":true,"url":"https://api.github.com/repos/mikeweilgart/core","forks_url":"https://api.github.com/repos/mikeweilgart/core/forks","keys_url":"https://api.github.com/repos/mikeweilgart/core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikeweilgart/core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikeweilgart/core/teams","hooks_url":"https://api.github.com/repos/mikeweilgart/core/hooks","issue_events_url":"https://api.github.com/repos/mikeweilgart/core/issues/events{/number}","events_url":"https://api.github.com/repos/mikeweilgart/core/events","assignees_url":"https://api.github.com/repos/mikeweilgart/core/assignees{/user}","branches_url":"https://api.github.com/repos/mikeweilgart/core/branches{/branch}","tags_url":"https://api.github.com/repos/mikeweilgart/core/tags","blobs_url":"https://api.github.com/repos/mikeweilgart/core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikeweilgart/core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikeweilgart/core/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikeweilgart/core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikeweilgart/core/statuses/{sha}","languages_url":"https://api.github.com/repos/mikeweilgart/core/languages","stargazers_url":"https://api.github.com/repos/mikeweilgart/core/stargazers","contributors_url":"https://api.github.com/repos/mikeweilgart/core/contributors","subscribers_url":"https://api.github.com/repos/mikeweilgart/core/subscribers","subscription_url":"https://api.github.com/repos/mikeweilgart/core/subscription","commits_url":"https://api.github.com/repos/mikeweilgart/core/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikeweilgart/core/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikeweilgart/core/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikeweilgart/core/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikeweilgart/core/contents/{+path}","compare_url":"https://api.github.com/repos/mikeweilgart/core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikeweilgart/core/merges","archive_url":"https://api.github.com/repos/mikeweilgart/core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikeweilgart/core/downloads","issues_url":"https://api.github.com/repos/mikeweilgart/core/issues{/number}","pulls_url":"https://api.github.com/repos/mikeweilgart/core/pulls{/number}","milestones_url":"https://api.github.com/repos/mikeweilgart/core/milestones{/number}","notifications_url":"https://api.github.com/repos/mikeweilgart/core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikeweilgart/core/labels{/name}","releases_url":"https://api.github.com/repos/mikeweilgart/core/releases{/id}","deployments_url":"https://api.github.com/repos/mikeweilgart/core/deployments","created_at":"2015-11-16T19:34:14Z","updated_at":"2015-11-16T19:34:26Z","pushed_at":"2018-02-09T05:08:30Z","git_url":"git://github.com/mikeweilgart/core.git","ssh_url":"git@github.com:mikeweilgart/core.git","clone_url":"https://github.com/mikeweilgart/core.git","svn_url":"https://github.com/mikeweilgart/core","homepage":"https://cfengine.com/community/","size":53821,"stargazers_count":0,"watchers_count":0,"language":"C","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":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"cfengine:master","ref":"master","sha":"32aa3bfad3397e5d92800c6be1995285f6c7fe80","user":{"login":"cfengine","id":1239823,"avatar_url":"https://avatars0.githubusercontent.com/u/1239823?v=4","gravatar_id":"","url":"https://api.github.com/users/cfengine","html_url":"https://github.com/cfengine","followers_url":"https://api.github.com/users/cfengine/followers","following_url":"https://api.github.com/users/cfengine/following{/other_user}","gists_url":"https://api.github.com/users/cfengine/gists{/gist_id}","starred_url":"https://api.github.com/users/cfengine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfengine/subscriptions","organizations_url":"https://api.github.com/users/cfengine/orgs","repos_url":"https://api.github.com/users/cfengine/repos","events_url":"https://api.github.com/users/cfengine/events{/privacy}","received_events_url":"https://api.github.com/users/cfengine/received_events","type":"Organization","site_admin":false},"repo":{"id":3543548,"name":"core","full_name":"cfengine/core","owner":{"login":"cfengine","id":1239823,"avatar_url":"https://avatars0.githubusercontent.com/u/1239823?v=4","gravatar_id":"","url":"https://api.github.com/users/cfengine","html_url":"https://github.com/cfengine","followers_url":"https://api.github.com/users/cfengine/followers","following_url":"https://api.github.com/users/cfengine/following{/other_user}","gists_url":"https://api.github.com/users/cfengine/gists{/gist_id}","starred_url":"https://api.github.com/users/cfengine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfengine/subscriptions","organizations_url":"https://api.github.com/users/cfengine/orgs","repos_url":"https://api.github.com/users/cfengine/repos","events_url":"https://api.github.com/users/cfengine/events{/privacy}","received_events_url":"https://api.github.com/users/cfengine/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cfengine/core","description":"CFEngine Community","fork":false,"url":"https://api.github.com/repos/cfengine/core","forks_url":"https://api.github.com/repos/cfengine/core/forks","keys_url":"https://api.github.com/repos/cfengine/core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cfengine/core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cfengine/core/teams","hooks_url":"https://api.github.com/repos/cfengine/core/hooks","issue_events_url":"https://api.github.com/repos/cfengine/core/issues/events{/number}","events_url":"https://api.github.com/repos/cfengine/core/events","assignees_url":"https://api.github.com/repos/cfengine/core/assignees{/user}","branches_url":"https://api.github.com/repos/cfengine/core/branches{/branch}","tags_url":"https://api.github.com/repos/cfengine/core/tags","blobs_url":"https://api.github.com/repos/cfengine/core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cfengine/core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cfengine/core/git/refs{/sha}","trees_url":"https://api.github.com/repos/cfengine/core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cfengine/core/statuses/{sha}","languages_url":"https://api.github.com/repos/cfengine/core/languages","stargazers_url":"https://api.github.com/repos/cfengine/core/stargazers","contributors_url":"https://api.github.com/repos/cfengine/core/contributors","subscribers_url":"https://api.github.com/repos/cfengine/core/subscribers","subscription_url":"https://api.github.com/repos/cfengine/core/subscription","commits_url":"https://api.github.com/repos/cfengine/core/commits{/sha}","git_commits_url":"https://api.github.com/repos/cfengine/core/git/commits{/sha}","comments_url":"https://api.github.com/repos/cfengine/core/comments{/number}","issue_comment_url":"https://api.github.com/repos/cfengine/core/issues/comments{/number}","contents_url":"https://api.github.com/repos/cfengine/core/contents/{+path}","compare_url":"https://api.github.com/repos/cfengine/core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cfengine/core/merges","archive_url":"https://api.github.com/repos/cfengine/core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cfengine/core/downloads","issues_url":"https://api.github.com/repos/cfengine/core/issues{/number}","pulls_url":"https://api.github.com/repos/cfengine/core/pulls{/number}","milestones_url":"https://api.github.com/repos/cfengine/core/milestones{/number}","notifications_url":"https://api.github.com/repos/cfengine/core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cfengine/core/labels{/name}","releases_url":"https://api.github.com/repos/cfengine/core/releases{/id}","deployments_url":"https://api.github.com/repos/cfengine/core/deployments","created_at":"2012-02-25T09:19:05Z","updated_at":"2018-02-15T20:06:44Z","pushed_at":"2018-02-16T16:34:29Z","git_url":"git://github.com/cfengine/core.git","ssh_url":"git@github.com:cfengine/core.git","clone_url":"https://github.com/cfengine/core.git","svn_url":"https://github.com/cfengine/core","homepage":"https://cfengine.com/community/","size":55626,"stargazers_count":281,"watchers_count":281,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":168,"mirror_url":null,"archived":false,"open_issues_count":14,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":168,"open_issues":14,"watchers":281,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cfengine/core/pulls/3022"},"html":{"href":"https://github.com/cfengine/core/pull/3022"},"issue":{"href":"https://api.github.com/repos/cfengine/core/issues/3022"},"comments":{"href":"https://api.github.com/repos/cfengine/core/issues/3022/comments"},"review_comments":{"href":"https://api.github.com/repos/cfengine/core/pulls/3022/comments"},"review_comment":{"href":"https://api.github.com/repos/cfengine/core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cfengine/core/pulls/3022/commits"},"statuses":{"href":"https://api.github.com/repos/cfengine/core/statuses/833604e1b5a24745e2cc1c6bfea0fe5ce446a157"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Lex-2008"}}