jackal-github-kit 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d03126fcac1f91bcbff8399b1d7cfd5fcc2f8c00
4
+ data.tar.gz: 8e4937d981f0f9bbc8bf6aa87e97975b99d85c86
5
+ SHA512:
6
+ metadata.gz: 275b6804fff1b98126084b1c04c34c0f8590181698fd57222a86e7c9bb9e8a2b1571c1187f70ea062ade8d016e63c1e098d2c650351b65ca6f7863614020c58b
7
+ data.tar.gz: 642d63754ed446f144843d86d1d803fb34c8ac702879068877a6a334018a0d00836d5f4fcaea58bfe314215406483a2c369fca18cc226877162a195877fc8c8d
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ # v0.1.0
2
+ * Initial commit
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-kit/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-kit/issues
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2014 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,86 @@
1
+ # Jackal GitHub Kit
2
+
3
+ Provides communications interface with GitHub.
4
+
5
+ ## Supported communications
6
+
7
+ * Repository commit comment
8
+ * Repository status
9
+
10
+ ## Configuration
11
+
12
+ Access tokens are used for access to GitHub. Configuration can
13
+ be provided via direct configuration:
14
+
15
+ ```json
16
+ {
17
+ "jackal": {
18
+ "github_kit": {
19
+ "config": {
20
+ "github": {
21
+ "access_token": TOKEN
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
27
+ ```
28
+
29
+ or it can be provided via application level configuration:
30
+
31
+ ```json
32
+ {
33
+ "jackal": {
34
+ "github": {
35
+ "access_token": ACCESS_TOKEN
36
+ }
37
+ }
38
+ }
39
+ ```
40
+
41
+ ## Payload structure
42
+
43
+ ### Repository commit comment
44
+
45
+ ```json
46
+ {
47
+ ...
48
+ "data": {
49
+ "github_kit": {
50
+ "commit_comment": {
51
+ "repository": REPOSITORY_FULL_NAME,
52
+ "reference": COMMIT_SHA,
53
+ "message": MESSAGE_TEXT
54
+ }
55
+ }
56
+ }
57
+ ...
58
+ }
59
+ ```
60
+
61
+ ### Repository status
62
+
63
+ ```json
64
+ {
65
+ ...
66
+ "data": {
67
+ "github_kit": {
68
+ "status": {
69
+ "repository": REPOSITORY_FULL_NAME,
70
+ "reference": COMMIT_SHA,
71
+ "state": STATE,
72
+ "extras": {
73
+ "description": DESCRIPTION_TEXT,
74
+ "target_url": STATUS_URL
75
+ }
76
+ }
77
+ }
78
+ }
79
+ ...
80
+ }
81
+ ```
82
+
83
+ # Info
84
+
85
+ * Repository: https://github.com/carnivore-rb/jackal-github-kit
86
+ * IRC: Freenode @ #carnivore
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
2
+ require 'jackal-github-kit/version'
3
+ Gem::Specification.new do |s|
4
+ s.name = 'jackal-github-kit'
5
+ s.version = Jackal::GithubKit::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-kit'
10
+ s.description = 'GitHub interaction helper'
11
+ s.require_path = 'lib'
12
+ s.license = 'Apache 2.0'
13
+ s.add_dependency 'jackal'
14
+ s.add_dependency 'octokit'
15
+ s.files = Dir['lib/**/*'] + %w(jackal-github-kit.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
16
+ end
@@ -0,0 +1,9 @@
1
+ require 'jackal'
2
+
3
+ module Jackal
4
+ module GithubKit
5
+ autoload :Hubber, 'jackal-github-kit/hubber'
6
+ end
7
+ end
8
+
9
+ require 'jackal-github-kit/version'
@@ -0,0 +1,118 @@
1
+ require 'jackal-github-kit'
2
+
3
+ module Jackal
4
+ module GithubKit
5
+ class Hubber < Callback
6
+
7
+ # Setup callback
8
+ def setup(*_)
9
+ require 'octokit'
10
+ end
11
+
12
+ # Determine validity of message
13
+ #
14
+ # @param message [Carnivore::Message]
15
+ # @return [Truthy, Falsey]
16
+ def valid?(message)
17
+ super do |payload|
18
+ payload.get(:data, :github_kit, :commit_comment) ||
19
+ payload.get(:data, :github_kit, :status)
20
+ end
21
+ end
22
+
23
+ # @return [Octokit::Client]
24
+ def github_client
25
+ memoize(:github_client) do
26
+ gh_conf = {
27
+ :access_token => config.fetch(:github, :access_token,
28
+ app_config.get(:github, :access_token)
29
+ )
30
+ }
31
+ Octokit::Client.new(gh_conf)
32
+ end
33
+ end
34
+
35
+ # Add comment to GitHub commit SHA
36
+ #
37
+ # @param message [Carnivore::Message]
38
+ def execute(message)
39
+ failure_wrap(message) do |payload|
40
+ write_release(payload) if payload.get(:data, :github_kit, :release)
41
+ write_commit_comment(payload) if payload.get(:data, :github_kit, :commit_comment)
42
+ write_status(payload) if payload.get(:data, :github_kit, :status)
43
+ job_completed(:github_kit, payload, message)
44
+ end
45
+ end
46
+
47
+ # Write comment to GitHub SHA reference
48
+ #
49
+ # @param payload [Smash]
50
+ # @return [TrueClass]
51
+ def write_commit_comment(payload)
52
+ comment = payload[:data][:github_kit].delete(:commit_comment)
53
+ info 'Writing commit comment to GitHub'
54
+ debug "GitHub commit comment: #{comment.inspect}"
55
+ github_client.create_commit_comment(
56
+ comment[:repository],
57
+ comment[:reference],
58
+ comment[:message]
59
+ )
60
+ true
61
+ end
62
+
63
+ # Write status of pull request to github
64
+ #
65
+ # @param payload [Smash]
66
+ # @return [TrueClass]
67
+ def write_status(payload)
68
+ status = payload[:data][:github_kit].delete(:status)
69
+ info 'Writing repository status to GitHub'
70
+ debug "GitHub repository status: #{status.inspect}"
71
+ github_client.create_status(
72
+ status[:repository],
73
+ status[:reference],
74
+ status[:state].to_sym,
75
+ status.fetch(:extras, Smash.new)
76
+ )
77
+ true
78
+ end
79
+
80
+ # Write release to github
81
+ #
82
+ # @param payload [Smash]
83
+ # @return [TrueClass]
84
+ def write_release(payload)
85
+ info 'Creating new release on GitHub'
86
+ rel = payload[:data][:github_kit].delete(:release)
87
+ release = github_client.create_release(
88
+ rel[:repository],
89
+ rel[:tag_name],
90
+ :name => rel[:name],
91
+ :target_commitish => rel[:reference],
92
+ :prerelease => rel[:prerelease],
93
+ :body => rel[:body]
94
+ )
95
+
96
+ api_release_url = release.rels[:self].href
97
+ public_release_url = release.rels[:html].href
98
+
99
+ info 'New release created on GitHub. Uploading assets.'
100
+ rel[:assets].each do |asset|
101
+ debug "Uploading release asset - #{asset}"
102
+ github_client.upload_asset(
103
+ api_release_url,
104
+ asset_store.get(asset),
105
+ :name => asset.sub(/^.+?_/, ''),
106
+ :content_type => 'application/octet-stream'
107
+ )
108
+ debug "Completed release asset upload - #{asset}"
109
+ end
110
+
111
+ payload.set(:data, :github_kit, :release, :api_url, api_release_url)
112
+ payload.set(:data, :github_kit, :release, :public_url, public_release_url)
113
+ true
114
+ end
115
+
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,6 @@
1
+ module Jackal
2
+ module GithubKit
3
+ # Current library version
4
+ VERSION = Gem::Version.new('0.1.0')
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jackal-github-kit
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: octokit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: GitHub interaction 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-kit.gemspec
52
+ - lib/jackal-github-kit.rb
53
+ - lib/jackal-github-kit/hubber.rb
54
+ - lib/jackal-github-kit/version.rb
55
+ homepage: https://github.com/carnivore-rb/jackal-github-kit
56
+ licenses:
57
+ - Apache 2.0
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.2.2
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Message processing helper
79
+ test_files: []
80
+ has_rdoc: