txgh-server 3.1.0 → 4.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +5 -5
  2. data/lib/txgh-server.rb +1 -0
  3. data/lib/txgh-server/application.rb +7 -1
  4. data/lib/txgh-server/download_handler.rb +1 -1
  5. data/lib/txgh-server/gitlab_request_auth.rb +13 -0
  6. data/lib/txgh-server/triggers/handler.rb +18 -1
  7. data/lib/txgh-server/triggers/pull_handler.rb +1 -10
  8. data/lib/txgh-server/triggers/push_handler.rb +1 -10
  9. data/lib/txgh-server/version.rb +1 -1
  10. data/lib/txgh-server/webhooks.rb +2 -0
  11. data/lib/txgh-server/webhooks/git.rb +15 -0
  12. data/lib/txgh-server/webhooks/git/blank_attributes.rb +20 -0
  13. data/lib/txgh-server/webhooks/git/delete_attributes.rb +54 -0
  14. data/lib/txgh-server/webhooks/git/delete_handler.rb +45 -0
  15. data/lib/txgh-server/webhooks/git/ping_handler.rb +21 -0
  16. data/lib/txgh-server/webhooks/git/push_attributes.rb +79 -0
  17. data/lib/txgh-server/webhooks/git/push_handler.rb +98 -0
  18. data/lib/txgh-server/webhooks/git/request_handler.rb +76 -0
  19. data/lib/txgh-server/webhooks/git/status_updater.rb +15 -0
  20. data/lib/txgh-server/webhooks/github/blank_attributes.rb +1 -13
  21. data/lib/txgh-server/webhooks/github/delete_attributes.rb +1 -38
  22. data/lib/txgh-server/webhooks/github/delete_handler.rb +1 -38
  23. data/lib/txgh-server/webhooks/github/ping_handler.rb +1 -12
  24. data/lib/txgh-server/webhooks/github/push_attributes.rb +1 -51
  25. data/lib/txgh-server/webhooks/github/push_handler.rb +2 -88
  26. data/lib/txgh-server/webhooks/github/request_handler.rb +2 -47
  27. data/lib/txgh-server/webhooks/github/status_updater.rb +1 -9
  28. data/lib/txgh-server/webhooks/gitlab.rb +14 -0
  29. data/lib/txgh-server/webhooks/gitlab/blank_attributes.rb +8 -0
  30. data/lib/txgh-server/webhooks/gitlab/delete_attributes.rb +17 -0
  31. data/lib/txgh-server/webhooks/gitlab/delete_handler.rb +8 -0
  32. data/lib/txgh-server/webhooks/gitlab/push_attributes.rb +29 -0
  33. data/lib/txgh-server/webhooks/gitlab/push_handler.rb +13 -0
  34. data/lib/txgh-server/webhooks/gitlab/request_handler.rb +59 -0
  35. data/lib/txgh-server/webhooks/gitlab/status_updater.rb +37 -0
  36. data/lib/txgh-server/webhooks/transifex/request_handler.rb +1 -1
  37. data/spec/application_spec.rb +11 -11
  38. data/spec/download_handler_spec.rb +6 -8
  39. data/spec/github_request_auth_spec.rb +6 -8
  40. data/spec/gitlab_request_auth_spec.rb +26 -0
  41. data/spec/helpers/gitlab_payload_builder.rb +132 -0
  42. data/spec/integration/hooks_spec.rb +1 -1
  43. data/spec/tgz_stream_response_spec.rb +2 -4
  44. data/spec/transifex_request_auth_spec.rb +6 -8
  45. data/spec/webhooks/github/delete_attributes_spec.rb +2 -5
  46. data/spec/webhooks/github/delete_handler_spec.rb +4 -7
  47. data/spec/webhooks/github/ping_handler_spec.rb +2 -5
  48. data/spec/webhooks/github/push_attributes_spec.rb +3 -6
  49. data/spec/webhooks/github/push_handler_spec.rb +5 -8
  50. data/spec/webhooks/github/request_handler_spec.rb +8 -10
  51. data/spec/webhooks/github/status_updater_spec.rb +2 -4
  52. data/spec/webhooks/gitlab/delete_attributes_spec.rb +27 -0
  53. data/spec/webhooks/gitlab/delete_handler_spec.rb +34 -0
  54. data/spec/webhooks/gitlab/push_attributes_spec.rb +64 -0
  55. data/spec/webhooks/gitlab/push_handler_spec.rb +99 -0
  56. data/spec/webhooks/gitlab/request_handler_spec.rb +73 -0
  57. data/spec/webhooks/gitlab/status_updater_spec.rb +66 -0
  58. data/spec/webhooks/transifex/hook_handler_spec.rb +2 -5
  59. data/spec/webhooks/transifex/request_handler_spec.rb +3 -5
  60. data/spec/zip_stream_response_spec.rb +2 -4
  61. data/txgh-server.gemspec +1 -2
  62. metadata +35 -10
  63. data/spec/integration/payloads/github_postbody_l10n.json +0 -136
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+ require 'helpers/gitlab_payload_builder'
3
+ require 'helpers/nil_logger'
4
+ require 'helpers/standard_txgh_setup'
5
+ require 'helpers/test_request'
6
+
7
+ describe TxghServer::Webhooks::Gitlab::RequestHandler do
8
+ include StandardTxghSetup
9
+
10
+ let(:logger) { NilLogger.new }
11
+ let(:ref) { 'heads/my_ref' }
12
+ let(:headers) { { 'HTTP_X_GITLAB_EVENT' => event } }
13
+ let(:body) { payload.to_json }
14
+ let(:request) { TestRequest.new(body: body, headers: headers) }
15
+ let(:handler) { described_class.new(request, logger) }
16
+
17
+ describe '#handle_request' do
18
+ context 'push event' do
19
+ let(:event) { 'Push Hook' }
20
+ let(:payload) { GitlabPayloadBuilder.push_payload(gitlab_repo_name, ref).tap { |p| p.add_commit } }
21
+
22
+ it 'does not execute if unauthorized' do
23
+ expect_any_instance_of(TxghServer::Webhooks::Gitlab::PushHandler).to_not receive(:execute)
24
+ response = handler.handle_request
25
+ expect(response.status).to eq(401)
26
+ end
27
+
28
+ context 'with an authentic request' do
29
+ before(:each) do
30
+ allow(handler).to receive(:authentic_request?).and_return(true)
31
+ end
32
+
33
+ it 'handles the request with the push handler' do
34
+ expect_any_instance_of(TxghServer::Webhooks::Gitlab::PushHandler).to receive(:execute).and_return(:response)
35
+ expect(handler.handle_request).to eq(:response)
36
+ end
37
+ end
38
+ end
39
+
40
+ context 'delete event' do
41
+ let(:event) { 'Push Hook' }
42
+ let(:payload) { GitlabPayloadBuilder.delete_payload(gitlab_repo_name, ref) }
43
+
44
+ it 'does not execute if unauthorized' do
45
+ expect_any_instance_of(TxghServer::Webhooks::Gitlab::DeleteHandler).to_not receive(:execute)
46
+ response = handler.handle_request
47
+ expect(response.status).to eq(401)
48
+ end
49
+
50
+ context 'with an authentic request' do
51
+ before(:each) do
52
+ allow(handler).to receive(:authentic_request?).and_return(true)
53
+ end
54
+
55
+ it 'handles the request with the delete handler' do
56
+ expect_any_instance_of(TxghServer::Webhooks::Gitlab::DeleteHandler).to receive(:execute).and_return(:response)
57
+ expect(handler.handle_request).to eq(:response)
58
+ end
59
+ end
60
+ end
61
+
62
+ context 'unrecognized event' do
63
+ let(:event) { 'foo' }
64
+ let(:payload) { { repository: { full_name: gitlab_repo_name } } }
65
+
66
+ it 'responds with a 400' do
67
+ allow(handler).to receive(:authentic_request?).and_return(true)
68
+ response = handler.handle_request
69
+ expect(response.status).to eq(400)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+ require 'helpers/standard_txgh_setup'
3
+
4
+ describe TxghServer::Webhooks::Gitlab::StatusUpdater do
5
+ include StandardTxghSetup
6
+
7
+ let(:updater) { TxghServer::Webhooks::Gitlab::StatusUpdater.new(transifex_project, gitlab_repo, ref) }
8
+ let(:gitlab_error_response) do
9
+ OpenStruct.new({
10
+ code: 404,
11
+ request: double(base_uri: 'https://gitlab.com/api/v3', path: '/foo'),
12
+ parsed_response: ::Gitlab::ObjectifiedHash.new(
13
+ error_description: 'Displayed error_description',
14
+ error: 'also will not be displayed'
15
+ )
16
+ })
17
+ end
18
+
19
+ describe '#report_error_and_update_status' do
20
+ let(:description) { 'An error done occurred, fool' }
21
+ let(:target_url) { 'http://you-goofed.com' }
22
+
23
+ let(:status_params) do
24
+ { description: description, target_url: target_url }
25
+ end
26
+
27
+ let(:error_params) { { foo: 'bar' } }
28
+
29
+ before(:each) do
30
+ Txgh.events.subscribe(Txgh::Events::ERROR_CHANNEL) { error_params }
31
+ Txgh.events.subscribe('gitlab.status.error') { status_params }
32
+ end
33
+
34
+ it 'reports the error and updates the status' do
35
+ expect(Txgh::GitlabStatus).to(
36
+ receive(:error).with(transifex_project, gitlab_repo, ref, status_params)
37
+ )
38
+
39
+ expect(Txgh.events).to receive(:publish_error!)
40
+ updater.report_error_and_update_status(StandardError.new)
41
+ end
42
+
43
+ it 'avoids blowing up on gitlab error' do
44
+ expect(Txgh::GitlabStatus).to(
45
+ receive(:error).and_raise(::Gitlab::Error::BadRequest.new(gitlab_error_response))
46
+ )
47
+
48
+ expect { updater.report_error_and_update_status(StandardError.new) }.to_not raise_error
49
+ end
50
+ end
51
+
52
+ describe '#update_status' do
53
+ it 'updates the gitlab status' do
54
+ expect(Txgh::GitlabStatus).to receive(:update)
55
+ updater.update_status
56
+ end
57
+
58
+ it 'avoids blowing up on gitlab error' do
59
+ expect(Txgh::GitlabStatus).to(
60
+ receive(:update).and_raise(::Gitlab::Error::BadRequest.new(gitlab_error_response))
61
+ )
62
+
63
+ expect { updater.update_status }.to_not raise_error
64
+ end
65
+ end
66
+ end
@@ -2,10 +2,7 @@ require 'spec_helper'
2
2
  require 'helpers/nil_logger'
