knife-github 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDViMjMxNGQzYTkxODBmMzM2MTI2ZjVkYmFkNmRmNjMyNjEzZjE2MA==
5
+ data.tar.gz: !binary |-
6
+ NDk3NTRkOTc1MjYxMzZiZDhlNWJmZThlM2ZlNDNiZDg2MzcxZDBkMw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ N2ZkMTM5OGIxNTRiNDkyMGY2YWMyY2E4NjYxYmU3ZGMyN2FkZWI5YThhYmE3
10
+ MGE4YjhiODIzYTg4ZWE4OTM0NGIzOGY1MGI0NWQ0MjY1MzkwZWM4N2NmMjFk
11
+ YWIzY2Y3ODY2ZjhhNDNlMjQzMzRmYjc3Mzg4ZGU3ZGRiODEwMzI=
12
+ data.tar.gz: !binary |-
13
+ ODllMmI5OTRhNDlhYTNkM2MwNmQ5ODIwNmJjZGZiYjE5MThmY2EwMmRkMDIy
14
+ NzJjNDVkNDk3MGM5YjIzYjZmN2I3ZTdiMjQ4N2JmNjIwMTdhMjliZTllZjFm
15
+ Y2EwZDNkMDJhMzk4NTQ2MWI4YjdjMGRiMTcyNjMwY2JkOWVkOTY=
data/knife-github.gemspec CHANGED
@@ -18,7 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
  s.license = 'Apache 2.0'
21
- s.add_dependency "mixlib-versioning", ">= 1.0.0"
22
- s.add_dependency "highline", ">= 1.6.19"
23
- s.add_dependency "chef", ">= 10.0.0"
21
+ s.add_dependency 'mixlib-versioning', '>= 1.0.0'
22
+ s.add_dependency 'highline', '>= 1.6.19'
23
+ s.add_dependency 'rb-readline', '~> 0.5.1'
24
+ s.add_dependency 'chef', '>= 10.0.0'
24
25
  end
@@ -41,6 +41,7 @@ module KnifeGithubRepoCreate
41
41
  require 'chef/knife/github_base'
42
42
  include Chef::Knife::GithubBase
43
43
  require 'chef/mixin/shell_out'
44
+ require 'readline'
44
45
  end
45
46
 
46
47
  banner "knife github repo create <name> <description> (options)"
@@ -69,7 +70,6 @@ module KnifeGithubRepoCreate
69
70
  # Get the name_args from the command line
70
71
  name = name_args.first
71
72
  name_args.shift
72
- desc = name_args.join(" ")
73
73
 
74
74
  # Get the organization name from config
75
75
  org = locate_config_value('github_organizations').first
@@ -79,10 +79,8 @@ module KnifeGithubRepoCreate
79
79
  exit 1
80
80
  end
81
81
 
82
- if desc.nil? || desc.empty?
83
- Chef::Log.error("Please specify a repository description")
84
- exit 1
85
- end
82
+ desc = get_repo_description
83
+ type = get_repo_type
86
84
 
87
85
  if config[:github_user_repo]
88
86
  url = @github_url + "/api/" + @github_api_version + "/user/repos"
@@ -102,8 +100,7 @@ module KnifeGithubRepoCreate
102
100
  body = get_body_json(name, desc)
103
101
 
104
102
  # Creating the local repository or using existing one.
105
- cookbook_dir = ""
106
- cookbook_dir = get_cookbook_path(name)
103
+ cookbook_dir = get_cookbook_path(name) || ""
107
104
 
108
105
  if File.exists?(cookbook_dir)
109
106
  Chef::Log.debug("Using local repository from #{cookbook_dir}")
@@ -119,16 +116,13 @@ module KnifeGithubRepoCreate
119
116
 
120
117
  puts "Finished creating #{name} and uploading #{cookbook_dir}"
121
118
  else
122
- Chef::Log.debug("Creating the local repository based on template")
123
- create_cookbook(name, @github_tmp)
119
+ Chef::Log.debug("Creating the repository based on #{type} template")
120
+ create_cookbook(name, type, @github_tmp)
124
121
 
