github_make_triage 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: fb15fb5e47747d2cd266e0be6a7a9c8c411dd87d
4
+ data.tar.gz: d51114b18ede545f2278abf9ccb5d1f0e4bb3e96
5
+ SHA512:
6
+ metadata.gz: d299bc9cdc2cf1ef8ddffe849f3f065d4c7e369da11497102cb40f6f1bc407f40db7bb33ef37490e9fa383a1c39f5d83b77b5af7e5afff98d600b67a19b9ada4
7
+ data.tar.gz: 5b1171b11f801526b2585abddd9c97ca717c221b29d533f5c95f59df783371c1837630cf6578003d2d664a45a1052056c107d1a95f275f4a40364466d6259327
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 Tallwave
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # GitHub Triage Project Maker
2
+
3
+ [![Circle CI](https://circleci.com/gh/Tallwave/github_make_triage.svg?style=shield&circle-token=:circle-token)](https://circleci.com/gh/Tallwave/github_make_triage) [![Code Climate](https://codeclimate.com/github/Tallwave/github_make_triage/badges/gpa.svg)](https://codeclimate.com/github/Tallwave/github_make_triage)
4
+
5
+ DESCRIPTION
6
+
7
+ ## Installation
8
+
9
+ ## Usage
10
+
11
+ ## Contributing
12
+
13
+ * Fork
14
+ * Make it better
15
+ * Create a Pull Request
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby -W
2
+ # Copyright (c) 2017 Tallwave
3
+
4
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
5
+
6
+ require "make_triage/cli"
7
+
8
+ module MakeTriage
9
+ class Command
10
+ include CLI
11
+
12
+ def about
13
+ VERSION
14
+ end
15
+
16
+ def usage
17
+ <<HERE
18
+ Create a basic template in a GitHub project for bug triage.
19
+
20
+ Usage: #{$PROGRAM_NAME} [OPTION]... [OWNER] [REPO] [TOKEN]
21
+
22
+ Example: #{$PROGRAM_NAME} tallwave my_project abcdef
23
+
24
+ -h, --help display this help and exit
25
+ --version display the version
26
+
27
+ HERE
28
+
29
+ end
30
+
31
+ def correct_number_of_args(arg_count)
32
+ arg_count == 3
33
+ end
34
+
35
+ def process_input(arg, index)
36
+ case index
37
+ when 0
38
+ @owner = arg
39
+ when 1
40
+ @repo = arg
41
+ when 2
42
+ @token = arg
43
+ end
44
+ end
45
+
46
+ def define_options(options)
47
+ end
48
+
49
+ def perform_action
50
+ builder = MakeTriage::ProjectBuilder.new(@owner, @repo, @token)
51
+ builder.make
52
+ end
53
+ end
54
+ end
55
+
56
+ MakeTriage::Command.new.run
@@ -0,0 +1,21 @@
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/lib')
2
+
3
+ require 'make_triage'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'github_make_triage'
7
+ s.version = MakeTriage::VERSION
8
+ s.required_ruby_version = '>= 2.0'
9
+ s.summary = 'Create a Triage Workflow in a GitHub Project'
10
+ s.description = <<-HERE
11
+ Create a Triage Workflow in a GitHub Project
12
+ HERE
13
+ s.license = 'MIT'
14
+ s.author = 'Scott Williams'
15
+ s.email = 'scott@swilliams.me'
16
+ s.homepage = 'https://github.com/Tallwave/github_make_triage'
17
+ s.files = Dir['{bin,lib}/**/*'] + ['github_make_triage.gemspec']
18
+ s.executables = ['make-triage-project']
19
+ s.extra_rdoc_files = ['LICENSE', 'README.md']
20
+ s.require_paths = ['lib']
21
+ end
@@ -0,0 +1,11 @@
1
+ # Copyright (c) 2017 Tallwave
2
+
3
+ require "English"
4
+ require "shellwords"
5
+ require "json"
6
+ require "make_triage/github"
7
+ require "make_triage/error_handler"
8
+ require "make_triage/default_columns"
9
+ require "make_triage/project_builder"
10
+ require "make_triage/error"
11
+ require "make_triage/version"
@@ -0,0 +1,38 @@
1
+ # Copyright (c) 2017 Tallwave
2
+
3
+ require "optparse"
4
+ require "make_triage"
5
+
6
+ module MakeTriage
7
+ module CLI
8
+
9
+ def run
10
+ begin
11
+ OptionParser.new do |opts|
12
+ define_options opts
13
+ opts.on "-h", "--help" do
14
+ puts usage
15
+ exit
16
+ end
17
+
18
+ opts.on "--version" do
19
+ puts about
20
+ exit
21
+ end
22
+
23
+ end.parse!
24
+ rescue OptionParser::ParseError => e
25
+ raise UsageError, e
26
+ end
27
+
28
+ fail UsageError, "missing argument" if ARGV.empty?
29
+ fail UsageError, "incorrect number of arguments" unless correct_number_of_args ARGV.count
30
+ ARGV.each_with_index { |arg, index| process_input arg, index }
31
+ perform_action()
32
+
33
+ rescue UsageError => e
34
+ puts "#{$PROGRAM_NAME}: #{e}\nTry `#{$PROGRAM_NAME} --help` for more information."
35
+ exit false
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ module MakeTriage
2
+ def self.default_columns
3
+ [
4
+ "Received",
5
+ "Triaged",
6
+ "Scheduled",
7
+ "In Progress",
8
+ "Ready for Test",
9
+ "Testing",
10
+ "Ready to Deploy",
11
+ "Done"
12
+ ]
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ # Copyright (c) 2017 Tallwave
2
+
3
+ module MakeTriage
4
+ class UsageError < RuntimeError
5
+ end
6
+ end
@@ -0,0 +1,23 @@
1
+ module MakeTriage
2
+ class ErrorHandler
3
+ def response_has_error(response)
4
+ response.code.to_i > 299
5
+ end
6
+
7
+ def error_message(response_text)
8
+ response_object = JSON.parse response_text
9
+ if response_object.is_a? Hash
10
+ response_object["message"]
11
+ end
12
+ end
13
+
14
+ def handle_error(error_message, should_abort = true)
15
+ msg = "ERROR: #{error_message}"
16
+ if should_abort
17
+ abort msg
18
+ else
19
+ puts msg
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,38 @@
1
+ require "open-uri"
2
+
3
+ module MakeTriage
4
+ def self.project_url
5
+ "https://api.github.com/repos/%s/%s/projects?access_token=%s"
6
+ end
7
+
8
+ def self.column_url
9
+ "https://api.github.com/projects/%s/columns?access_token=%s"
10
+ end
11
+
12
+ def self.make_project_url(*args)
13
+ url_format = MakeTriage.project_url
14
+ url_format % args
15
+ end
16
+
17
+ def self.make_column_url(*args)
18
+ url_format = MakeTriage.column_url
19
+ url_format % args
20
+ end
21
+
22
+ def self.make_project_uri(owner, repo, token)
23
+ URI.parse MakeTriage.make_project_url(owner, repo, token)
24
+ end
25
+
26
+ def self.make_column_uri(project_id, token)
27
+ URI.parse MakeTriage.make_column_url(project_id, token)
28
+ end
29
+
30
+ def self.turn_options_into_querystring(options)
31
+ querystring = ''
32
+ options.each do |k, v|
33
+ escaped_k, escaped_v = URI::encode(k), URI::encode(v)
34
+ querystring += "#{escaped_k}=#{escaped_v}&"
35
+ end
36
+ querystring.chop
37
+ end
38
+ end
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2017 Tallwave
2
+
3
+ require "net/http"
4
+ require "json"
5
+
6
+ module MakeTriage
7
+ class ProjectBuilder
8
+
9
+ attr_accessor :outputter
10
+
11
+ def initialize(owner, repo, token = nil)
12
+ @owner = owner
13
+ @repo = repo
14
+ @token = token
15
+ end
16
+
17
+ def make
18
+ new_project_id = create_project 'Bug Tracking', 'Issue tracking and triage board'
19
+ if new_project_id
20
+ create_columns new_project_id, MakeTriage.default_columns
21
+ end
22
+ end
23
+
24
+ private
25
+ def create_project(name, description)
26
+ uri = MakeTriage.make_project_uri @owner, @repo, @token
27
+ payload = {
28
+ "name" => name,
29
+ "body" => description
30
+ }
31
+ http = Net::HTTP.new(uri.host, uri.port)
32
+ http.use_ssl = true if uri.scheme == "https"
33
+ req = Net::HTTP::Post.new uri.request_uri
34
+ req.content_type = "application/json"
35
+ req.add_field "Accept", "application/vnd.github.inertia-preview+json"
36
+ req.body = payload.to_json
37
+ response = handle_response http.request(req)
38
+ return retrieve_id(response) unless response == false
39
+ end
40
+
41
+ def create_columns(project_id, columns)
42
+ columns.each { |column_name| create_column(project_id, column_name) }
43
+ end
44
+
45
+ def create_column(project_id, column_name)
46
+ uri = MakeTriage.make_column_uri project_id, @token
47
+ payload = {
48
+ "name" => column_name
49
+ }
50
+ http = Net::HTTP.new(uri.host, uri.port)
51
+ http.use_ssl = true if uri.scheme == "https"
52
+ req = Net::HTTP::Post.new uri.request_uri
53
+ req.content_type = "application/json"
54
+ req.add_field "Accept", "application/vnd.github.inertia-preview+json"
55
+ req.body = payload.to_json
56
+ return handle_response http.request(req)
57
+ end
58
+
59
+ def handle_response(response)
60
+ error_handler = ErrorHandler.new
61
+ if error_handler.response_has_error response
62
+ error_handler.handle_error error_handler.error_message(response.body), true
63
+ return false
64
+ end
65
+ return response.body
66
+ end
67
+
68
+ def retrieve_id(body)
69
+ response_obj = JSON.parse(body)
70
+ response_obj["id"]
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,5 @@
1
+ # Copyright (c) 2017 Tallwave
2
+
3
+ module MakeTriage
4
+ VERSION = "0.1.0"
5
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: github_make_triage
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Scott Williams
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-09 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ Create a Triage Workflow in a GitHub Project
15
+ email: scott@swilliams.me
16
+ executables:
17
+ - make-triage-project
18
+ extensions: []
19
+ extra_rdoc_files:
20
+ - LICENSE
21
+ - README.md
22
+ files:
23
+ - LICENSE
24
+ - README.md
25
+ - bin/make-triage-project
26
+ - github_make_triage.gemspec
27
+ - lib/make_triage.rb
28
+ - lib/make_triage/cli.rb
29
+ - lib/make_triage/default_columns.rb
30
+ - lib/make_triage/error.rb
31
+ - lib/make_triage/error_handler.rb
32
+ - lib/make_triage/github.rb
33
+ - lib/make_triage/project_builder.rb
34
+ - lib/make_triage/version.rb
35
+ homepage: https://github.com/Tallwave/github_make_triage
36
+ licenses:
37
+ - MIT
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 2.2.2
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: Create a Triage Workflow in a GitHub Project
59
+ test_files: []