waff 0.0.2
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/bin/config.rb +30 -0
- data/bin/core.rb +5 -0
- data/bin/helper.rb +5 -0
- data/bin/issue.rb +43 -0
- data/bin/local_repository.rb +8 -0
- data/bin/repository.rb +64 -0
- data/bin/waff.rb +100 -0
- metadata +66 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0efb147c1582e77b6b80de8e4cad702e5f66b3a9d7ddc7c9711f035d7477cdfe
|
4
|
+
data.tar.gz: 6bf40532d58191a2730b57212236c1091fc41fe70c1147a26a6febc473a55ef2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 893120b15ec204bc7841c3df4d9d44fa8f3df1607c4388ed68e7fee23c1539c8e27968a39997b288a157ecdf76767c26aded0eceaf032c05fd31235808318a5e
|
7
|
+
data.tar.gz: 463c6e9352c8a67b750b14cefec0b4807a2740d4063f4ec0fa8b502e8e33311a2e3b7799a733bc3d0d2681d6fa937a1cfac4fe98902d0e329ff8b50e19c16c71
|
data/bin/config.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
class Config
|
2
|
+
REMOTE_NOT_FOUND = <<-EOF
|
3
|
+
Can't find owner and repository. Make sure the remote name is correctly set on the configuration file.
|
4
|
+
EOF
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def user
|
8
|
+
config['user']
|
9
|
+
end
|
10
|
+
|
11
|
+
def token
|
12
|
+
config['token']
|
13
|
+
end
|
14
|
+
|
15
|
+
def remote
|
16
|
+
config['remote']
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_owner_and_repo
|
20
|
+
url = `git config --get remote.#{remote}.url`.strip
|
21
|
+
url[/:(.*)\.git/, 1] || raise(REMOTE_NOT_FOUND)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def config
|
27
|
+
@config ||= YAML.load_file(CONFIG_FILE)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/bin/core.rb
ADDED
data/bin/helper.rb
ADDED
data/bin/issue.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
class Issue
|
2
|
+
attr_reader :repository, :number, :title, :labels, :body
|
3
|
+
|
4
|
+
def initialize(repository, data)
|
5
|
+
@repository = repository
|
6
|
+
@number = data['number']
|
7
|
+
@title = data['title']
|
8
|
+
@body = data['body']
|
9
|
+
parse_labels data
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_local_branch!
|
13
|
+
branch_name = "##{number}-#{Helper.slug title}"
|
14
|
+
puts "Creating branch #{branch_name}"
|
15
|
+
`git checkout -b '#{branch_name}'`
|
16
|
+
end
|
17
|
+
|
18
|
+
def assign_to_self!
|
19
|
+
repository.assign_issue number
|
20
|
+
end
|
21
|
+
|
22
|
+
def mark_in_progress!
|
23
|
+
labels.delete 'ready'
|
24
|
+
labels.delete 'to do'
|
25
|
+
labels << 'in progress'
|
26
|
+
|
27
|
+
repository.export_labels self
|
28
|
+
end
|
29
|
+
|
30
|
+
def mark_ready!
|
31
|
+
labels << 'ready'
|
32
|
+
labels << 'to do'
|
33
|
+
labels.delete 'in progress'
|
34
|
+
|
35
|
+
repository.export_labels self
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def parse_labels(data)
|
41
|
+
@labels = data['labels'].map { |label| label['name'] }
|
42
|
+
end
|
43
|
+
end
|
data/bin/repository.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
class Repository
|
2
|
+
include HTTParty
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@user = Config.user
|
6
|
+
@token = Config.token
|
7
|
+
@owner_and_repo = Config.get_owner_and_repo
|
8
|
+
|
9
|
+
self.class.basic_auth @user, @token
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_issue(number)
|
13
|
+
response = self.class.get github_url ['issues', number]
|
14
|
+
|
15
|
+
if response.success?
|
16
|
+
Issue.new(self, JSON.parse(response.body))
|
17
|
+
else
|
18
|
+
puts 'ERROR requesting issue'
|
19
|
+
puts response.body
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def assign_issue(number)
|
24
|
+
url = github_url ['issues', number, 'assignees']
|
25
|
+
response = self.class.post url, body: { assignees: [@user] }.to_json
|
26
|
+
if response.success?
|
27
|
+
puts "Successfully assigned issue ##{number} to #{@user}."
|
28
|
+
else
|
29
|
+
puts 'ERROR assigning user to issue'
|
30
|
+
puts response.body
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def export_labels issue
|
35
|
+
url = github_url ['issues', issue.number, 'labels']
|
36
|
+
response = self.class.put url, body: issue.labels.to_json
|
37
|
+
if response.success?
|
38
|
+
puts "Successfully assigned #{issue.labels.inspect} labels to ##{issue.number}"
|
39
|
+
else
|
40
|
+
puts 'ERROR setting issue labels'
|
41
|
+
puts response.body
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_open_issues label
|
46
|
+
response = self.class.get github_url(['issues']), query: { labels: label }
|
47
|
+
|
48
|
+
if response.success?
|
49
|
+
issues_data = JSON.parse response.body
|
50
|
+
issues_data.reject! { |data| data['pull_request'] }
|
51
|
+
issues_data.map { |data| Issue.new(self, data) }
|
52
|
+
else
|
53
|
+
puts 'ERROR requesting open issues'
|
54
|
+
puts response.body
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def github_url(nodes)
|
61
|
+
subpath = nodes.join '/'
|
62
|
+
"https://api.github.com/repos/#{@owner_and_repo}/" + subpath
|
63
|
+
end
|
64
|
+
end
|
data/bin/waff.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
require 'httparty'
|
5
|
+
require_relative 'core.rb'
|
6
|
+
|
7
|
+
CONFIG_FILE = '.waff.yml'
|
8
|
+
EXCLUDE_FILE = '.git/info/exclude'
|
9
|
+
|
10
|
+
HELP_TEXT = <<-EOF
|
11
|
+
Usage:
|
12
|
+
|
13
|
+
waff [command] [params]
|
14
|
+
|
15
|
+
Commands:
|
16
|
+
|
17
|
+
waff list -- Shows ready and in progress issues
|
18
|
+
waff show -- Shows description of current issue (determined by current branch)
|
19
|
+
waff show number -- Shows description of a given issue
|
20
|
+
waff take number -- Sets the issue in progress, assigns it to yourself, and creates a branch for it
|
21
|
+
waff pause number -- Sets the issue to ready state
|
22
|
+
EOF
|
23
|
+
|
24
|
+
def init_config
|
25
|
+
unless File.exist?(CONFIG_FILE)
|
26
|
+
puts "No config file detected (#{CONFIG_FILE}). Will generate one now in current directory."
|
27
|
+
print 'Github username: '
|
28
|
+
user = $stdin.gets
|
29
|
+
print 'Github password/personal token: '
|
30
|
+
token = $stdin.gets
|
31
|
+
print 'Git remote (leave empty for "origin"): '
|
32
|
+
remote = $stdin.gets.strip
|
33
|
+
remote = remote.empty? ? 'origin' : remote
|
34
|
+
|
35
|
+
# Write config file
|
36
|
+
File.open(CONFIG_FILE, 'w') do |file|
|
37
|
+
file.puts "user: #{user}"
|
38
|
+
file.puts "token: #{token}"
|
39
|
+
file.puts "remote: #{remote}"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Write exclude file
|
43
|
+
FileUtils.mkdir_p(File.dirname(EXCLUDE_FILE))
|
44
|
+
File.open(EXCLUDE_FILE, 'a+') do |file|
|
45
|
+
unless file.read =~ /^#{CONFIG_FILE}$/
|
46
|
+
file.puts CONFIG_FILE
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def check_local_repository_exists
|
54
|
+
unless File.exist?('.git')
|
55
|
+
puts 'No git repository found. Please move to the root of your project.'
|
56
|
+
exit
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
check_local_repository_exists
|
61
|
+
init_config
|
62
|
+
|
63
|
+
|
64
|
+
command = ARGV[0]
|
65
|
+
issue_number = ARGV[1]
|
66
|
+
repo = Repository.new
|
67
|
+
|
68
|
+
case command
|
69
|
+
when 'take'
|
70
|
+
issue = repo.get_issue issue_number
|
71
|
+
issue.create_local_branch!
|
72
|
+
issue.assign_to_self!
|
73
|
+
issue.mark_in_progress!
|
74
|
+
when 'pause'
|
75
|
+
issue = repo.get_issue issue_number
|
76
|
+
issue.mark_ready!
|
77
|
+
when 'list'
|
78
|
+
ready_issues = repo.get_open_issues 'ready'
|
79
|
+
ready_issues += repo.get_open_issues 'to do'
|
80
|
+
puts "Ready: \n\n"
|
81
|
+
ready_issues.each do |issue|
|
82
|
+
puts "##{issue.number}\t #{issue.title}"
|
83
|
+
end
|
84
|
+
puts
|
85
|
+
|
86
|
+
in_progress_issues = repo.get_open_issues 'in progress'
|
87
|
+
puts "In progress: \n\n"
|
88
|
+
in_progress_issues.each do |issue|
|
89
|
+
puts "##{issue.number}\t #{issue.title}"
|
90
|
+
end
|
91
|
+
puts
|
92
|
+
when 'show'
|
93
|
+
issue_number ||= LocalRepository.current_issue_number
|
94
|
+
issue_number || raise('No issue number given as argument or found as current branch')
|
95
|
+
issue = repo.get_issue issue_number
|
96
|
+
puts "##{issue.number}\t #{issue.title}\n\n"
|
97
|
+
puts issue.body
|
98
|
+
else
|
99
|
+
puts HELP_TEXT
|
100
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: waff
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Armando Andini
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-07-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.16'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.16'
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
- armando.andini@gmail.com
|
30
|
+
executables:
|
31
|
+
- waff.rb
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- bin/config.rb
|
36
|
+
- bin/core.rb
|
37
|
+
- bin/helper.rb
|
38
|
+
- bin/issue.rb
|
39
|
+
- bin/local_repository.rb
|
40
|
+
- bin/repository.rb
|
41
|
+
- bin/waff.rb
|
42
|
+
homepage: https://github.com/antico5/waff
|
43
|
+
licenses:
|
44
|
+
- MIT
|
45
|
+
metadata: {}
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 2.7.3
|
63
|
+
signing_key:
|
64
|
+
specification_version: 4
|
65
|
+
summary: Helps you with github flow based on Waffle tool
|
66
|
+
test_files: []
|