125
122
  cookbook_dir = File.join(@github_tmp, name)
126
123
 
127
- # Updating README.md if needed.
128
- update_readme(cookbook_dir)
129
-
130
- # Updateing metadata.rb if needed.
131
- update_metadata(cookbook_dir)
124
+ # Updateing template information if needed.
125
+ update_template_files(name, cookbook_dir, desc)
132
126
 
133
127
  # Creating the github repository
134
128
  Chef::Log.debug("Creating the github repository")
@@ -144,7 +138,56 @@ module KnifeGithubRepoCreate
144
138
  puts "Finished creating and uploading #{name}"
145
139
  end
146
140
  end
141
+
147
142
 
143
+ # User selection on repo description
144
+ # @return [string]
145
+ def get_repo_description
146
+ question = "\nPlease enter a description for the repository: "
147
+
148
+ desc = input question
149
+ if desc.nil? || desc.empty?
150
+ Chef::Log.error("Please enter a repository description")
151
+ get_repo_description
152
+ end
153
+ desc
154
+ end
155
+
156
+ # User selection on repo type
157
+ # @return [string]
158
+ def get_repo_type
159
+ question = "\nPlease select the repository type that you want to create.\n"
160
+ question += " 1 - Empty\n"
161
+ question += " 2 - Cookbook Application\n"
162
+ question += " 3 - Cookbook Wrapper\n"
163
+ question += " 4 - Cookbook Role\n"
164
+ question += "Type: "
165
+
166
+ type = input question
167
+ case type
168
+ when '1'
169
+ return 'empty'
170
+ when '2'
171
+ return "application"
172
+ when '3'
173
+ return "wrapper"
174
+ when '4'
175
+ return "role"
176
+ else
177
+ Chef::Log.error("Please select 1-4 to continue.")
178
+ get_repo_type
179
+ end
180
+ end
181
+
182
+ # Read the commandline input and return the input
183
+ # @param prompt [String] info to prompt to user
184
+
185
+ $stdout.sync = false
186
+ def input(prompt="", newline=true)
187
+ prompt += "\n" if newline
188
+ Readline.readline(prompt).squeeze(" ").strip
189
+ end
190
+
148
191
  # Set the username in README.md
149
192
  # @param cookbook_path [String] cookbook path
150
193
  # github_ssh_url [String] github ssh url from repo
@@ -161,33 +204,29 @@ module KnifeGithubRepoCreate
161
204
  shell_out!("git push -u origin master", :cwd => cookbook_path)
162
205
  end
163
206
 
164
- # Set the username in README.md
207
+ # Update all template files with the right information
165
208
  # @param name [String] cookbook path
166
- def update_readme(cookbook_path)
167
- contents = ''
168
- username = get_username
169
- readme = File.join(cookbook_path, "README.md")
170
- File.foreach(readme) do |line|
171
- line.gsub!(/TODO: List authors/,"#{username}\n")
172
- contents = contents << line
173
- end
174
- File.open(readme, 'w') {|f| f.write(contents) }
175
- return nil
176
- end
177
-
178
- # Set the username and email in metadata.rb
179
- # @param name [String] cookbook path
180
- def update_metadata(cookbook_path)
181
- contents = ''
182
- username = get_username
183
- email = get_useremail
184
- metadata = File.join(cookbook_path, "metadata.rb")
185
- File.foreach(metadata) do |line|
186
- line.gsub!(/YOUR_COMPANY_NAME/,username) if username
187
- line.gsub!(/YOUR_EMAIL/,email) if email
188
- contents = contents << line
209
+ def update_template_files(name, cookbook_path, description)
210
+ files = Dir.glob("#{cookbook_path}/**/*").select{ |e| File.file? e }
211
+ user = get_username || "Your Name"
212
+ email = get_useremail || "Your Email"
213
+ company = "Schuberg Philis"
214
+ year = Time.now.year
215
+ date = Time.now
216
+ files.each do |file|
217
+ contents = ""
218
+ File.foreach(file) do |line|
219
+ line.gsub!(/DESCRIPTION/, description)
220
+ line.gsub!(/COOKBOOK/, name)
221
+ line.gsub!(/COMPANY/, company)
222
+ line.gsub!(/NAME/, user)
223
+ line.gsub!(/EMAIL/, email)
224
+ line.gsub!(/YEAR/, year.to_s)
225
+ line.gsub!(/DATE/, date.to_s)
226
+ contents += line
227
+ end
228
+ File.open(file, 'w') {|f| f.write(contents) }
189
229
  end
