{"action":"created","comment":{"url":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/comments/208079257","pull_request_review_id":143818223,"id":208079257,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwODA3OTI1Nw==","diff_hunk":"@@ -0,0 +1,304 @@\n+package function\n+\n+import (\n+\t\"os\"\n+\t\"path/filepath\"\n+\t\"testing\"\n+\n+\t\"github.com/openfaas/openfaas-cloud/sdk\"\n+)\n+\n+func TestBuildURLWithoutPrettyURL_WithSlash(t *testing.T) {\n+\tos.Setenv(\"gateway_public_url\", \"http://localhost:8080\")\n+\tos.Setenv(\"gateway_pretty_url\", \"\")\n+\n+\tevent := &sdk.Event{\n+\t\tOwner:   \"alexellis\",\n+\t\tService: \"tester\",\n+\t}\n+\n+\tval := buildPublicStatusURL(\"success\", sdk.FunctionContext(event.Service), event)\n+\twant := \"http://localhost:8080/function/alexellis-tester\"\n+\n+\tif val != want {\n+\t\tt.Errorf(\"building PublicURL: want %s, got %s\", want, val)\n+\t\tt.Fail()\n+\t}\n+}\n+\n+func TestBuildURLWithoutPrettyURL_WithOutSlash(t *testing.T) {\n+\tos.Setenv(\"gateway_public_url\", \"http://localhost:8080\")\n+\tos.Setenv(\"gateway_pretty_url\", \"\")\n+\n+\tevent := &sdk.Event{\n+\t\tOwner:   \"alexellis\",\n+\t\tService: \"tester\",\n+\t}\n+\n+\tval := buildPublicStatusURL(\"success\", sdk.FunctionContext(event.Service), event)\n+\twant := \"http://localhost:8080/function/alexellis-tester\"\n+\n+\tif val != want {\n+\t\tt.Errorf(\"building PublicURL: want %s, got %s\", want, val)\n+\t\tt.Fail()\n+\t}\n+}\n+\n+func TestBuildURLWithPrettyURL(t *testing.T) {\n+\tos.Setenv(\"gateway_public_url\", \"http://localhost:8080\")\n+\tos.Setenv(\"gateway_pretty_url\", \"https://user.openfaas-cloud.com/function\")\n+\n+\tevent := &sdk.Event{\n+\t\tOwner:   \"alexellis\",\n+\t\tService: \"tester\",\n+\t}\n+\n+\tval := buildPublicStatusURL(\"success\", sdk.FunctionContext(event.Service), event)\n+\twant := \"https://alexellis.openfaas-cloud.com/tester\"\n+\n+\tif val != want {\n+\t\tt.Errorf(\"building PublicURL: want %s, got %s\", want, val)\n+\t\tt.Fail()\n+\t}\n+}\n+\n+func TestBuildURLWithUndefinedStatusGivesOriginalURL(t *testing.T) {\n+\n+\tevent := &sdk.Event{\n+\t\tOwner:   \"alexellis\",\n+\t\tService: \"tester\",\n+\t\tURL:     \"http://original-value.local\",\n+\t}\n+\n+\tval := buildPublicStatusURL(\"not-supported\", sdk.FunctionContext(event.Service), event)\n+\twant := event.URL\n+\n+\tif val != want {\n+\t\tt.Errorf(\"building PublicURL: want %s, got %s\", want, val)\n+\t\tt.Fail()\n+\t}\n+}\n+\n+func TestTokenValidator(t *testing.T) {\n+\ttestTokens := map[string]bool{\n+\t\t\"token with space\":                                false,\n+\t\t\"token$With@special=Char\":                         false,\n+\t\t\"v1.afbce39asdasd8be30123317cef123321ae991cf40f7\": true,\n+\t\t\"token=v1.afbce39asdasd8be30123\":                  false,\n+\t\t\" \": false}\n+\tfor token, result := range testTokens {\n+\t\tif sdk.ValidToken(token) != result {\n+\t\t\tt.Errorf(\"validating token %s: want %v, got %v\", token, result, !result)\n+\t\t}\n+\t}\n+}\n+\n+func TestTokenMarshal(t *testing.T) {\n+\ttestTokens := map[string]string{\n+\t\t\"token with space\":                                sdk.EmptyAuthToken,\n+\t\t\"token$With@special=Char\":                         sdk.EmptyAuthToken,\n+\t\t\"v1.afbce39asdasd8be30123317cef123321ae991cf40f7\": \"v1.afbce39asdasd8be30123317cef123321ae991cf40f7\",\n+\t\t\"token=v1.afbce39asdasd8be30123\":                  sdk.EmptyAuthToken,\n+\t\t\" \": sdk.EmptyAuthToken}\n+\tfor token, result := range testTokens {","path":"github-status/handler_test.go","position":null,"original_position":103,"commit_id":"af38c8ad6131f7e4d419a8b31bf2ec46854d28bf","original_commit_id":"c2a736e8fb2da2089a349731b31a14ab13fb6174","user":{"login":"s8sg","id":7374058,"node_id":"MDQ6VXNlcjczNzQwNTg=","avatar_url":"https://avatars2.githubusercontent.com/u/7374058?v=4","gravatar_id":"","url":"https://api.github.com/users/s8sg","html_url":"https://github.com/s8sg","followers_url":"https://api.github.com/users/s8sg/followers","following_url":"https://api.github.com/users/s8sg/following{/other_user}","gists_url":"https://api.github.com/users/s8sg/gists{/gist_id}","starred_url":"https://api.github.com/users/s8sg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s8sg/subscriptions","organizations_url":"https://api.github.com/users/s8sg/orgs","repos_url":"https://api.github.com/users/s8sg/repos","events_url":"https://api.github.com/users/s8sg/events{/privacy}","received_events_url":"https://api.github.com/users/s8sg/received_events","type":"User","site_admin":false},"body":"Updated in the new commit\r\nhttps://github.com/openfaas/openfaas-cloud/pull/83/files#diff-b3c2497a977c4257af245d1f1f78474bR82","created_at":"2018-08-07T02:07:21Z","updated_at":"2018-08-07T02:07:21Z","html_url":"https://github.com/openfaas/openfaas-cloud/pull/83#discussion_r208079257","pull_request_url":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/comments/208079257"},"html":{"href":"https://github.com/openfaas/openfaas-cloud/pull/83#discussion_r208079257"},"pull_request":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83"}},"in_reply_to_id":207858085},"pull_request":{"url":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83","id":198201944,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk4MjAxOTQ0","html_url":"https://github.com/openfaas/openfaas-cloud/pull/83","diff_url":"https://github.com/openfaas/openfaas-cloud/pull/83.diff","patch_url":"https://github.com/openfaas/openfaas-cloud/pull/83.patch","issue_url":"https://api.github.com/repos/openfaas/openfaas-cloud/issues/83","number":83,"state":"open","locked":false,"title":"Add git-status function and status api in sdk","user":{"login":"s8sg","id":7374058,"node_id":"MDQ6VXNlcjczNzQwNTg=","avatar_url":"https://avatars2.githubusercontent.com/u/7374058?v=4","gravatar_id":"","url":"https://api.github.com/users/s8sg","html_url":"https://github.com/s8sg","followers_url":"https://api.github.com/users/s8sg/followers","following_url":"https://api.github.com/users/s8sg/following{/other_user}","gists_url":"https://api.github.com/users/s8sg/gists{/gist_id}","starred_url":"https://api.github.com/users/s8sg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s8sg/subscriptions","organizations_url":"https://api.github.com/users/s8sg/orgs","repos_url":"https://api.github.com/users/s8sg/repos","events_url":"https://api.github.com/users/s8sg/events{/privacy}","received_events_url":"https://api.github.com/users/s8sg/received_events","type":"User","site_admin":false},"body":"This commit adds git-status function to handle commit status updates,\r\nalong with the below changes\r\n- sdk add status update api to abstract the call to git-status, append\r\nmultiple statuses and re-use auth token for consecutive call\r\n- updated sdk is vendor for other functions\r\n- moves status update vendor code from buildshiprun to git-status\r\n- function specific status and overall status for `stack-deploy` by separate contexts \r\n- pending status for each context\r\n\r\nSigned-off-by: Swarvanu Sengupta <swarvanusg@gmail.com>\r\n\r\nFix Issue:\r\n#41  #36\r\n\r\n**Overview:** \r\n- Separate context for each function deploy + context for stack deploy \r\n- Separate Openfaas Function For Handing Status Update `git-status`\r\n- Using SDK for status update `sdk/statuses.go`\r\n- Using reuse of token (from sdk on a single invocation)\r\n- Using grouping of Status and accept multiple status at `git-status`\r\n\r\n**How status gets modified:** \r\n\r\n##### Stack example:\r\n```\r\nprovider:\r\n  name: faas\r\n  gateway: http://127.0.0.1:8080\r\n\r\nfunctions:\r\n  regex_go:\r\n    lang: go\r\n    handler: ./regex_go\r\n    image: s8sg/regex_go\r\n\r\n  regex_py:\r\n    lang: python\r\n    handler: ./regex_py\r\n    image: s8sg/regex_py\r\n``` \r\n\r\n<img width=\"961\" alt=\"screen shot 2018-05-02 at 6 03 37 pm\" src=\"https://user-images.githubusercontent.com/7374058/39612115-7f52a6a2-4f97-11e8-87ab-268b72d82be5.png\">\r\n\r\n<img width=\"1027\" alt=\"screen shot 2018-05-04 at 12 33 21 pm\" src=\"https://user-images.githubusercontent.com/7374058/39612121-9754baa6-4f97-11e8-90c4-6c2799d4a89d.png\">\r\n\r\n<img width=\"956\" alt=\"screen shot 2018-05-04 at 12 33 28 pm\" src=\"https://user-images.githubusercontent.com/7374058/39612125-a2818332-4f97-11e8-9b66-4059e261d35f.png\">\r\n\r\n<img width=\"979\" alt=\"screen shot 2018-05-04 at 12 33 36 pm\" src=\"https://user-images.githubusercontent.com/7374058/39612129-abd9165c-4f97-11e8-94a0-be4ecc9e30e4.png\">\r\n\r\n\r\n### Links: \r\n* passed\r\n\r\n| context |     url |\r\n| --- | --- |\r\n| stack-deploy | gateway_url: https://7d86c827.ngrok.io/ui/   |\r\n|                        |    pretty url: https://s8sg.7d86c827.ngrok.io     |                    \r\n| regex_go              | gateway url : https://7d86c827.ngrok.io/function/s8sg-regex_go / |\r\n|                        |    pretty url: https://s8sg.7d86c827.ngrok.io/regex_go |\r\n| regex_py              | gateway url : https://7d86c827.ngrok.io/function/s8sg-regex_py / |\r\n|                        |    pretty url: https://s8sg.7d86c827.ngrok.io/regex_py |\r\n\r\n* failed/pending\r\n\r\n| context |     url |\r\n| --- | --- |\r\n| stack-deploy | git repo   |                    \r\n| regex_go              | git repo |\r\n| regex_py              | git repo |\r\n\r\n\r\n### Testing\r\n\r\n#### Success\r\nMake some nonbreaking change say `README.md` and it should have the commit progress as described on the PR\r\n> The stack deploy, regex_go and regex_py should be successful   \r\n> overall status must be a success \r\n\r\n#### Failure tar creation\r\nchange the handler name in `stack.yml`\r\n```yaml\r\n  regex_py:\r\n    lang: python\r\n    handler: ./regex_invalid\r\n    image: s8sg/regex_py\r\n```\r\n> The stack deploy fails \r\n> overall status will be a failure\r\n\r\nFix the `stack.yml`\r\n\r\n#### Failure one function\r\nchange the go code `regex_go/handler.go`, to make it fail deliberately    \r\nremove the import \r\n```go\r\n\t\"encoding/json\"\r\n```\r\n> In this case the stack deploy will be successful \r\n> regex_py will be successful\r\n> regex_go will be failed\r\n> overall status will be a failure\r\n\r\n#### Nothing should be stuck on Pending\r\nNone of the statuses should get stuck on pending, they should either fail or pass\r\n\r\nI think this is enough to test the functionalities\r\n\r\nYou can check the `sdk` validation \r\n\r\n#### Check if the public key is used from provided name\r\nCreate a new secret\r\n```bash\r\ndocker secret create new-private-key <your_private_key_file>.pem\r\n```\r\nand change the secret name at `github.yml`\r\n```\r\nprivate_key: new-private-key\r\n```\r\nRedeploy and Commit Non-Breaking Change\r\n\r\n#### Check cases when status update fails\r\nCreate a new secret\r\n```bash\r\necho \"invalid key\" > invalid\r\ndocker secret rm new-private-key\r\ndocker secret create new-private-key invalid\r\n```\r\nRedeploy and Commit Non-Breaking Change\r\nIt will create the error in the buildshiprun or in other function as:\r\n```bash\r\ninvalid auth token received, token : ( <error string> )\r\n```\r\n\r\n> Github-status return the auth token, as it put it in stdout, the `combine_output` must be disabled to reuse the token\r\n\r\n#### Reuse authtoken for multiple calls from same function\r\nfrom `docker service logs github-status` find `reusing provided auth token`\r\n```bash\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | {\"token\":\"v1.12334db41169034c40a4a8c21c4740a02e4d4558\"}\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:38 Forking fprocess.\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:38 Query  \r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:38 Path  /function/github-status\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:39 stderr: 2018/08/06 05:39:39 auth token is created\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:39 Status: success, Context: regex_py, Service: s8sg-regex_go, GitHub AppID: 138863, Repo: regex_go, Owner: s8sg\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:39 Duration: 1.388215 seconds\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | {\"token\":\"v1.2dc649211b6757b2cf7c2591b0b4201e91fd538c\"}\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:39 Forking fprocess.\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:39 Query  \r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:39 Path  /function/github-status\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | {\"token\":\"v1.12334db41169034c40a4a8c21c4740a02e4d4558\"}\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:40 stderr: 2018/08/06 05:39:39 reusing provided auth token\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:39 Status: success, Context: stack-deploy, Service: s8sg-regex_go, GitHub AppID: 138863, Repo: regex_go, Owner: s8sg\r\ngithub-status.1.r0n1ggmzx15v@linuxkit-025000000001    | 2018/08/06 05:39:40 Duration: 1.000299 seconds\r\n``` \r\n\r\nI have:\r\n\r\n- [x] updated the documentation if required\r\n- [x] read the [CONTRIBUTION](https://github.com/openfaas/faas/blob/master/CONTRIBUTING.md) guide\r\n- [x] signed-off my commits with `git commit -s`\r\n- [x] added unit tests\r\n- [x] added test guidelines","created_at":"2018-06-29T02:49:48Z","updated_at":"2018-08-07T02:07:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a7988e864c5cee536122e3eef79b94cb420d6f69","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83/commits","review_comments_url":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83/comments","review_comment_url":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openfaas/openfaas-cloud/issues/83/comments","statuses_url":"https://api.github.com/repos/openfaas/openfaas-cloud/statuses/af38c8ad6131f7e4d419a8b31bf2ec46854d28bf","head":{"label":"s8sg:issue-36-tested","ref":"issue-36-tested","sha":"af38c8ad6131f7e4d419a8b31bf2ec46854d28bf","user":{"login":"s8sg","id":7374058,"node_id":"MDQ6VXNlcjczNzQwNTg=","avatar_url":"https://avatars2.githubusercontent.com/u/7374058?v=4","gravatar_id":"","url":"https://api.github.com/users/s8sg","html_url":"https://github.com/s8sg","followers_url":"https://api.github.com/users/s8sg/followers","following_url":"https://api.github.com/users/s8sg/following{/other_user}","gists_url":"https://api.github.com/users/s8sg/gists{/gist_id}","starred_url":"https://api.github.com/users/s8sg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s8sg/subscriptions","organizations_url":"https://api.github.com/users/s8sg/orgs","repos_url":"https://api.github.com/users/s8sg/repos","events_url":"https://api.github.com/users/s8sg/events{/privacy}","received_events_url":"https://api.github.com/users/s8sg/received_events","type":"User","site_admin":false},"repo":{"id":128858977,"node_id":"MDEwOlJlcG9zaXRvcnkxMjg4NTg5Nzc=","name":"openfaas-cloud","full_name":"s8sg/openfaas-cloud","owner":{"login":"s8sg","id":7374058,"node_id":"MDQ6VXNlcjczNzQwNTg=","avatar_url":"https://avatars2.githubusercontent.com/u/7374058?v=4","gravatar_id":"","url":"https://api.github.com/users/s8sg","html_url":"https://github.com/s8sg","followers_url":"https://api.github.com/users/s8sg/followers","following_url":"https://api.github.com/users/s8sg/following{/other_user}","gists_url":"https://api.github.com/users/s8sg/gists{/gist_id}","starred_url":"https://api.github.com/users/s8sg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s8sg/subscriptions","organizations_url":"https://api.github.com/users/s8sg/orgs","repos_url":"https://api.github.com/users/s8sg/repos","events_url":"https://api.github.com/users/s8sg/events{/privacy}","received_events_url":"https://api.github.com/users/s8sg/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/s8sg/openfaas-cloud","description":"OpenFaaS Cloud - FaaS in a box with CI/CD for functions","fork":true,"url":"https://api.github.com/repos/s8sg/openfaas-cloud","forks_url":"https://api.github.com/repos/s8sg/openfaas-cloud/forks","keys_url":"https://api.github.com/repos/s8sg/openfaas-cloud/keys{/key_id}","collaborators_url":"https://api.github.com/repos/s8sg/openfaas-cloud/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/s8sg/openfaas-cloud/teams","hooks_url":"https://api.github.com/repos/s8sg/openfaas-cloud/hooks","issue_events_url":"https://api.github.com/repos/s8sg/openfaas-cloud/issues/events{/number}","events_url":"https://api.github.com/repos/s8sg/openfaas-cloud/events","assignees_url":"https://api.github.com/repos/s8sg/openfaas-cloud/assignees{/user}","branches_url":"https://api.github.com/repos/s8sg/openfaas-cloud/branches{/branch}","tags_url":"https://api.github.com/repos/s8sg/openfaas-cloud/tags","blobs_url":"https://api.github.com/repos/s8sg/openfaas-cloud/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/s8sg/openfaas-cloud/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/s8sg/openfaas-cloud/git/refs{/sha}","trees_url":"https://api.github.com/repos/s8sg/openfaas-cloud/git/trees{/sha}","statuses_url":"https://api.github.com/repos/s8sg/openfaas-cloud/statuses/{sha}","languages_url":"https://api.github.com/repos/s8sg/openfaas-cloud/languages","stargazers_url":"https://api.github.com/repos/s8sg/openfaas-cloud/stargazers","contributors_url":"https://api.github.com/repos/s8sg/openfaas-cloud/contributors","subscribers_url":"https://api.github.com/repos/s8sg/openfaas-cloud/subscribers","subscription_url":"https://api.github.com/repos/s8sg/openfaas-cloud/subscription","commits_url":"https://api.github.com/repos/s8sg/openfaas-cloud/commits{/sha}","git_commits_url":"https://api.github.com/repos/s8sg/openfaas-cloud/git/commits{/sha}","comments_url":"https://api.github.com/repos/s8sg/openfaas-cloud/comments{/number}","issue_comment_url":"https://api.github.com/repos/s8sg/openfaas-cloud/issues/comments{/number}","contents_url":"https://api.github.com/repos/s8sg/openfaas-cloud/contents/{+path}","compare_url":"https://api.github.com/repos/s8sg/openfaas-cloud/compare/{base}...{head}","merges_url":"https://api.github.com/repos/s8sg/openfaas-cloud/merges","archive_url":"https://api.github.com/repos/s8sg/openfaas-cloud/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/s8sg/openfaas-cloud/downloads","issues_url":"https://api.github.com/repos/s8sg/openfaas-cloud/issues{/number}","pulls_url":"https://api.github.com/repos/s8sg/openfaas-cloud/pulls{/number}","milestones_url":"https://api.github.com/repos/s8sg/openfaas-cloud/milestones{/number}","notifications_url":"https://api.github.com/repos/s8sg/openfaas-cloud/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/s8sg/openfaas-cloud/labels{/name}","releases_url":"https://api.github.com/repos/s8sg/openfaas-cloud/releases{/id}","deployments_url":"https://api.github.com/repos/s8sg/openfaas-cloud/deployments","created_at":"2018-04-10T02:04:04Z","updated_at":"2018-08-04T03:33:00Z","pushed_at":"2018-08-07T02:04:12Z","git_url":"git://github.com/s8sg/openfaas-cloud.git","ssh_url":"git@github.com:s8sg/openfaas-cloud.git","clone_url":"https://github.com/s8sg/openfaas-cloud.git","svn_url":"https://github.com/s8sg/openfaas-cloud","homepage":"https://www.openfaas.com","size":11663,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"openfaas:master","ref":"master","sha":"1f30c65a9e64c06e2c91332065aa209fa3ebe7c5","user":{"login":"openfaas","id":27013154,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3MDEzMTU0","avatar_url":"https://avatars3.githubusercontent.com/u/27013154?v=4","gravatar_id":"","url":"https://api.github.com/users/openfaas","html_url":"https://github.com/openfaas","followers_url":"https://api.github.com/users/openfaas/followers","following_url":"https://api.github.com/users/openfaas/following{/other_user}","gists_url":"https://api.github.com/users/openfaas/gists{/gist_id}","starred_url":"https://api.github.com/users/openfaas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openfaas/subscriptions","organizations_url":"https://api.github.com/users/openfaas/orgs","repos_url":"https://api.github.com/users/openfaas/repos","events_url":"https://api.github.com/users/openfaas/events{/privacy}","received_events_url":"https://api.github.com/users/openfaas/received_events","type":"Organization","site_admin":false},"repo":{"id":109512938,"node_id":"MDEwOlJlcG9zaXRvcnkxMDk1MTI5Mzg=","name":"openfaas-cloud","full_name":"openfaas/openfaas-cloud","owner":{"login":"openfaas","id":27013154,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3MDEzMTU0","avatar_url":"https://avatars3.githubusercontent.com/u/27013154?v=4","gravatar_id":"","url":"https://api.github.com/users/openfaas","html_url":"https://github.com/openfaas","followers_url":"https://api.github.com/users/openfaas/followers","following_url":"https://api.github.com/users/openfaas/following{/other_user}","gists_url":"https://api.github.com/users/openfaas/gists{/gist_id}","starred_url":"https://api.github.com/users/openfaas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openfaas/subscriptions","organizations_url":"https://api.github.com/users/openfaas/orgs","repos_url":"https://api.github.com/users/openfaas/repos","events_url":"https://api.github.com/users/openfaas/events{/privacy}","received_events_url":"https://api.github.com/users/openfaas/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openfaas/openfaas-cloud","description":"OpenFaaS Cloud - GitOps for your functions with native GitHub integrations","fork":false,"url":"https://api.github.com/repos/openfaas/openfaas-cloud","forks_url":"https://api.github.com/repos/openfaas/openfaas-cloud/forks","keys_url":"https://api.github.com/repos/openfaas/openfaas-cloud/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openfaas/openfaas-cloud/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openfaas/openfaas-cloud/teams","hooks_url":"https://api.github.com/repos/openfaas/openfaas-cloud/hooks","issue_events_url":"https://api.github.com/repos/openfaas/openfaas-cloud/issues/events{/number}","events_url":"https://api.github.com/repos/openfaas/openfaas-cloud/events","assignees_url":"https://api.github.com/repos/openfaas/openfaas-cloud/assignees{/user}","branches_url":"https://api.github.com/repos/openfaas/openfaas-cloud/branches{/branch}","tags_url":"https://api.github.com/repos/openfaas/openfaas-cloud/tags","blobs_url":"https://api.github.com/repos/openfaas/openfaas-cloud/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openfaas/openfaas-cloud/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openfaas/openfaas-cloud/git/refs{/sha}","trees_url":"https://api.github.com/repos/openfaas/openfaas-cloud/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openfaas/openfaas-cloud/statuses/{sha}","languages_url":"https://api.github.com/repos/openfaas/openfaas-cloud/languages","stargazers_url":"https://api.github.com/repos/openfaas/openfaas-cloud/stargazers","contributors_url":"https://api.github.com/repos/openfaas/openfaas-cloud/contributors","subscribers_url":"https://api.github.com/repos/openfaas/openfaas-cloud/subscribers","subscription_url":"https://api.github.com/repos/openfaas/openfaas-cloud/subscription","commits_url":"https://api.github.com/repos/openfaas/openfaas-cloud/commits{/sha}","git_commits_url":"https://api.github.com/repos/openfaas/openfaas-cloud/git/commits{/sha}","comments_url":"https://api.github.com/repos/openfaas/openfaas-cloud/comments{/number}","issue_comment_url":"https://api.github.com/repos/openfaas/openfaas-cloud/issues/comments{/number}","contents_url":"https://api.github.com/repos/openfaas/openfaas-cloud/contents/{+path}","compare_url":"https://api.github.com/repos/openfaas/openfaas-cloud/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openfaas/openfaas-cloud/merges","archive_url":"https://api.github.com/repos/openfaas/openfaas-cloud/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openfaas/openfaas-cloud/downloads","issues_url":"https://api.github.com/repos/openfaas/openfaas-cloud/issues{/number}","pulls_url":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls{/number}","milestones_url":"https://api.github.com/repos/openfaas/openfaas-cloud/milestones{/number}","notifications_url":"https://api.github.com/repos/openfaas/openfaas-cloud/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openfaas/openfaas-cloud/labels{/name}","releases_url":"https://api.github.com/repos/openfaas/openfaas-cloud/releases{/id}","deployments_url":"https://api.github.com/repos/openfaas/openfaas-cloud/deployments","created_at":"2017-11-04T16:54:15Z","updated_at":"2018-08-06T17:39:56Z","pushed_at":"2018-08-07T02:04:14Z","git_url":"git://github.com/openfaas/openfaas-cloud.git","ssh_url":"git@github.com:openfaas/openfaas-cloud.git","clone_url":"https://github.com/openfaas/openfaas-cloud.git","svn_url":"https://github.com/openfaas/openfaas-cloud","homepage":"https://blog.alexellis.io/introducing-openfaas-cloud/","size":11590,"stargazers_count":88,"watchers_count":88,"language":"Go","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":20,"mirror_url":null,"archived":false,"open_issues_count":24,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":20,"open_issues":24,"watchers":88,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83"},"html":{"href":"https://github.com/openfaas/openfaas-cloud/pull/83"},"issue":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/issues/83"},"comments":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/issues/83/comments"},"review_comments":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83/comments"},"review_comment":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/pulls/83/commits"},"statuses":{"href":"https://api.github.com/repos/openfaas/openfaas-cloud/statuses/af38c8ad6131f7e4d419a8b31bf2ec46854d28bf"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"s8sg"}}