bigrig 0.2.2 → 0.3.0
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 +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
|