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 +4 -4
- data/TODO.md +4 -0
- data/lib/grache.rb +1 -1
- data/lib/grache/cli/commands/pack_cmd.rb +34 -0
- data/lib/grache/packer/packer.rb +103 -3
- data/lib/grache/templates/stub.rb.erb +50 -0
- data/lib/grache/version.rb +1 -1
- data/lib/grache/zip/zip_generator.rb +18 -6
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 142a17fd6cc7a443f637a087f01faf5dd7ffc552
|
4
|
+
data.tar.gz: 7b3552ad7ec801b4ca19ba114195d25732eeed92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dcc4af2a35bf18a5e126fa8fc8698c5fd44f06d01407ee7ed54ebab5dadbff22b3e9841bd0cdd8343e7e2e6b95fc3ed0effa0e9fa1d8835039471dcaef3d809
|
7
|
+
data.tar.gz: 0e1c8911b4b5a04b9620042be45f3906dd2d154e16ffe9849d2acede29f35b7aa5ee81ea6bef940a3221121ad3b61f4f450fa822ac044e09cefd2209622d90bb
|
data/TODO.md
ADDED
data/lib/grache.rb
CHANGED
@@ -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
|
data/lib/grache/packer/packer.rb
CHANGED
@@ -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
|
-
|
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'
|
data/lib/grache/version.rb
CHANGED
@@ -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)
|
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
|
-
|
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
|
-
|
47
|
+
|
48
|
+
subdir = Dir.entries(diskFilePath)
|
49
|
+
subdir.delete('.')
|
50
|
+
subdir.delete('..')
|
51
|
+
|
44
52
|
writeEntries(subdir, zipFilePath, io)
|
45
53
|
else
|
46
|
-
|
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.
|
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
|
+
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
|