bigrig 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +2 -9
- data/bigrig.gemspec +0 -1
- data/lib/bigrig/docker_adapter.rb +1 -1
- data/lib/bigrig/go_matcher.rb +27 -0
- data/lib/bigrig/tar.rb +48 -0
- data/lib/bigrig/version.rb +1 -1
- data/lib/bigrig.rb +2 -0
- data/spec/bigrig/docker_adapter_spec.rb +0 -1
- data/spec/bigrig/go_matcher_spec.rb +76 -0
- data/spec/bigrig/tar_spec.rb +10 -0
- data/spec/data/build/.dockerignore +2 -0
- data/spec/data/build/ignoreme/ignore +0 -0
- metadata +8 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a3826a554c69d11fbf7ad4e527cd9ec53e2ba42
|
4
|
+
data.tar.gz: 1ddc2fb0fe457a8c371c9f5f60c67342e8749566
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6ed6256a98e9895f8bdf61cecdc73aed139ec5c99054d693448794885ac5528209cd6e396685b91f92c8201fb3808587079f45cb9c1f688d3bff7ef34f8ba37
|
7
|
+
data.tar.gz: 40690cf035320de5b847a43fc24ccad61393f67c071d4b0c8be36eb1e48000b050b2d4528d321a5a7937f88023b05d07f217e3b9bb6eeee55efb2201098f3fac
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bigrig (0.
|
4
|
+
bigrig (0.3.0)
|
5
5
|
colorize (= 0.7.5)
|
6
6
|
docker-api (= 1.20.0)
|
7
7
|
filewatcher (= 0.4.0)
|
@@ -15,7 +15,6 @@ GEM
|
|
15
15
|
ast (2.0.0)
|
16
16
|
astrolabe (1.3.0)
|
17
17
|
parser (>= 2.2.0.pre.3, < 3.0)
|
18
|
-
coderay (1.1.0)
|
19
18
|
colorize (0.7.5)
|
20
19
|
crack (0.4.2)
|
21
20
|
safe_yaml (~> 1.0.0)
|
@@ -23,12 +22,11 @@ GEM
|
|
23
22
|
docker-api (1.20.0)
|
24
23
|
excon (>= 0.38.0)
|
25
24
|
json
|
26
|
-
excon (0.45.
|
25
|
+
excon (0.45.2)
|
27
26
|
filewatcher (0.4.0)
|
28
27
|
trollop (~> 2.0)
|
29
28
|
gli (2.12.2)
|
30
29
|
json (1.8.2)
|
31
|
-
method_source (0.8.2)
|
32
30
|
open4 (1.3.4)
|
33
31
|
parser (2.2.0.pre.8)
|
34
32
|
ast (>= 1.1, < 3.0)
|
@@ -37,10 +35,6 @@ GEM
|
|
37
35
|
Platform (>= 0.4.0)
|
38
36
|
open4 (>= 0.4.0)
|
39
37
|
powerpack (0.0.9)
|
40
|
-
pry (0.10.1)
|
41
|
-
coderay (~> 1.1.0)
|
42
|
-
method_source (~> 0.8.1)
|
43
|
-
slop (~> 3.4)
|
44
38
|
rainbow (2.0.0)
|
45
39
|
rake (10.4.2)
|
46
40
|
rspec (3.1.0)
|
@@ -80,7 +74,6 @@ PLATFORMS
|
|
80
74
|
DEPENDENCIES
|
81
75
|
bigrig!
|
82
76
|
popen4
|
83
|
-
pry
|
84
77
|
rake
|
85
78
|
rspec
|
86
79
|
rspec-eventually
|
data/bigrig.gemspec
CHANGED
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.add_development_dependency('rspec')
|
19
19
|
s.add_development_dependency('rspec-its')
|
20
20
|
s.add_development_dependency('rubocop')
|
21
|
-
s.add_development_dependency('pry')
|
22
21
|
s.add_development_dependency('vcr', '~> 2.9.3')
|
23
22
|
s.add_development_dependency('webmock', '~> 1.20.4')
|
24
23
|
s.add_development_dependency('popen4')
|
@@ -12,7 +12,7 @@ module Bigrig
|
|
12
12
|
class DockerAdapter
|
13
13
|
class << self
|
14
14
|
def build(path, &block)
|
15
|
-
Docker::Image.build_from_tar(
|
15
|
+
Docker::Image.build_from_tar(Tar.create_dir_tar(path), {}, connection, &block).id
|
16
16
|
end
|
17
17
|
|
18
18
|
def container_exists?(name)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# This thing's pretty stupid, but it should be good enough for the majority
|
2
|
+
# of cases
|
3
|
+
#
|
4
|
+
# Right not it breaks with ^, $, [, ], and \\
|
5
|
+
module Bigrig
|
6
|
+
class GoMatcher
|
7
|
+
ESCAPES = ['.', '(', ')']
|
8
|
+
REPLACES = {
|
9
|
+
/^\/?/ => '',
|
10
|
+
/^/ => '^',
|
11
|
+
/$/ => '/',
|
12
|
+
'?' => '[^/]',
|
13
|
+
'+' => '\\\\+',
|
14
|
+
'*' => '[^/]+'
|
15
|
+
}
|
16
|
+
|
17
|
+
def initialize(glob)
|
18
|
+
ESCAPES.each { |e| glob.gsub! e, "\\#{e}" }
|
19
|
+
REPLACES.each { |k, v| glob.gsub! k, v }
|
20
|
+
@regex = %r{#{glob}} # rubocop:disable Style/RegexpLiteral
|
21
|
+
end
|
22
|
+
|
23
|
+
def matches?(path)
|
24
|
+
@regex.match("#{path}/") != nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/bigrig/tar.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Bigrig
|
2
|
+
class Tar
|
3
|
+
class << self
|
4
|
+
def create_dir_tar(directory)
|
5
|
+
tempfile = create_temp_file
|
6
|
+
directory += '/' unless directory.end_with?('/')
|
7
|
+
|
8
|
+
create_relative_dir_tar(directory, tempfile)
|
9
|
+
|
10
|
+
File.new(tempfile.path, 'r')
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_relative_dir_tar(directory, output)
|
14
|
+
ignore_matchers = read_docker_ignore(directory).map { |x| GoMatcher.new x }
|
15
|
+
|
16
|
+
Gem::Package::TarWriter.new(output) do |tar|
|
17
|
+
Find.find(directory) do |prefixed_file_name|
|
18
|
+
unprefixed_file_name = prefixed_file_name[directory.length..-1]
|
19
|
+
ignore_matchers.detect { |x| x.matches? unprefixed_file_name } && next
|
20
|
+
add_file tar, prefixed_file_name, unprefixed_file_name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_file(tar, prefixed_file_name, unprefixed_file_name)
|
26
|
+
stat = File.stat(prefixed_file_name)
|
27
|
+
|
28
|
+
stat.file? || return
|
29
|
+
tar.add_file_simple(
|
30
|
+
unprefixed_file_name, stat.mode, stat.size
|
31
|
+
) do |tar_file|
|
32
|
+
IO.copy_stream(File.open(prefixed_file_name, 'rb'), tar_file)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_temp_file
|
37
|
+
tempfile_name = Dir::Tmpname.create('out') {}
|
38
|
+
File.open(tempfile_name, 'wb+')
|
39
|
+
end
|
40
|
+
|
41
|
+
def read_docker_ignore(directory)
|
42
|
+
File.read(File.join directory, '.dockerignore').split "\n"
|
43
|
+
rescue Errno::ENOENT
|
44
|
+
[]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/bigrig/version.rb
CHANGED
data/lib/bigrig.rb
CHANGED
@@ -2,9 +2,11 @@ require 'bigrig/actions'
|
|
2
2
|
require 'bigrig/descriptor'
|
3
3
|
require 'bigrig/dependency_graph'
|
4
4
|
require 'bigrig/docker_adapter'
|
5
|
+
require 'bigrig/go_matcher'
|
5
6
|
require 'bigrig/log_tailer'
|
6
7
|
require 'bigrig/models'
|
7
8
|
require 'bigrig/output_parser'
|
9
|
+
require 'bigrig/tar'
|
8
10
|
require 'bigrig/runner'
|
9
11
|
require 'bigrig/version'
|
10
12
|
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Bigrig
|
2
|
+
describe GoMatcher do
|
3
|
+
it 'treats leading slash as optional' do
|
4
|
+
expect(GoMatcher.new('/test').matches? 'test').to be true
|
5
|
+
expect(GoMatcher.new('test').matches? 'test').to be true
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'ignores unmatched trailing portion of the path' do
|
9
|
+
expect(GoMatcher.new('test').matches? 'test/123').to be true
|
10
|
+
expect(GoMatcher.new('test').matches? 'test123/123').to be false
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'matches subdirectories' do
|
14
|
+
expect(GoMatcher.new('test/123').matches? 'test/123').to be true
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'escapes regex characters' do
|
18
|
+
expect(GoMatcher.new('...').matches? '...').to be true
|
19
|
+
expect(GoMatcher.new('...').matches? 'abc').to be false
|
20
|
+
expect(GoMatcher.new('(').matches? '(').to be true
|
21
|
+
expect(GoMatcher.new(')').matches? ')').to be true
|
22
|
+
expect(GoMatcher.new('+').matches? '+').to be true
|
23
|
+
expect(GoMatcher.new('{').matches? '{').to be true
|
24
|
+
expect(GoMatcher.new('}').matches? '}').to be true
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '*' do
|
28
|
+
it 'matches any sequence of non-Separator characters' do
|
29
|
+
expect(GoMatcher.new('test/*/123').matches? 'test/321/123').to be true
|
30
|
+
expect(GoMatcher.new('*/*/123').matches? 'test/321/123').to be true
|
31
|
+
expect(GoMatcher.new('*/*/*').matches? 'test/321/123').to be true
|
32
|
+
|
33
|
+
expect(GoMatcher.new('*/123').matches? 'test/321/123').to be false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '?' do
|
38
|
+
it 'matches any single non-Separator character' do
|
39
|
+
expect(GoMatcher.new('/?est').matches? 'test').to be true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '[]' do
|
44
|
+
it 'matches a range of characters' do
|
45
|
+
expect(GoMatcher.new('[t]est').matches? 'test').to be true
|
46
|
+
expect(GoMatcher.new('[123t]est').matches? 'test').to be true
|
47
|
+
expect(GoMatcher.new('[a-z]est').matches? 'test').to be true
|
48
|
+
expect(GoMatcher.new('[b]est').matches? 'test').to be false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '[^]' do
|
53
|
+
it 'negates a range of characters' do
|
54
|
+
expect(GoMatcher.new('[^t]est').matches? 'test').to be false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'c' do
|
59
|
+
it %{matches character c (c != '\\', '-', ']')} do
|
60
|
+
expect(GoMatcher.new('t').matches? 't').to be true
|
61
|
+
expect(GoMatcher.new('t').matches? 'test').to be false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '\\\\c' do
|
66
|
+
it 'matches character c' do
|
67
|
+
expect(GoMatcher.new('\\[').matches? '[').to be true
|
68
|
+
expect(GoMatcher.new('\\-').matches? '-').to be true
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'matches \\' do
|
72
|
+
expect(GoMatcher.new('\\\\').matches? '\\').to be true
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Bigrig
|
2
|
+
describe Tar do
|
3
|
+
it 'honors the .dockerignore' do
|
4
|
+
expect(Tar).to_not receive(:add_file).with anything, anything, 'ignoreme/ignore'
|
5
|
+
expect(Tar).to_not receive(:add_file).with anything, anything, 'ignoreme2/ignore'
|
6
|
+
expect(Tar).to receive(:add_file).with anything, anything, 'Dockerfile'
|
7
|
+
Bigrig::Tar.create_dir_tar 'spec/data/build'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bigrig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Your Name Here
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -66,20 +66,6 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: pry
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: vcr
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,6 +207,7 @@ files:
|
|
221
207
|
- lib/bigrig/dependency_graph.rb
|
222
208
|
- lib/bigrig/descriptor.rb
|
223
209
|
- lib/bigrig/docker_adapter.rb
|
210
|
+
- lib/bigrig/go_matcher.rb
|
224
211
|
- lib/bigrig/log_tailer.rb
|
225
212
|
- lib/bigrig/models.rb
|
226
213
|
- lib/bigrig/models/application.rb
|
@@ -228,6 +215,7 @@ files:
|
|
228
215
|
- lib/bigrig/models/container.rb
|
229
216
|
- lib/bigrig/output_parser.rb
|
230
217
|
- lib/bigrig/runner.rb
|
218
|
+
- lib/bigrig/tar.rb
|
231
219
|
- lib/bigrig/version.rb
|
232
220
|
- spec/bigrig/actions/destroy_action_spec.rb
|
233
221
|
- spec/bigrig/actions/dev_action_spec.rb
|
@@ -237,15 +225,19 @@ files:
|
|
237
225
|
- spec/bigrig/dependency_graph_spec.rb
|
238
226
|
- spec/bigrig/descriptor_spec.rb
|
239
227
|
- spec/bigrig/docker_adapter_spec.rb
|
228
|
+
- spec/bigrig/go_matcher_spec.rb
|
240
229
|
- spec/bigrig/log_tailer_spec.rb
|
241
230
|
- spec/bigrig/models/application_spec.rb
|
242
231
|
- spec/bigrig/models/container_spec.rb
|
243
232
|
- spec/bigrig/output_parser_spec.rb
|
233
|
+
- spec/bigrig/tar_spec.rb
|
244
234
|
- spec/bigrig_spec.rb
|
245
235
|
- spec/data/adds_volume.json
|
246
236
|
- spec/data/adds_volumes_from.json
|
247
237
|
- spec/data/addscontainer.json
|
238
|
+
- spec/data/build/.dockerignore
|
248
239
|
- spec/data/build/Dockerfile
|
240
|
+
- spec/data/build/ignoreme/ignore
|
249
241
|
- spec/data/build/test
|
250
242
|
- spec/data/dev.json
|
251
243
|
- spec/data/duplicate.json
|