jackal-github 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +2 -0
- data/CONTRIBUTING.md +25 -0
- data/LICENSE +13 -0
- data/README.md +68 -0
- data/jackal-github.gemspec +16 -0
- data/lib/jackal-github.rb +10 -0
- data/lib/jackal-github/eventer.rb +62 -0
- data/lib/jackal-github/formatter.rb +1 -0
- data/lib/jackal-github/formatter/code_fetcher.rb +121 -0
- data/lib/jackal-github/version.rb +5 -0
- metadata +82 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eec50fd5e3f0c4fcabb04c701e0d7227aa0afcf3
|
4
|
+
data.tar.gz: e87d0e1e9420ee420993619f4a51e72f030378b9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 55115b081234606af980b53d5e176af0683514841cc416b9128ce9036743488556d7f35ba11235c37b8ddeabe1b89e17ee62d01b9695a32427b99d8adc5240ad
|
7
|
+
data.tar.gz: 4a1f2dd0da9e664d7804e9270499a8f8056812b9e0f736042232f139c965a4bda3bfdd8f14254757d4c313a110f84e871cfa3790a12df4e8b6564c9ea3d0e69f
|
data/CHANGELOG.md
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
## Branches
|
4
|
+
|
5
|
+
### `master` branch
|
6
|
+
|
7
|
+
The master branch is the current stable released version.
|
8
|
+
|
9
|
+
### `develop` branch
|
10
|
+
|
11
|
+
The develop branch is the current edge of development.
|
12
|
+
|
13
|
+
## Pull requests
|
14
|
+
|
15
|
+
* https://github.com/carnivore-rb/jackal-github/pulls
|
16
|
+
|
17
|
+
Please base all pull requests of the `develop` branch. Merges to
|
18
|
+
`master` only occur through the `develop` branch. Pull requests
|
19
|
+
based on `master` will likely be cherry picked.
|
20
|
+
|
21
|
+
## Issues
|
22
|
+
|
23
|
+
Need to report an issue? Use the github issues:
|
24
|
+
|
25
|
+
* https://github.com/carnivore-rb/jackal-github/issues
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2015 Chris Roberts
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Jackal Github
|
2
|
+
|
3
|
+
Processes incoming payloads from github.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
Configure incoming source using the `:http_paths` source:
|
8
|
+
|
9
|
+
```json
|
10
|
+
...
|
11
|
+
"sources": {
|
12
|
+
"input": {
|
13
|
+
"type": "http_paths",
|
14
|
+
"args": {
|
15
|
+
"port": 9090,
|
16
|
+
"path": "/github",
|
17
|
+
"method": "post"
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
...
|
22
|
+
```
|
23
|
+
|
24
|
+
## Configuration
|
25
|
+
|
26
|
+
The name provided for the payload defaults to `"github"`. This
|
27
|
+
can be overridden in the configuration using the names map,
|
28
|
+
which allows names to be provided on a per-event basis:
|
29
|
+
|
30
|
+
```json
|
31
|
+
...
|
32
|
+
"config": {
|
33
|
+
"names": {
|
34
|
+
"push": PUSH_NAME,
|
35
|
+
"create": CREATE_NAME
|
36
|
+
}
|
37
|
+
}
|
38
|
+
...
|
39
|
+
```
|
40
|
+
|
41
|
+
## Payload
|
42
|
+
|
43
|
+
The payload generated will contain the contents fo the github
|
44
|
+
payload, any query parameters provided, and the headers. It will
|
45
|
+
also add in an `event` key to designate what type of event was
|
46
|
+
received.
|
47
|
+
|
48
|
+
```json
|
49
|
+
...
|
50
|
+
"data": {
|
51
|
+
"github": {
|
52
|
+
"event": "X_GITHUB_EVENT",
|
53
|
+
"query": QUERY_PARAMS,
|
54
|
+
"headers": HTTP_HEADERS,
|
55
|
+
GITHUB_PAYLOAD
|
56
|
+
}
|
57
|
+
}
|
58
|
+
...
|
59
|
+
```
|
60
|
+
|
61
|
+
## Formatters
|
62
|
+
|
63
|
+
* `Jackal::Github::Formatter::CodeFetcher` Formats payload for code fetcher
|
64
|
+
|
65
|
+
# Info
|
66
|
+
|
67
|
+
* Repository: https://github.com/carnivore-rb/jackal-github
|
68
|
+
* IRC: Freenode @ #carnivore
|
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
|
2
|
+
require 'jackal-github/version'
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'jackal-github'
|
5
|
+
s.version = Jackal::Github::VERSION.version
|
6
|
+
s.summary = 'Message processing helper'
|
7
|
+
s.author = 'Chris Roberts'
|
8
|
+
s.email = 'code@chrisroberts.org'
|
9
|
+
s.homepage = 'https://github.com/carnivore-rb/jackal-github'
|
10
|
+
s.description = 'GitHub payload event helper'
|
11
|
+
s.require_path = 'lib'
|
12
|
+
s.license = 'Apache 2.0'
|
13
|
+
s.add_runtime_dependency 'jackal'
|
14
|
+
s.add_development_dependency 'carnivore-http'
|
15
|
+
s.files = Dir['lib/**/*'] + %w(jackal-github.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
|
16
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'jackal-github'
|
2
|
+
|
3
|
+
module Jackal
|
4
|
+
module Github
|
5
|
+
# Process events
|
6
|
+
class Eventer < Callback
|
7
|
+
|
8
|
+
# Validity of message
|
9
|
+
#
|
10
|
+
# @param message [Carnivore::Message]
|
11
|
+
# @return [Truthy, Falsey]
|
12
|
+
def valid?(message)
|
13
|
+
super do |_|
|
14
|
+
message[:message].get(:headers, :x_github_event)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Format payload based on event type recevied
|
19
|
+
#
|
20
|
+
# @param message [Carnivore::Message]
|
21
|
+
def execute(message)
|
22
|
+
failure_wrap(message) do |_|
|
23
|
+
content = format_payload(message)
|
24
|
+
payload = new_payload(name_for_payload(content), content)
|
25
|
+
job_completed(:github, payload, message)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Format the github event to store within the payload
|
30
|
+
#
|
31
|
+
# @param message [Carnivore::Message]
|
32
|
+
# @return [Smash]
|
33
|
+
def format_payload(message)
|
34
|
+
content = Smash.new
|
35
|
+
g_payload = message[:message][:body]
|
36
|
+
g_headers = message[:message][:headers] || {}
|
37
|
+
g_query = message[:message][:query] || {}
|
38
|
+
content[:github] = g_payload.merge(
|
39
|
+
Smash.new(
|
40
|
+
:event => g_headers[:x_github_event],
|
41
|
+
:query => g_query,
|
42
|
+
:headers => g_headers,
|
43
|
+
:url_path => message[:message][:request].path
|
44
|
+
)
|
45
|
+
)
|
46
|
+
content
|
47
|
+
end
|
48
|
+
|
49
|
+
# Provide payload name for given event
|
50
|
+
#
|
51
|
+
# @param event [String] github event
|
52
|
+
# @return [String] payload name
|
53
|
+
# @note defaults to `github`
|
54
|
+
def name_for_payload(event)
|
55
|
+
config.fetch(:names, event,
|
56
|
+
config.fetch(:names, :default, :github)
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'jackal-github/formatter/code_fetcher'
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'jackal-github'
|
2
|
+
|
3
|
+
module Jackal
|
4
|
+
module Github
|
5
|
+
module Formatter
|
6
|
+
|
7
|
+
class CodeFetcher < Jackal::Formatter
|
8
|
+
|
9
|
+
# Format payloads from source
|
10
|
+
SOURCE = '*'
|
11
|
+
# Formats for destination
|
12
|
+
DESTINATION = 'code_fetcher'
|
13
|
+
|
14
|
+
# Format the payload to provide code fetcher information
|
15
|
+
#
|
16
|
+
# @param payload [Smash]
|
17
|
+
# @return [Smash]
|
18
|
+
def format(payload)
|
19
|
+
if(payload.get(:data, :github))
|
20
|
+
payload.set(:data, :code_fetcher, :info, :source, 'github')
|
21
|
+
payload.set(:data, :code_fetcher, :info, :owner,
|
22
|
+
payload.get(:data, :github, :repository, :owner, :login))
|
23
|
+
payload.set(:data, :code_fetcher, :info, :name,
|
24
|
+
payload.get(:data, :github, :repository, :name))
|
25
|
+
payload.set(:data, :code_fetcher, :info, :private,
|
26
|
+
payload.get(:data, :github, :repository, :private))
|
27
|
+
payload.set(:data, :code_fetcher, :info, :url,
|
28
|
+
payload.get(:data, :github, :repository, :clone_url))
|
29
|
+
set_reference_information(payload.get(:data, :github, :event).to_s, payload)
|
30
|
+
payload
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Set repository reference information into payload if
|
35
|
+
# available
|
36
|
+
#
|
37
|
+
# @param event [String] github event type
|
38
|
+
# @param payload [Smash]
|
39
|
+
# @return [Smash]
|
40
|
+
def set_reference_information(event, payload)
|
41
|
+
method_name = "#{event}_reference"
|
42
|
+
if(self.respond_to?(method_name, true))
|
43
|
+
ref, sha = send(method_name, payload)
|
44
|
+
payload.set(:data, :code_fetcher, :info, :reference, ref)
|
45
|
+
payload.set(:data, :code_fetcher, :info, :commit_sha, sha)
|
46
|
+
end
|
47
|
+
payload
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
# Format for commit comment event
|
53
|
+
#
|
54
|
+
# @param payload [Smash]
|
55
|
+
# @return [Array<String>] [reference, commit_id]
|
56
|
+
def commit_comment_reference(payload)
|
57
|
+
[payload.get(:data, :github, :comment, :commit_id),
|
58
|
+
payload.get(:data, :github, :comment, :commit_id)]
|
59
|
+
end
|
60
|
+
|
61
|
+
# Format for create event
|
62
|
+
#
|
63
|
+
# @param payload [Smash]
|
64
|
+
# @return [Array<String>] [reference, commit_id]
|
65
|
+
def create_reference(payload)
|
66
|
+
[payload.get(:data, :github, :ref),
|
67
|
+
payload.get(:data, :github, :ref)]
|
68
|
+
end
|
69
|
+
alias_method :delete_reference, :create_reference
|
70
|
+
|
71
|
+
# Format for deployment event
|
72
|
+
#
|
73
|
+
# @param payload [Smash]
|
74
|
+
# @return [Array<String>] [reference, commit_id]
|
75
|
+
def deployment_reference(payload)
|
76
|
+
[payload.get(:data, :github, :deployment, :ref),
|
77
|
+
payload.get(:data, :github, :deployment, :sha)]
|
78
|
+
end
|
79
|
+
alias_method :deployment_status_reference, :deployment_reference
|
80
|
+
|
81
|
+
# Format for pull request event
|
82
|
+
#
|
83
|
+
# @param payload [Smash]
|
84
|
+
# @return [Array<String>] [reference, commit_id]
|
85
|
+
def pull_request_reference(payload)
|
86
|
+
payload.set(:data, :code_fetcher, :info, :owner,
|
87
|
+
payload.get(:data, :github, :pull_request, :head, :repo, :owner, :login))
|
88
|
+
payload.set(:data, :code_fetcher, :info, :name,
|
89
|
+
payload.get(:data, :github, :pull_request, :head, :repo, :name))
|
90
|
+
payload.set(:data, :code_fetcher, :info, :private,
|
91
|
+
payload.get(:data, :github, :pull_request, :head, :repo, :private))
|
92
|
+
payload.set(:data, :code_fetcher, :info, :url,
|
93
|
+
payload.get(:data, :github, :pull_request, :head, :repo, :clone_url))
|
94
|
+
[payload.get(:data, :github, :pull_request, :head, :ref),
|
95
|
+
payload.get(:data, :github, :pull_request, :head, :sha)]
|
96
|
+
end
|
97
|
+
|
98
|
+
# Format for push event
|
99
|
+
#
|
100
|
+
# @param payload [Smash]
|
101
|
+
# @return [Array<String>] [reference, commit_id]
|
102
|
+
def push_reference(payload)
|
103
|
+
payload.set(:data, :code_fetcher, :info, :owner,
|
104
|
+
payload.get(:data, :github, :repository, :owner, :name))
|
105
|
+
[payload.get(:data, :github, :ref),
|
106
|
+
payload.get(:data, :github, :head_commit, :id)]
|
107
|
+
end
|
108
|
+
|
109
|
+
# Format for status event
|
110
|
+
#
|
111
|
+
# @param payload [Smash]
|
112
|
+
# @return [Array<String>] [reference, commit_id]
|
113
|
+
def status_reference(payload)
|
114
|
+
[payload.get(:data, :github, :sha),
|
115
|
+
payload.get(:data, :github, :sha)]
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jackal-github
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Roberts
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jackal
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: carnivore-http
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: GitHub payload event helper
|
42
|
+
email: code@chrisroberts.org
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- CHANGELOG.md
|
48
|
+
- CONTRIBUTING.md
|
49
|
+
- LICENSE
|
50
|
+
- README.md
|
51
|
+
- jackal-github.gemspec
|
52
|
+
- lib/jackal-github.rb
|
53
|
+
- lib/jackal-github/eventer.rb
|
54
|
+
- lib/jackal-github/formatter.rb
|
55
|
+
- lib/jackal-github/formatter/code_fetcher.rb
|
56
|
+
- lib/jackal-github/version.rb
|
57
|
+
homepage: https://github.com/carnivore-rb/jackal-github
|
58
|
+
licenses:
|
59
|
+
- Apache 2.0
|
60
|
+
metadata: {}
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 2.2.2
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: Message processing helper
|
81
|
+
test_files: []
|
82
|
+
has_rdoc:
|