grache 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d2581108cdc9537dc91583fc19b49968c5123657
4
- data.tar.gz: 3d3feef79badf2ff6fbbdc57031e71e4dd56c008
3
+ metadata.gz: 142a17fd6cc7a443f637a087f01faf5dd7ffc552
4
+ data.tar.gz: 7b3552ad7ec801b4ca19ba114195d25732eeed92
5
5
  SHA512:
6
- metadata.gz: 35438362382c35948695e7af64d61fde442f51173a48ec89c3a2554fad5dcab567023f55199488da8b8c67e7950d254f0ec27bd6d5b08c961c0a451447985849
7
- data.tar.gz: 04257ee2e7eebbcb552873e53c3d51d258c7c6bafe38a15cb6633e75bac51a8c08bab35be9a8f34eeee154daa18a3d4457b3306fd51a70cfefcfe188f07bb3cc
6
+ metadata.gz: 2dcc4af2a35bf18a5e126fa8fc8698c5fd44f06d01407ee7ed54ebab5dadbff22b3e9841bd0cdd8343e7e2e6b95fc3ed0effa0e9fa1d8835039471dcaef3d809
7
+ data.tar.gz: 0e1c8911b4b5a04b9620042be45f3906dd2d154e16ffe9849d2acede29f35b7aa5ee81ea6bef940a3221121ad3b61f4f450fa822ac044e09cefd2209622d90bb
data/TODO.md ADDED
@@ -0,0 +1,4 @@
1
+ # TODO
2
+
3
+ List of things to ... do? ;-)
4
+
@@ -4,6 +4,6 @@
4
4
  require_relative 'grache/version'
5
5
 
6
6
  # Modules
7
- require_relative 'grache/cli/cli'
7
+ # require_relative 'grache/cli/cli'
8
8
  require_relative 'grache/packer/packer'
9
9
  require_relative 'grache/zip/zip'
@@ -31,5 +31,39 @@ Grache::CLI.module_eval do
31
31
  Grache::Packer.new.zip
32
32
  end
33
33
  end
34
+
35
+ c.desc 'Deploy created pack'
36
+ c.command :deploy do |cmd|
37
+ cmd.desc 'AWS S3 Access Key Id'
38
+ cmd.default_value nil
39
+ cmd.flag 'access-key-id'
40
+
41
+ cmd.desc 'AWS S3 Secret Access Key'
42
+ cmd.default_value nil
43
+ cmd.flag 'secret-access-key'
44
+
45
+ cmd.action do |global_options, options, _args|
46
+ opts = options.merge(global_options)
47
+
48
+ access_key_id = opts['access-key-id']
49
+ secret_access_key = opts['secret-access-key']
50
+
51
+ Grache::Packer.new.deploy({access_key_id: access_key_id, secret_access_key: secret_access_key })
52
+ end
53
+ end
54
+
55
+ c.desc 'Release pack - build, zip, deploy'
56
+ c.command :release do |cmd|
57
+ cmd.action do |global_options, options, _args|
58
+ _opts = options.merge(global_options)
59
+
60
+ ['pack build', 'pack zip', 'pack deploy'].each do |act|
61
+ act_cmd = "#{$0} #{act}"
62
+ system(act_cmd)
63
+ end
64
+
65
+ # Grache::Packer.new.install
66
+ end
67
+ end
34
68
  end
35
69
  end
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require 'aws-sdk'
3
4
  require 'digest'
4
5
  require 'fileutils'
5
6
  require 'json'
@@ -17,6 +18,8 @@ require_relative '../zip/zip'
17
18
 
18
19
  module Grache
19
20
  class Packer
