{"action":"created","comment":{"url":"https://api.github.com/repos/duck8823/duci/pulls/comments/244629091","pull_request_review_id":188548095,"id":244629091,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NDYyOTA5MQ==","diff_hunk":"@@ -0,0 +1,266 @@\n+package runner_test\n+\n+import (\n+\t\"github.com/duck8823/duci/domain/model/docker\"\n+\t\"github.com/duck8823/duci/domain/model/job\"\n+\t\"github.com/duck8823/duci/domain/model/runner\"\n+\t\"github.com/google/go-cmp/cmp\"\n+\t\"github.com/labstack/gommon/random\"\n+\t\"os\"\n+\t\"path\"\n+\t\"testing\"\n+)\n+\n+func TestCreateTarball(t *testing.T) {\n+\tt.Run(\"with correct directory\", func(t *testing.T) {\n+\t\t// given\n+\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\n+\t\tif err := os.MkdirAll(tmpDir, 0700); err != nil {\n+\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t}\n+\t\tdefer os.RemoveAll(tmpDir)\n+\n+\t\tif _, err := os.Create(path.Join(tmpDir, \"a\")); err != nil {\n+\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t}\n+\n+\t\t// and\n+\t\twant := path.Join(tmpDir, \"duci.tar\")\n+\n+\t\t// when\n+\t\tgot, err := runner.CreateTarball(job.WorkDir(tmpDir))\n+\n+\t\t// then\n+\t\tif err != nil {\n+\t\t\tt.Fatalf(\"error must be nil, but got %+v\", err)\n+\t\t}\n+\t\tdefer got.Close()\n+\n+\t\t// and\n+\t\tif got.Name() != want {\n+\t\t\tt.Errorf(\"file name: want %s, but got %s\", want, got.Name())\n+\t\t}\n+\t})\n+\n+\tt.Run(\"with invalid directory\", func(t *testing.T) {\n+\t\t// given\n+\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\n+\t\t// when\n+\t\tgot, err := runner.CreateTarball(job.WorkDir(tmpDir))\n+\n+\t\t// then\n+\t\tif err == nil {\n+\t\t\tt.Error(\"error must not be nil\")\n+\t\t}\n+\n+\t\t// and\n+\t\tif got != nil {\n+\t\t\tt.Errorf(\"must be nil, but got %+v\", got)\n+\n+\t\t\tgot.Close()\n+\t\t}\n+\t})\n+}\n+\n+func TestDockerfilePath(t *testing.T) {\n+\t// where\n+\tfor _, tt := range []struct {\n+\t\tname  string\n+\t\tgiven func(t *testing.T) (workDir job.WorkDir, cleanup func())\n+\t\twant  docker.Dockerfile\n+\t}{\n+\t\t{\n+\t\t\tname: \"when .duci directory not found\",\n+\t\t\tgiven: func(t *testing.T) (workDir job.WorkDir, cleanup func()) {\n+\t\t\t\tt.Helper()\n+\n+\t\t\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\t\t\t\tif err := os.MkdirAll(tmpDir, 0700); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\n+\t\t\t\treturn job.WorkDir(tmpDir), func() {\n+\t\t\t\t\t_ = os.RemoveAll(tmpDir)\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twant: \"./Dockerfile\",\n+\t\t},\n+\t\t{\n+\t\t\tname: \"when .duci directory found but .duci/Dockerfile not found\",\n+\t\t\tgiven: func(t *testing.T) (workDir job.WorkDir, cleanup func()) {\n+\t\t\t\tt.Helper()\n+\n+\t\t\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\t\t\t\tif err := os.MkdirAll(path.Join(tmpDir, \".duci\"), 0700); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\n+\t\t\t\treturn job.WorkDir(tmpDir), func() {\n+\t\t\t\t\t_ = os.RemoveAll(tmpDir)\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twant: \"./Dockerfile\",\n+\t\t},\n+\t\t{\n+\t\t\tname: \"when .duci/Dockerfile found\",\n+\t\t\tgiven: func(t *testing.T) (workDir job.WorkDir, cleanup func()) {\n+\t\t\t\tt.Helper()\n+\n+\t\t\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\t\t\t\tif err := os.MkdirAll(path.Join(tmpDir, \".duci\"), 0700); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\t\t\t\tif _, err := os.Create(path.Join(tmpDir, \".duci\", \"Dockerfile\")); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\n+\t\t\t\treturn job.WorkDir(tmpDir), func() {\n+\t\t\t\t\t_ = os.RemoveAll(tmpDir)\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twant: \".duci/Dockerfile\",\n+\t\t},\n+\t} {\n+\t\tt.Run(tt.name, func(t *testing.T) {\n+\t\t\t// given\n+\t\t\tin, cleanup := tt.given(t)\n+\n+\t\t\t// when\n+\t\t\tgot := runner.DockerfilePath(in)\n+\n+\t\t\t// then\n+\t\t\tif got != tt.want {\n+\t\t\t\tt.Errorf(\"must be equal, but %+v\", cmp.Diff(got, tt.want))\n+\t\t\t}\n+\n+\t\t\t// cleanup\n+\t\t\tcleanup()\n+\t\t})\n+\t}\n+}\n+\n+func TestRuntimeOptions(t *testing.T) {\n+\t// where\n+\tfor _, tt := range []struct {\n+\t\tname    string\n+\t\tgiven   func(t *testing.T) (workDir job.WorkDir, cleanup func())\n+\t\twant    docker.RuntimeOptions\n+\t\twantErr bool\n+\t}{\n+\t\t{\n+\t\t\tname: \"when .duci/config.yml not found\",\n+\t\t\tgiven: func(t *testing.T) (workDir job.WorkDir, cleanup func()) {\n+\t\t\t\tt.Helper()\n+\n+\t\t\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\t\t\t\tif err := os.MkdirAll(tmpDir, 0700); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\n+\t\t\t\treturn job.WorkDir(tmpDir), func() {\n+\t\t\t\t\t_ = os.RemoveAll(tmpDir)\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twant:    docker.RuntimeOptions{},\n+\t\t\twantErr: false,\n+\t\t},\n+\t\t{\n+\t\t\tname: \"when .duci/config.yml found\",\n+\t\t\tgiven: func(t *testing.T) (workDir job.WorkDir, cleanup func()) {\n+\t\t\t\tt.Helper()\n+\n+\t\t\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\t\t\t\tif err := os.MkdirAll(path.Join(tmpDir, \".duci\"), 0700); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\n+\t\t\t\tfile, err := os.OpenFile(path.Join(tmpDir, \".duci\", \"config.yml\"), os.O_RDWR|os.O_CREATE, 0400)\n+\t\t\t\tif err != nil {\n+\t\t\t\t\tt.Fatalf(\"%+v\", err)\n+\t\t\t\t}\n+\t\t\t\tdefer file.Close()\n+\n+\t\t\t\tfile.WriteString(`---\n+volumes:\n+  - hoge:fuga\n+`)\n+\n+\t\t\t\treturn job.WorkDir(tmpDir), func() {\n+\t\t\t\t\t_ = os.RemoveAll(tmpDir)\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twant: docker.RuntimeOptions{\n+\t\t\t\tVolumes: docker.Volumes{\"hoge:fuga\"},\n+\t\t\t},\n+\t\t\twantErr: false,\n+\t\t},\n+\t\t{\n+\t\t\tname: \"when .duci/config.yml is directory\",\n+\t\t\tgiven: func(t *testing.T) (workDir job.WorkDir, cleanup func()) {\n+\t\t\t\tt.Helper()\n+\n+\t\t\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\t\t\t\tif err := os.MkdirAll(path.Join(tmpDir, \".duci\", \"config.yml\"), 0700); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\n+\t\t\t\treturn job.WorkDir(tmpDir), func() {\n+\t\t\t\t\t_ = os.RemoveAll(tmpDir)\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twant:    docker.RuntimeOptions{},\n+\t\t\twantErr: true,\n+\t\t},\n+\t\t{\n+\t\t\tname: \"when .duci/config.yml is invalid format\",\n+\t\t\tgiven: func(t *testing.T) (workDir job.WorkDir, cleanup func()) {\n+\t\t\t\tt.Helper()\n+\n+\t\t\t\ttmpDir := path.Join(os.TempDir(), random.String(16, random.Alphanumeric))\n+\t\t\t\tif err := os.MkdirAll(path.Join(tmpDir, \".duci\"), 0700); err != nil {\n+\t\t\t\t\tt.Fatalf(\"error occur: %+v\", err)\n+\t\t\t\t}\n+\n+\t\t\t\tfile, err := os.OpenFile(path.Join(tmpDir, \".duci\", \"config.yml\"), os.O_RDWR|os.O_CREATE, 0400)\n+\t\t\t\tif err != nil {\n+\t\t\t\t\tt.Fatalf(\"%+v\", err)\n+\t\t\t\t}\n+\t\t\t\tdefer file.Close()\n+\n+\t\t\t\tfile.WriteString(\"invalid format\")","path":"domain/model/runner/helper_test.go","position":232,"original_position":232,"commit_id":"cd496068145a0a7d6fdd46d53e82ad4cb045f54f","original_commit_id":"cd496068145a0a7d6fdd46d53e82ad4cb045f54f","user":{"login":"golangcibot","id":42910462,"node_id":"MDQ6VXNlcjQyOTEwNDYy","avatar_url":"https://avatars1.githubusercontent.com/u/42910462?v=4","gravatar_id":"","url":"https://api.github.com/users/golangcibot","html_url":"https://github.com/golangcibot","followers_url":"https://api.github.com/users/golangcibot/followers","following_url":"https://api.github.com/users/golangcibot/following{/other_user}","gists_url":"https://api.github.com/users/golangcibot/gists{/gist_id}","starred_url":"https://api.github.com/users/golangcibot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/golangcibot/subscriptions","organizations_url":"https://api.github.com/users/golangcibot/orgs","repos_url":"https://api.github.com/users/golangcibot/repos","events_url":"https://api.github.com/users/golangcibot/events{/privacy}","received_events_url":"https://api.github.com/users/golangcibot/received_events","type":"User","site_admin":false},"body":"Error return value of `file.WriteString` is not checked (from `errcheck`)","created_at":"2019-01-01T06:38:17Z","updated_at":"2019-01-01T06:38:17Z","html_url":"https://github.com/duck8823/duci/pull/148#discussion_r244629091","pull_request_url":"https://api.github.com/repos/duck8823/duci/pulls/148","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/duck8823/duci/pulls/comments/244629091"},"html":{"href":"https://github.com/duck8823/duci/pull/148#discussion_r244629091"},"pull_request":{"href":"https://api.github.com/repos/duck8823/duci/pulls/148"}}},"pull_request":{"url":"https://api.github.com/repos/duck8823/duci/pulls/148","id":234289371,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM0Mjg5Mzcx","html_url":"https://github.com/duck8823/duci/pull/148","diff_url":"https://github.com/duck8823/duci/pull/148.diff","patch_url":"https://github.com/duck8823/duci/pull/148.patch","issue_url":"https://api.github.com/repos/duck8823/duci/issues/148","number":148,"state":"open","locked":false,"title":"[WIP] RE: ARCHITECTURE","user":{"login":"duck8823","id":15160519,"node_id":"MDQ6VXNlcjE1MTYwNTE5","avatar_url":"https://avatars2.githubusercontent.com/u/15160519?v=4","gravatar_id":"","url":"https://api.github.com/users/duck8823","html_url":"https://github.com/duck8823","followers_url":"https://api.github.com/users/duck8823/followers","following_url":"https://api.github.com/users/duck8823/following{/other_user}","gists_url":"https://api.github.com/users/duck8823/gists{/gist_id}","starred_url":"https://api.github.com/users/duck8823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duck8823/subscriptions","organizations_url":"https://api.github.com/users/duck8823/orgs","repos_url":"https://api.github.com/users/duck8823/repos","events_url":"https://api.github.com/users/duck8823/events{/privacy}","received_events_url":"https://api.github.com/users/duck8823/received_events","type":"User","site_admin":false},"body":"fix #145 ","created_at":"2018-11-28T14:08:16Z","updated_at":"2019-01-01T06:38:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f52489aefe4dd06b3c16918133b2e3143452fd4","assignee":{"login":"duck8823","id":15160519,"node_id":"MDQ6VXNlcjE1MTYwNTE5","avatar_url":"https://avatars2.githubusercontent.com/u/15160519?v=4","gravatar_id":"","url":"https://api.github.com/users/duck8823","html_url":"https://github.com/duck8823","followers_url":"https://api.github.com/users/duck8823/followers","following_url":"https://api.github.com/users/duck8823/following{/other_user}","gists_url":"https://api.github.com/users/duck8823/gists{/gist_id}","starred_url":"https://api.github.com/users/duck8823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duck8823/subscriptions","organizations_url":"https://api.github.com/users/duck8823/orgs","repos_url":"https://api.github.com/users/duck8823/repos","events_url":"https://api.github.com/users/duck8823/events{/privacy}","received_events_url":"https://api.github.com/users/duck8823/received_events","type":"User","site_admin":false},"assignees":[{"login":"duck8823","id":15160519,"node_id":"MDQ6VXNlcjE1MTYwNTE5","avatar_url":"https://avatars2.githubusercontent.com/u/15160519?v=4","gravatar_id":"","url":"https://api.github.com/users/duck8823","html_url":"https://github.com/duck8823","followers_url":"https://api.github.com/users/duck8823/followers","following_url":"https://api.github.com/users/duck8823/following{/other_user}","gists_url":"https://api.github.com/users/duck8823/gists{/gist_id}","starred_url":"https://api.github.com/users/duck8823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duck8823/subscriptions","organizations_url":"https://api.github.com/users/duck8823/orgs","repos_url":"https://api.github.com/users/duck8823/repos","events_url":"https://api.github.com/users/duck8823/events{/privacy}","received_events_url":"https://api.github.com/users/duck8823/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":886097753,"node_id":"MDU6TGFiZWw4ODYwOTc3NTM=","url":"https://api.github.com/repos/duck8823/duci/labels/enhancement","name":"enhancement","color":"a2eeef","default":true},{"id":986350154,"node_id":"MDU6TGFiZWw5ODYzNTAxNTQ=","url":"https://api.github.com/repos/duck8823/duci/labels/maintenance","name":"maintenance","color":"74d850","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/duck8823/duci/pulls/148/commits","review_comments_url":"https://api.github.com/repos/duck8823/duci/pulls/148/comments","review_comment_url":"https://api.github.com/repos/duck8823/duci/pulls/comments{/number}","comments_url":"https://api.github.com/repos/duck8823/duci/issues/148/comments","statuses_url":"https://api.github.com/repos/duck8823/duci/statuses/cd496068145a0a7d6fdd46d53e82ad4cb045f54f","head":{"label":"duck8823:rearchitecture","ref":"rearchitecture","sha":"cd496068145a0a7d6fdd46d53e82ad4cb045f54f","user":{"login":"duck8823","id":15160519,"node_id":"MDQ6VXNlcjE1MTYwNTE5","avatar_url":"https://avatars2.githubusercontent.com/u/15160519?v=4","gravatar_id":"","url":"https://api.github.com/users/duck8823","html_url":"https://github.com/duck8823","followers_url":"https://api.github.com/users/duck8823/followers","following_url":"https://api.github.com/users/duck8823/following{/other_user}","gists_url":"https://api.github.com/users/duck8823/gists{/gist_id}","starred_url":"https://api.github.com/users/duck8823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duck8823/subscriptions","organizations_url":"https://api.github.com/users/duck8823/orgs","repos_url":"https://api.github.com/users/duck8823/repos","events_url":"https://api.github.com/users/duck8823/events{/privacy}","received_events_url":"https://api.github.com/users/duck8823/received_events","type":"User","site_admin":false},"repo":{"id":127587125,"node_id":"MDEwOlJlcG9zaXRvcnkxMjc1ODcxMjU=","name":"duci","full_name":"duck8823/duci","private":false,"owner":{"login":"duck8823","id":15160519,"node_id":"MDQ6VXNlcjE1MTYwNTE5","avatar_url":"https://avatars2.githubusercontent.com/u/15160519?v=4","gravatar_id":"","url":"https://api.github.com/users/duck8823","html_url":"https://github.com/duck8823","followers_url":"https://api.github.com/users/duck8823/followers","following_url":"https://api.github.com/users/duck8823/following{/other_user}","gists_url":"https://api.github.com/users/duck8823/gists{/gist_id}","starred_url":"https://api.github.com/users/duck8823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duck8823/subscriptions","organizations_url":"https://api.github.com/users/duck8823/orgs","repos_url":"https://api.github.com/users/duck8823/repos","events_url":"https://api.github.com/users/duck8823/events{/privacy}","received_events_url":"https://api.github.com/users/duck8823/received_events","type":"User","site_admin":false},"html_url":"https://github.com/duck8823/duci","description":"The small ci server ","fork":false,"url":"https://api.github.com/repos/duck8823/duci","forks_url":"https://api.github.com/repos/duck8823/duci/forks","keys_url":"https://api.github.com/repos/duck8823/duci/keys{/key_id}","collaborators_url":"https://api.github.com/repos/duck8823/duci/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/duck8823/duci/teams","hooks_url":"https://api.github.com/repos/duck8823/duci/hooks","issue_events_url":"https://api.github.com/repos/duck8823/duci/issues/events{/number}","events_url":"https://api.github.com/repos/duck8823/duci/events","assignees_url":"https://api.github.com/repos/duck8823/duci/assignees{/user}","branches_url":"https://api.github.com/repos/duck8823/duci/branches{/branch}","tags_url":"https://api.github.com/repos/duck8823/duci/tags","blobs_url":"https://api.github.com/repos/duck8823/duci/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/duck8823/duci/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/duck8823/duci/git/refs{/sha}","trees_url":"https://api.github.com/repos/duck8823/duci/git/trees{/sha}","statuses_url":"https://api.github.com/repos/duck8823/duci/statuses/{sha}","languages_url":"https://api.github.com/repos/duck8823/duci/languages","stargazers_url":"https://api.github.com/repos/duck8823/duci/stargazers","contributors_url":"https://api.github.com/repos/duck8823/duci/contributors","subscribers_url":"https://api.github.com/repos/duck8823/duci/subscribers","subscription_url":"https://api.github.com/repos/duck8823/duci/subscription","commits_url":"https://api.github.com/repos/duck8823/duci/commits{/sha}","git_commits_url":"https://api.github.com/repos/duck8823/duci/git/commits{/sha}","comments_url":"https://api.github.com/repos/duck8823/duci/comments{/number}","issue_comment_url":"https://api.github.com/repos/duck8823/duci/issues/comments{/number}","contents_url":"https://api.github.com/repos/duck8823/duci/contents/{+path}","compare_url":"https://api.github.com/repos/duck8823/duci/compare/{base}...{head}","merges_url":"https://api.github.com/repos/duck8823/duci/merges","archive_url":"https://api.github.com/repos/duck8823/duci/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/duck8823/duci/downloads","issues_url":"https://api.github.com/repos/duck8823/duci/issues{/number}","pulls_url":"https://api.github.com/repos/duck8823/duci/pulls{/number}","milestones_url":"https://api.github.com/repos/duck8823/duci/milestones{/number}","notifications_url":"https://api.github.com/repos/duck8823/duci/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/duck8823/duci/labels{/name}","releases_url":"https://api.github.com/repos/duck8823/duci/releases{/id}","deployments_url":"https://api.github.com/repos/duck8823/duci/deployments","created_at":"2018-04-01T01:51:02Z","updated_at":"2018-12-28T21:05:40Z","pushed_at":"2019-01-01T06:37:45Z","git_url":"git://github.com/duck8823/duci.git","ssh_url":"git@github.com:duck8823/duci.git","clone_url":"https://github.com/duck8823/duci.git","svn_url":"https://github.com/duck8823/duci","homepage":"","size":581,"stargazers_count":16,"watchers_count":16,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":1,"open_issues":4,"watchers":16,"default_branch":"master"}},"base":{"label":"duck8823:master","ref":"master","sha":"5eeb06500337689309a90fd47e51723ac8fd4322","user":{"login":"duck8823","id":15160519,"node_id":"MDQ6VXNlcjE1MTYwNTE5","avatar_url":"https://avatars2.githubusercontent.com/u/15160519?v=4","gravatar_id":"","url":"https://api.github.com/users/duck8823","html_url":"https://github.com/duck8823","followers_url":"https://api.github.com/users/duck8823/followers","following_url":"https://api.github.com/users/duck8823/following{/other_user}","gists_url":"https://api.github.com/users/duck8823/gists{/gist_id}","starred_url":"https://api.github.com/users/duck8823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duck8823/subscriptions","organizations_url":"https://api.github.com/users/duck8823/orgs","repos_url":"https://api.github.com/users/duck8823/repos","events_url":"https://api.github.com/users/duck8823/events{/privacy}","received_events_url":"https://api.github.com/users/duck8823/received_events","type":"User","site_admin":false},"repo":{"id":127587125,"node_id":"MDEwOlJlcG9zaXRvcnkxMjc1ODcxMjU=","name":"duci","full_name":"duck8823/duci","private":false,"owner":{"login":"duck8823","id":15160519,"node_id":"MDQ6VXNlcjE1MTYwNTE5","avatar_url":"https://avatars2.githubusercontent.com/u/15160519?v=4","gravatar_id":"","url":"https://api.github.com/users/duck8823","html_url":"https://github.com/duck8823","followers_url":"https://api.github.com/users/duck8823/followers","following_url":"https://api.github.com/users/duck8823/following{/other_user}","gists_url":"https://api.github.com/users/duck8823/gists{/gist_id}","starred_url":"https://api.github.com/users/duck8823/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duck8823/subscriptions","organizations_url":"https://api.github.com/users/duck8823/orgs","repos_url":"https://api.github.com/users/duck8823/repos","events_url":"https://api.github.com/users/duck8823/events{/privacy}","received_events_url":"https://api.github.com/users/duck8823/received_events","type":"User","site_admin":false},"html_url":"https://github.com/duck8823/duci","description":"The small ci server ","fork":false,"url":"https://api.github.com/repos/duck8823/duci","forks_url":"https://api.github.com/repos/duck8823/duci/forks","keys_url":"https://api.github.com/repos/duck8823/duci/keys{/key_id}","collaborators_url":"https://api.github.com/repos/duck8823/duci/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/duck8823/duci/teams","hooks_url":"https://api.github.com/repos/duck8823/duci/hooks","issue_events_url":"https://api.github.com/repos/duck8823/duci/issues/events{/number}","events_url":"https://api.github.com/repos/duck8823/duci/events","assignees_url":"https://api.github.com/repos/duck8823/duci/assignees{/user}","branches_url":"https://api.github.com/repos/duck8823/duci/branches{/branch}","tags_url":"https://api.github.com/repos/duck8823/duci/tags","blobs_url":"https://api.github.com/repos/duck8823/duci/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/duck8823/duci/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/duck8823/duci/git/refs{/sha}","trees_url":"https://api.github.com/repos/duck8823/duci/git/trees{/sha}","statuses_url":"https://api.github.com/repos/duck8823/duci/statuses/{sha}","languages_url":"https://api.github.com/repos/duck8823/duci/languages","stargazers_url":"https://api.github.com/repos/duck8823/duci/stargazers","contributors_url":"https://api.github.com/repos/duck8823/duci/contributors","subscribers_url":"https://api.github.com/repos/duck8823/duci/subscribers","subscription_url":"https://api.github.com/repos/duck8823/duci/subscription","commits_url":"https://api.github.com/repos/duck8823/duci/commits{/sha}","git_commits_url":"https://api.github.com/repos/duck8823/duci/git/commits{/sha}","comments_url":"https://api.github.com/repos/duck8823/duci/comments{/number}","issue_comment_url":"https://api.github.com/repos/duck8823/duci/issues/comments{/number}","contents_url":"https://api.github.com/repos/duck8823/duci/contents/{+path}","compare_url":"https://api.github.com/repos/duck8823/duci/compare/{base}...{head}","merges_url":"https://api.github.com/repos/duck8823/duci/merges","archive_url":"https://api.github.com/repos/duck8823/duci/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/duck8823/duci/downloads","issues_url":"https://api.github.com/repos/duck8823/duci/issues{/number}","pulls_url":"https://api.github.com/repos/duck8823/duci/pulls{/number}","milestones_url":"https://api.github.com/repos/duck8823/duci/milestones{/number}","notifications_url":"https://api.github.com/repos/duck8823/duci/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/duck8823/duci/labels{/name}","releases_url":"https://api.github.com/repos/duck8823/duci/releases{/id}","deployments_url":"https://api.github.com/repos/duck8823/duci/deployments","created_at":"2018-04-01T01:51:02Z","updated_at":"2018-12-28T21:05:40Z","pushed_at":"2019-01-01T06:37:45Z","git_url":"git://github.com/duck8823/duci.git","ssh_url":"git@github.com:duck8823/duci.git","clone_url":"https://github.com/duck8823/duci.git","svn_url":"https://github.com/duck8823/duci","homepage":"","size":581,"stargazers_count":16,"watchers_count":16,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":1,"open_issues":4,"watchers":16,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/duck8823/duci/pulls/148"},"html":{"href":"https://github.com/duck8823/duci/pull/148"},"issue":{"href":"https://api.github.com/repos/duck8823/duci/issues/148"},"comments":{"href":"https://api.github.com/repos/duck8823/duci/issues/148/comments"},"review_comments":{"href":"https://api.github.com/repos/duck8823/duci/pulls/148/comments"},"review_comment":{"href":"https://api.github.com/repos/duck8823/duci/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/duck8823/duci/pulls/148/commits"},"statuses":{"href":"https://api.github.com/repos/duck8823/duci/statuses/cd496068145a0a7d6fdd46d53e82ad4cb045f54f"}},"author_association":"OWNER"}}
{"actor":{"display_login":"golangcibot"}}