3
3
  require 'helpers/standard_txgh_setup'
4
4
 
5
- include TxghServer
6
- include TxghServer::Webhooks::Transifex
7
-
8
- describe HookHandler do
5
+ describe TxghServer::Webhooks::Transifex::HookHandler do
9
6
  include StandardTxghSetup
10
7
 
11
8
  let(:requested_resource_slug) do
@@ -13,7 +10,7 @@ describe HookHandler do
13
10
  end
14
11
 
15
12
  let(:handler) do
16
- HookHandler.new(
13
+ TxghServer::Webhooks::Transifex::HookHandler.new(
17
14
  project: transifex_project,
18
15
  repo: github_repo,
19
16
  resource_slug: requested_resource_slug,
@@ -4,9 +4,7 @@ require 'helpers/standard_txgh_setup'
4
4
  require 'helpers/test_request'
5
5
  require 'uri'
6
6
 
7
- include TxghServer::Webhooks
8
-
9
- describe Transifex::RequestHandler do
7
+ describe TxghServer::Webhooks::Transifex::RequestHandler do
10
8
  include StandardTxghSetup
11
9
 
12
10
  let(:logger) { NilLogger.new }
@@ -44,7 +42,7 @@ describe Transifex::RequestHandler do
44
42
  end
45
43
 
46
44
  it 'does not execute if unauthorized' do
47
- expect_any_instance_of(Transifex::HookHandler).to_not receive(:execute)
45
+ expect_any_instance_of(TxghServer::Webhooks::Transifex::HookHandler).to_not receive(:execute)
48
46
  response = handler.handle_request
49
47
  expect(response.status).to eq(401)
50
48
  end
@@ -55,7 +53,7 @@ describe Transifex::RequestHandler do
55
53
  end
56
54
 
57
55
  it 'handles the request with the hook handler' do
58
- expect_any_instance_of(Transifex::HookHandler).to receive(:execute).and_return(:response)
56
+ expect_any_instance_of(TxghServer::Webhooks::Transifex::HookHandler).to receive(:execute).and_return(:response)
59
57
  expect(handler.handle_request).to eq(:response)
60
58
  end
61
59
 
@@ -1,9 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'tempfile'
3
3
 
4
- include TxghServer
5
-
6
- describe ZipStreamResponse do
4
+ describe TxghServer::ZipStreamResponse do
7
5
  def read_zip_from(file)
8
6
  contents = {}
9
7
 
@@ -26,7 +24,7 @@ describe ZipStreamResponse do
26
24
  end
27
25
 
28
26
  let(:response) do
29
- ZipStreamResponse.new(attachment, enum)
27
+ described_class.new(attachment, enum)
30
28
  end
31
29
 
32
30
  describe '#write_to' do
@@ -11,13 +11,12 @@ Gem::Specification.new do |s|
11
11
  s.description = s.summary = 'An HTTP server for interacting with txgh.'
12
12
 
13
13
  s.platform = Gem::Platform::RUBY
14
- s.has_rdoc = true
15
14
 
16
15
  s.add_dependency 'mime-types', '~> 2.0'
17
16
  s.add_dependency 'sinatra', '~> 1.4'
18
17
  s.add_dependency 'sinatra-contrib', '~> 1.4'
19
18
  s.add_dependency 'rubyzip', '>= 1.0', '<= 1.1.2'
20
- s.add_dependency 'txgh', '~> 6.1'
19
+ s.add_dependency 'txgh', '7.0.0.beta'
21
20
 
22
21
  s.require_path = 'lib'
23
22
  s.files = Dir['{lib,spec}/**/*', 'README.md', 'txgh-server.gemspec', 'LICENSE']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: txgh-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 4.0.0.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Jackowski
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-06-18 00:00:00.000000000 Z
12
+ date: 2020-03-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mime-types
@@ -77,16 +77,16 @@ dependencies:
77
77
  name: txgh
78
78
  requirement: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: '6.1'
82
+ version: 7.0.0.beta
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: '6.1'
89
+ version: 7.0.0.beta
90
90
  description: An HTTP server for interacting with txgh.
91
91
  email:
92
92
  - mattjjacko@gmail.com
@@ -100,6 +100,7 @@ files:
100
100
  - lib/txgh-server/application.rb
101
101
  - lib/txgh-server/download_handler.rb
102
102
  - lib/txgh-server/github_request_auth.rb
103
+ - lib/txgh-server/gitlab_request_auth.rb
103
104
  - lib/txgh-server/response.rb
104
105
  - lib/txgh-server/response_helpers.rb
105
106
  - lib/txgh-server/stream_response.rb
@@ -111,6 +112,15 @@ files:
111
112
  - lib/txgh-server/triggers/push_handler.rb
112
113
  - lib/txgh-server/version.rb
113
114
  - lib/txgh-server/webhooks.rb
115
+ - lib/txgh-server/webhooks/git.rb
116
+ - lib/txgh-server/webhooks/git/blank_attributes.rb
117
+ - lib/txgh-server/webhooks/git/delete_attributes.rb
118
+ - lib/txgh-server/webhooks/git/delete_handler.rb
119
+ - lib/txgh-server/webhooks/git/ping_handler.rb
120
+ - lib/txgh-server/webhooks/git/push_attributes.rb
121
+ - lib/txgh-server/webhooks/git/push_handler.rb
122
+ - lib/txgh-server/webhooks/git/request_handler.rb
123
+ - lib/txgh-server/webhooks/git/status_updater.rb
114
124
  - lib/txgh-server/webhooks/github.rb
115
125
  - lib/txgh-server/webhooks/github/blank_attributes.rb
116
126
  - lib/txgh-server/webhooks/github/delete_attributes.rb
@@ -120,6 +130,14 @@ files:
120
130
  - lib/txgh-server/webhooks/github/push_handler.rb
121
131
  - lib/txgh-server/webhooks/github/request_handler.rb
122
132
  - lib/txgh-server/webhooks/github/status_updater.rb
133
+ - lib/txgh-server/webhooks/gitlab.rb
134
+ - lib/txgh-server/webhooks/gitlab/blank_attributes.rb
135
+ - lib/txgh-server/webhooks/gitlab/delete_attributes.rb
136
+ - lib/txgh-server/webhooks/gitlab/delete_handler.rb
137
+ - lib/txgh-server/webhooks/gitlab/push_attributes.rb
138
+ - lib/txgh-server/webhooks/gitlab/push_handler.rb
139
+ - lib/txgh-server/webhooks/gitlab/request_handler.rb
140
+ - lib/txgh-server/webhooks/gitlab/status_updater.rb
123
141
  - lib/txgh-server/webhooks/transifex.rb
124
142
  - lib/txgh-server/webhooks/transifex/hook_handler.rb
125
143
  - lib/txgh-server/webhooks/transifex/request_handler.rb
@@ -127,7 +145,9 @@ files:
127
145
  - spec/application_spec.rb
128
146
  - spec/download_handler_spec.rb
129
147
  - spec/github_request_auth_spec.rb
148
+ - spec/gitlab_request_auth_spec.rb
130
149
  - spec/helpers/github_payload_builder.rb
150
+ - spec/helpers/gitlab_payload_builder.rb
131
151
  - spec/helpers/integration_setup.rb
132
152
  - spec/helpers/test_request.rb
133
153
  - spec/integration/cassettes/pull.yml
@@ -136,7 +156,6 @@ files:
136
156
  - spec/integration/config/tx.config
137
157
  - spec/integration/hooks_spec.rb
138
158
  - spec/integration/payloads/github_postbody.json
139
- - spec/integration/payloads/github_postbody_l10n.json
140
159
  - spec/integration/payloads/github_postbody_release.json
141
160
  - spec/integration/triggers_spec.rb
142
161
  - spec/spec_helper.rb
@@ -149,6 +168,12 @@ files:
149
168
  - spec/webhooks/github/push_handler_spec.rb
150
169
  - spec/webhooks/github/request_handler_spec.rb
151
170
  - spec/webhooks/github/status_updater_spec.rb
171
+ - spec/webhooks/gitlab/delete_attributes_spec.rb
172
+ - spec/webhooks/gitlab/delete_handler_spec.rb
173
+ - spec/webhooks/gitlab/push_attributes_spec.rb
174
+ - spec/webhooks/gitlab/push_handler_spec.rb
175
+ - spec/webhooks/gitlab/request_handler_spec.rb
176
+ - spec/webhooks/gitlab/status_updater_spec.rb
152
177
  - spec/webhooks/transifex/hook_handler_spec.rb
153
178
  - spec/webhooks/transifex/request_handler_spec.rb
154
179
  - spec/zip_stream_response_spec.rb
@@ -167,12 +192,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
192
  version: '0'
168
193
  required_rubygems_version: !ruby/object:Gem::Requirement
169
194
  requirements:
170
- - - ">="
195
+ - - ">"
171
196
  - !ruby/object:Gem::Version
172
- version: '0'
197
+ version: 1.3.1
173
198
  requirements: []
174
199
  rubyforge_project:
175
- rubygems_version: 2.4.5.5
200
+ rubygems_version: 2.7.6
176
201
  signing_key:
177
202
  specification_version: 4
178
203
  summary: An HTTP server for interacting with txgh.
@@ -1,136 +0,0 @@
1
- {
2
- "ref": "refs/tags/L10N",
3
- "before": "0000000000000000000000000000000000000000",
4
- "after": "6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed",
5
- "created": true,
6
- "deleted": false,
7
- "forced": true,
8
- "base_ref": "refs/heads/master",
9
- "compare": "https://github.com/txgh-bot/txgh-test-resources/compare/L10N",
10
- "commits": [
11
-
12
- ],
13
- "head_commit": {
14
- "id": "6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed",
15
- "distinct": true,
16
- "message": "10",
17
- "timestamp": "2015-11-19T12:56:33-08:00",
18
- "url": "https://github.com/txgh-bot/txgh-test-resources/commit/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed",
19
- "author": {
20
- "name": "Txgh Bot",
21
- "email": "txgh.bot@gmail.com",
22
- "username": "txgh-bot"
23
- },
24
- "committer": {
25
- "name": "Txgh Bot",
26
- "email": "txgh.bot@gmail.com",
27
- "username": "txgh-bot"
28
- },
29
- "added": [
30
-
31
- ],
32
- "removed": [
33
-
34
- ],
35
- "modified": [
36
- "sample.po"
37
- ]
38
- },
39
- "repository": {
40
- "id": 41740726,
41
- "name": "txgh-test-resources",
42
- "full_name": "txgh-bot/txgh-test-resources",
43
- "owner": {
44
- "name": "txgh-bot",
45
- "email": "txgh.bot@gmail.com"
46
- },
47
- "private": false,
48
- "html_url": "https://github.com/txgh-bot/txgh-test-resources",
49
- "description": "Translation test repo for txgh",
50
- "fork": false,
51
- "url": "https://github.com/txgh-bot/txgh-test-resources",
52
- "forks_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/forks",
53
- "keys_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/keys{/key_id}",
54
- "collaborators_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/collaborators{/collaborator}",
55
- "teams_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/teams",
56
- "hooks_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/hooks",
57
- "issue_events_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/issues/events{/number}",
58
- "events_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/events",
59
- "assignees_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/assignees{/user}",
60
- "branches_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/branches{/branch}",
61
- "tags_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/tags",
62
- "blobs_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs{/sha}",
63
- "git_tags_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/git/tags{/sha}",
64
- "git_refs_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/git/refs{/sha}",
65
- "trees_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/git/trees{/sha}",
66
- "statuses_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/statuses/{sha}",
67
- "languages_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/languages",
68
- "stargazers_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/stargazers",
69
- "contributors_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/contributors",
70
- "subscribers_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/subscribers",
71
- "subscription_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/subscription",
72
- "commits_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/commits{/sha}",
73
- "git_commits_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/git/commits{/sha}",
74
- "comments_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/comments{/number}",
75
- "issue_comment_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/issues/comments{/number}",
76
- "contents_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/contents/{+path}",
77
- "compare_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/compare/{base}...{head}",
78
- "merges_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/merges",
79
- "archive_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/{archive_format}{/ref}",
80
- "downloads_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/downloads",
81
- "issues_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/issues{/number}",
82
- "pulls_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/pulls{/number}",
83
- "milestones_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/milestones{/number}",
84
- "notifications_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/notifications{?since,all,participating}",
85
- "labels_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/labels{/name}",
86
- "releases_url": "https://api.github.com/repos/txgh-bot/txgh-test-resources/releases{/id}",
87
- "created_at": 1441114620,
88
- "updated_at": "2015-09-01T13:37:00Z",
89
- "pushed_at": 1447966674,
90
- "git_url": "git://github.com/txgh-bot/txgh-test-resources.git",
91
- "ssh_url": "git@github.com:txgh-bot/txgh-test-resources.git",
92
- "clone_url": "https://github.com/txgh-bot/txgh-test-resources.git",
93
- "svn_url": "https://github.com/txgh-bot/txgh-test-resources",
94
- "homepage": null,
95
- "size": 12,
96
- "stargazers_count": 0,
97
- "watchers_count": 0,
98
- "language": null,
99
- "has_issues": true,
100
- "has_downloads": true,
101
- "has_wiki": true,
102
- "has_pages": false,
103
- "forks_count": 0,
104
- "mirror_url": null,
105
- "open_issues_count": 0,
106
- "forks": 0,
107
- "open_issues": 0,
108
- "watchers": 0,
109
- "default_branch": "master",
110
- "stargazers": 0,
111
- "master_branch": "master"
112
- },
113
- "pusher": {
114
- "name": "txgh-bot",
115
- "email": "txgh.bot@gmail.com"
116
- },
117
- "sender": {
118
- "login": "txgh-bot",
119
- "id": 974299,
120
- "avatar_url": "https://avatars.githubusercontent.com/u/974299?v=3",
121
- "gravatar_id": "",
122
- "url": "https://api.github.com/users/txgh-bot",
123
- "html_url": "https://github.com/txgh-bot",
124
- "followers_url": "https://api.github.com/users/txgh-bot/followers",
125
- "following_url": "https://api.github.com/users/txgh-bot/following{/other_user}",
126
- "gists_url": "https://api.github.com/users/txgh-bot/gists{/gist_id}",
127
- "starred_url": "https://api.github.com/users/txgh-bot/starred{/owner}{/repo}",
128
- "subscriptions_url": "https://api.github.com/users/txgh-bot/subscriptions",
129
- "organizations_url": "https://api.github.com/users/txgh-bot/orgs",
130
- "repos_url": "https://api.github.com/users/txgh-bot/repos",
131
- "events_url": "https://api.github.com/users/txgh-bot/events{/privacy}",
132
- "received_events_url": "https://api.github.com/users/txgh-bot/received_events",
133
- "type": "User",
134
- "site_admin": false
135
- }
136
- }