21
+ GEMFILE_RE = Regexp.new(/^\s*gem\s+['"]([^'"]+)['"]\s*,\s*:git\s+=>\s+['"]([^'"]+)['"](\s*,\s*:branch\s+=>\s+['""]([^'"]+)['""])?$/)
22
+
20
23
  DEFAULT_INSTALL_OPTIONS = {
21
24
  }
22
25
 
@@ -41,7 +44,9 @@ module Grache
41
44
  'bundle-pack' => 'bundle pack --gemfile=%s --all',
42
45
 
43
46
  # gemspec path
44
- 'gem-build' => 'gem build %s' # spec path
47
+ 'gem-build' => 'gem build %s', # spec path
48
+
49
+ 'gem-generate-index' => 'gem generate_index'
45
50
  }
46
51
 
47
52
  class << self
@@ -146,6 +151,10 @@ module Grache
146
151
  puts "Gemfile located at #{gemfile}" if gemfile
147
152
  gem_dir = File.dirname(gemfile)
148
153
 
154
+ gemfile = process_gemfile(gemfile)
155
+
156
+ # exit(0)
157
+
149
158
  # TODO: Read gemfile programatically
150
159
  uses_gemspec = File.open(gemfile).read.index(/^gemspec$/) != nil
151
160
  if(uses_gemspec)
@@ -165,14 +174,79 @@ module Grache
165
174
  exec_cmd(cmd)
166
175
  end
167
176
 
168
- cache_dir = File.join(gem_dir, 'vendor')
177
+ cache_dir = File.join(gem_dir, 'vendor', 'cache')
178
+ gems_dir = File.join(gem_dir, 'vendor', 'gems')
179
+
180
+ # Delete cache directory
169
181
  if File.directory?(cache_dir)
170
182
  puts "Deleting cache #{cache_dir}"
171
183
  FileUtils.rm_rf cache_dir
172
184
  end
173
185
 
186
+ FileUtils.mkdir_p cache_dir
187
+
188
+ # Move built gems to cache
189
+ Dir.glob("#{gems_dir}/**/*.gem").each do |gem|
190
+ dest = File.join(cache_dir, File.basename(gem))
191
+ puts "Moving #{gem} -> #{dest}"
192
+ FileUtils.mv(gem, dest)
193
+ end
194
+
195
+ # Pack gems
174
196
  cmd = CMDS['bundle-pack'] % gemfile
175
197
  exec_cmd(cmd)
198
+
199
+ # Generate local gem index, see http://stackoverflow.com/questions/5633939/how-do-i-specify-local-gem-files-in-my-gemfile
200
+ # Dir.chdir(cache_dir) do
201
+ # # Pack gems
202
+ # cmd = CMDS['gem-generate-index'] % gemfile
203
+ # exec_cmd(cmd)
204
+ # end
205
+ end
206
+
207
+ def process_gemfile(gemfile_path)
208
+ new_gemfile = ''
209
+ git_gems = {}
210
+ File.open(gemfile_path, 'r') do |f|
211
+ f.each_line do |l|
212
+ m = GEMFILE_RE.match(l)
213
+ if(m)
214
+ branch = m[4] || 'master'
215
+ new_gemfile += "gem '#{m[1]}', :path => './vendor/gems/#{m[1]}'\n"
216
+ git_gems[m[1]] = {
217
+ :branch => branch,
218
+ :git => m[2]
219
+ }
220
+ else
221
+ new_gemfile += l
222
+ end
223
+ end
224
+ end
225
+ puts new_gemfile
226
+
227
+ gem_dir = File.join(File.dirname(gemfile_path), 'vendor', 'gems')
228
+ FileUtils.mkdir_p gem_dir
229
+ Dir.chdir(gem_dir) do
230
+ git_gems.each do |name, gem|
231
+ FileUtils.rm_rf(name)
232
+ cmd = "git clone #{gem[:git]} #{name}"
233
+ puts cmd
234
+ system cmd
235
+
236
+ Dir.chdir(name) do
237
+ cmd = "git checkout #{gem[:branch]}"
238
+ puts cmd
239
+ system cmd
240
+
241
+ cmd = "gem build *.gemspec"
242
+ system(cmd)
243
+ end
244
+ end
245
+ end
246
+
247
+ new_gemfile_path = "#{gemfile_path}.Generated"
248
+ File.open(new_gemfile_path, 'w') { |file| file.write(new_gemfile) }
249
+ new_gemfile_path
176
250
  end
177
251
 
178
252
  def zip(opts = DEFAULT_ZIP_OPTIONS)
@@ -190,7 +264,8 @@ module Grache
190
264
  return unless gemfile
191
265
 
192
266
  gem_dir = File.dirname(gemfile)
193
- vendor_dir = File.join(gem_dir, 'vendor/')
267
+ gems_dir = File.join(gem_dir, 'gems')
268
+ vendor_dir = File.join(gem_dir, 'vendor')
194
269
 
195
270
  unless File.directory?(vendor_dir)
196
271
  puts "Vendor directory does not exists. Run 'grache pack build' first!"
@@ -203,6 +278,7 @@ module Grache
203
278
  archive = "grache-#{sha}.zip"
204
279
  FileUtils.rm archive, :force => true
205
280
 
281
+ # ZipGenerator.new(gems_dir, archive).write
206
282
  ZipGenerator.new(vendor_dir, archive).write
207
283
 
208
284
  puts "Created #{archive}"
@@ -210,6 +286,30 @@ module Grache
210
286
  end
211
287
 
212
288
 
289
+ def deploy(opts = {access_key_id: nil, secret_access_key: nil})
290
+ bucket_name = 'gdc-ms-grache'
291
+
292
+ access_key_id = opts[:access_key_id]
293
+ if access_key_id.nil?
294
+ print 'Access Key ID? '
295
+ access_key_id = $stdin.gets.chomp
296
+ end
297
+
298
+ secret_access_key = opts[:secret_access_key]
299
+ if secret_access_key.nil?
300
+ print 'Secret access key? '
301
+ secret_access_key = $stdin.gets.chomp
302
+ end
303
+
304
+ s3 = AWS::S3.new(:access_key_id => access_key_id, :secret_access_key => secret_access_key)
305
+
306
+ Dir.glob("**/grache-*.zip").each do |grache_file|
307
+ key = File.basename(grache_file)
308
+ s3.buckets[bucket_name].objects[key].write(:file => grache_file)
309
+ puts "Uploading file #{grache_file} to bucket #{bucket_name}."
310
+ end
311
+ end
312
+
213
313
  def find_gemfile(path)
214
314
  Packer.find_gemfile(path)
215
315
  end
@@ -0,0 +1,50 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'bundler/cli'
4
+ require 'fileutils'
5
+
6
+ require_relative 'core'
7
+
8
+ $SCRIPT_PARAMS ||= {}
9
+
10
+ FETCH_GEMS = $SCRIPT_PARAMS['FETCH_GEMS'] || true
11
+
12
+ repo_gems = [
13
+ 'https://github.com/korczis/grache/archive/master.zip'
14
+ ]
15
+
16
+ if FETCH_GEMS
17
+ repo_gems.each do |repo_gem|
18
+ cmd = "curl -LOk --retry 3 #{repo_gem} 2>&1"
19
+ puts cmd
20
+ system(cmd)
21
+
22
+ repo_gem_file = repo_gem.split('/').last
23
+
24
+ cmd = "unzip -o #{repo_gem_file} 2>&1"
25
+ puts cmd
26
+ system(cmd)
27
+
28
+ FileUtils.rm repo_gem_file
29
+ end
30
+ end
31
+
32
+ grash('cp -a grache-master/lib/* .')
33
+
34
+ require_relative 'grache'
35
+
36
+ puts "Grache::VERSION = #{Grache::VERSION}"
37
+
38
+ # Fetch grache pack
39
+ Grache::Packer.new.install
40
+
41
+ Grache::Packer.new.install()
42
+ Bundler::CLI.new.invoke(:install, [], :gemfile => 'Gemfile', :local => true, :deployment => true, :verbose => true, :binstubs => './bin')
43
+ # require 'bundler/setup'
44
+
45
+ grash('cat .bundle/config')
46
+
47
+ # Show installed gems
48
+ Bundler::CLI.new.invoke(:show, [], :verbose => true)
49
+
50
+ require_relative './main.rb'
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Grache
4
- VERSION = '0.0.11'
4
+ VERSION = '0.0.12'
5
5
  end
@@ -23,16 +23,20 @@ module Grache
23
23
  end
24
24
 
25
25
  # Zip the input directory.
26
- def write()
27
- entries = Dir.entries(@inputDir); entries.delete('.'); entries.delete('..')
26
+ def write(root = '')
27
+ entries = Dir.entries(@inputDir)
28
+ entries.delete('.')
29
+ entries.delete('..')
30
+
28
31
  io = Zip::File.open(@outputFile, Zip::File::CREATE);
29
- writeEntries(entries, '', io)
32
+ writeEntries(entries, '', io, root)
30
33
  io.close();
31
34
  end
32
35
 
33
36
  # A helper method to make the recursion work.
34
37
  private
35
- def writeEntries(entries, path, io)
38
+
39
+ def writeEntries(entries, path, io, root = '')
36
40
  entries.each { |e|
37
41
  zipFilePath = path == '' ? e : File.join(path, e)
38
42
  diskFilePath = File.join(@inputDir, zipFilePath)
@@ -40,10 +44,18 @@ module Grache
40
44
 
41
45
  if File.directory?(diskFilePath)
42
46
  io.mkdir(zipFilePath)
43
- subdir =Dir.entries(diskFilePath); subdir.delete('.'); subdir.delete('..')
47
+
48
+ subdir = Dir.entries(diskFilePath)
49
+ subdir.delete('.')
50
+ subdir.delete('..')
51
+
44
52
  writeEntries(subdir, zipFilePath, io)
45
53
  else
46
- io.get_output_stream(zipFilePath) { |f| f.print(File.open(diskFilePath, 'rb').read()) }
54
+ iop = root.empty? ? zipFilePath : File.join(root, zipFilePath)
55
+ # puts "IOP: #{iop}"
56
+ io.get_output_stream(iop) do |f|
57
+ f.print(File.open(diskFilePath, 'rb').read())
58
+ end
47
59
  end
48
60
  }
49
61
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Korcak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-11 00:00:00.000000000 Z
11
+ date: 2015-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coveralls
@@ -464,6 +464,7 @@ files:
464
464
  - LICENSE
465
465
  - README.md
466
466
  - Rakefile
467
+ - TODO.md
467
468
  - bin/grache
468
469
  - lib/grache.rb
469
470
  - lib/grache/bundler/bundler.rb
@@ -473,6 +474,7 @@ files:
473
474
  - lib/grache/cli/hooks.rb
474
475
  - lib/grache/cli/shared.rb
475
476
  - lib/grache/packer/packer.rb
477
+ - lib/grache/templates/stub.rb.erb
476
478
  - lib/grache/version.rb
477
479
  - lib/grache/zip/zip.rb
478
480
  - lib/grache/zip/zip_generator.rb