190
- File.open(metadata, 'w') {|f| f.write(contents) }
191
230
  return nil
192
231
  end
193
232
 
@@ -213,12 +252,21 @@ module KnifeGithubRepoCreate
213
252
 
214
253
  # Create the cookbook template for upload
215
254
  # @param name [String] cookbook name
255
+ # type [String] type of cookbook
216
256
  # tmp [String] temp location
217
- def create_cookbook(name, tmp)
218
- args = [ name ]
219
- create = Chef::Knife::CookbookCreate.new(args)
220
- create.config[:cookbook_path] = tmp
221
- create.run
257
+ def create_cookbook(name, type, tmp)
258
+ target = File.join(tmp, name)
259
+ template_org = locate_config_value("github_template_org")
260
+ if template_org.nil? || template_org.empty?
261
+ Chef::Log.fatal("Cannot find github_template_org within your configuration")
262
+ else
263
+
264
+ github_url = @github_url.gsub('http://', 'git://') if @github_url =~ /^http:\/\/.*$/
265
+ github_url = @github_url.gsub('https://', 'git://') if @github_url =~ /^https:\/\/.*$/
266
+
267
+ template_path = File.join(github_url, template_org, "chef_template_#{type}.git")
268
+ shell_out!("git clone #{template_path} #{target}") # , :cwd => cookbook_path)
269
+ end
222
270
  end
223
271
 
224
272
  # Create the json body with repo config for POST information
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Github
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
5
- prerelease:
4
+ version: 0.1.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sander Botman
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-03-31 00:00:00.000000000 Z
12
+ date: 2014-11-03 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: mixlib-versioning
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ! '>='
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ! '>='
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: highline
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ! '>='
37
33
  - !ruby/object:Gem::Version
@@ -39,15 +35,27 @@ dependencies:
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ! '>='
45
40
  - !ruby/object:Gem::Version
46
41
  version: 1.6.19
42
+ - !ruby/object:Gem::Dependency
43
+ name: rb-readline
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 0.5.1
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.5.1
47
56
  - !ruby/object:Gem::Dependency
48
57
  name: chef
49
58
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
59
  requirements:
52
60
  - - ! '>='
53
61
  - !ruby/object:Gem::Version
@@ -55,7 +63,6 @@ dependencies:
55
63
  type: :runtime
56
64
  prerelease: false
57
65
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
66
  requirements:
60
67
  - - ! '>='
61
68
  - !ruby/object:Gem::Version
@@ -123,27 +130,25 @@ files:
123
130
  homepage: https://github.com/schubergphilis/knife-github
124
131
  licenses:
125
132
  - Apache 2.0
133
+ metadata: {}
126
134
  post_install_message:
127
135
  rdoc_options: []
128
136
  require_paths:
129
137
  - lib
130
138
  required_ruby_version: !ruby/object:Gem::Requirement
131
- none: false
132
139
  requirements:
133
140
  - - ! '>='
134
141
  - !ruby/object:Gem::Version
135
142
  version: '0'
136
143
  required_rubygems_version: !ruby/object:Gem::Requirement
137
- none: false
138
144
  requirements:
139
145
  - - ! '>='
140
146
  - !ruby/object:Gem::Version
141
147
  version: '0'
142
148
  requirements: []
143
149
  rubyforge_project:
144
- rubygems_version: 1.8.25
150
+ rubygems_version: 2.1.11
145
151
  signing_key:
146
- specification_version: 3
152
+ specification_version: 4
147
153
  summary: Github interaction support for chef's knife cli tool
148
154
  test_files: []
149
- has_rdoc: false