docker-template 0.8.0 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65d8ac03dfdfff807d45042ee8ef216ab95ed5e9
4
- data.tar.gz: 5880b1219f93034e09a4aa2e1883b21613ceebcd
3
+ metadata.gz: 7d76a4779cec82a6c13f3be1b64a22bc454f6126
4
+ data.tar.gz: d0f548b2754f2ba999361a4ce9e6f970dfc69e37
5
5
  SHA512:
6
- metadata.gz: db84df63be77fc58635612412aad480149256d0bfe7d0c1091fe48e63c06b1253847992753ba8246f2e7f4c6060afc75406fe084ae493ecc07e9db930903a89a
7
- data.tar.gz: 11fd17eb806960784b721c4b66f0849d484c924384a47b6fa539f4f5d5cdc253c3be37f8adfc3a30941faf8e0122c6cadb563cce4013949157b1054d8d0faa13
6
+ metadata.gz: 9b63c8cfb7fa0f8ebfc6bcebc581fa1d9f1794e71a6f3a5869226d0e254e7e2f88892eefdea66794a0457c23b8f0f35893075d81ca255b694cc551b1648763c5
7
+ data.tar.gz: 2ccc93f6003d232028ed0541ce8be0515ebdc199d5dbcafe7359ae078089610015e5371100b9cc7fbae71b9265e69fd84ee1079bb37e93c8d864b4e00a54a495
data/Gemfile CHANGED
@@ -9,11 +9,11 @@ gem "rake", :require => false
9
9
  gemspec
10
10
 
11
11
  group :test do
12
+ gem "rubocop", :require => false
12
13
  gem "rspec", :require => false
13
14
  gem "luna-rspec-formatters", :require => false
14
15
  gem "codeclimate-test-reporter", :require => false
15
16
  gem "memory_profiler", :require => false, :platform => :mri
16
- gem "rubocop", :github => "bbatsov/rubocop", :branch => :master, :require => false
17
17
  gem "rugged", :require => false, :platform => :mri
18
18
  gem "luna-rubocop-formatters", :require => false
19
19
  gem "benchmark-ips", :require => false
data/Rakefile CHANGED
@@ -1,42 +1,41 @@
1
- # ----------------------------------------------------------------------------
2
1
  # Frozen-string-literal: true
3
2
  # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
4
3
  # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
4
 
7
5
  $LOAD_PATH.unshift(File.expand_path(
8
6
  "../lib", __FILE__
9
7
  ))
10
8
 
11
- # ----------------------------------------------------------------------------
9
+ # --
12
10
 
13
11
  require "simple/ansi"
14
12
  require "rspec/core/rake_task"
15
13
  require "luna/rubocop/rake/task"
14
+ require "docker/template/cli"
16
15
  require "open3"
17
16
 
18
- # ----------------------------------------------------------------------------
17
+ # --
19
18
 
20
19
  task :default => [:spec]
21
20
  RSpec::Core::RakeTask.new :spec
22
21
  task :test => :spec
23
22
 
24
- # ----------------------------------------------------------------------------
25
-
23
+ # --
24
+ # TODO: Cleanup and remove this whenever you can.
25
+ # --
26
26
  module CompList
27
27
  module_function
28
28
 
29
- # --------------------------------------------------------------------------
29
+ # --
30
30
  # Update the pak file to have all the completions.
31
- # --------------------------------------------------------------------------
32
-
31
+ # --
33
32
  def update(data = get_commands, msgp = data.to_msgpack)
34
33
  pak_file.binwrite(
35
34
  msgp
36
35
  )
37
36
  end
38
37
 
39
- # --------------------------------------------------------------------------
38
+ # --
40
39
 
41
40
  def normalize_command(command)
42
41
  if command.is_a?(Array)
@@ -52,10 +51,9 @@ module CompList
52
51
  end
53
52
  end
54
53
 
55
- # --------------------------------------------------------------------------
54
+ # --
56
55
  # Provides the base "_reply" for your auto-complete data output.
57
- # --------------------------------------------------------------------------
58
-
56
+ # --
59
57
  def base(const, skip = %w(help))
60
58
  keys = const.all_commands.keys
61
59
  return "_reply" => normalize_command(keys), "help" => {
@@ -63,7 +61,7 @@ module CompList
63
61
  }
64
62
  end
65
63
 
66
- # --------------------------------------------------------------------------
64
+ # --
67
65
 
68
66
  def add_opts(out, const)
69
67
  const.all_commands.each do |key, val, command = normalize_command(key)|
@@ -92,10 +90,9 @@ module CompList
92
90
  out
93
91
  end
94
92
 
95
- # --------------------------------------------------------------------------
93
+ # --
96
94
  # Recursively pulls out and set's up your commands and opts.
97
- # --------------------------------------------------------------------------
98
-
95
+ # --
99
96
  def get_commands(const = Docker::Template::CLI)
100
97
  out = base(
101
98
  const
@@ -113,18 +110,19 @@ module CompList
113
110
  )
114
111
  end
115
112
 
116
- # --------------------------------------------------------------------------
113
+ # --
117
114
 
118
115
  def pak_file
119
- Pathutil.new("bin/comp-list.pak").expand_path.tap(
116
+ Pathutil.new("comp/list.pak").expand_path.tap(
120
117
  &:touch
121
118
  )
122
119
  end
123
120
  end
124
121
 
125
- # ----------------------------------------------------------------------------
122
+ # --
126
123
 
127
124
  namespace :update do
125
+ desc "Update the completion list."
128
126
  task "comp-list" do
129
127
  require "msgpack"
130
128
  require "docker/template"
data/bin/docker-template CHANGED
@@ -1,15 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
- # ----------------------------------------------------------------------------
3
2
  # Frozen-string-literal: true
4
3
  # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
5
4
  # Encoding: utf-8
6
- # ----------------------------------------------------------------------------
7
5
 
8
6
  $LOAD_PATH.unshift(File.expand_path(
9
7
  "../lib", __dir__
10
8
  ))
11
9
 
12
- # ----------------------------------------------------------------------------
10
+ # --
13
11
 
14
12
  trap :SIGINT do
15
13
  $stderr.puts Simple::Ansi.red(
@@ -19,18 +17,17 @@ trap :SIGINT do
19
17
  exit
20
18
  end
21
19
 
22
- # ----------------------------------------------------------------------------
20
+ # --
23
21
 
24
22
  begin
25
- require "docker/template"
23
+ require "docker/template/cli"
26
24
  rescue LoadError
27
- %w(bundler/setup docker/template).each do |k|
25
+ # Retry and let it fail if it doesn't work again.
26
+ %w(bundler/setup docker/template/cli).each do |k|
28
27
  require k
29
28
  end
30
29
  end
31
30
 
32
- # ----------------------------------------------------------------------------
33
31
  # Time to play the game.
34
- # ----------------------------------------------------------------------------
35
-
36
- Docker::Template::CLI.start
32
+ Docker::Template::CLI \
33
+ .start
data/comp/list CHANGED
@@ -1,23 +1,20 @@
1
1
  #!/usr/bin/env ruby
2
- # ----------------------------------------------------------------------------
3
2
  # Frozen-string-literal: true
4
3
  # Copyright: 2016 Jordon Bedwell - MIT License
5
- # Encoding: utf-8
6
- # ----------------------------------------------------------------------------
7
4
  # rubocop:disable Style/ElseAlignment
8
- # ----------------------------------------------------------------------------
5
+ # Encoding: utf-8
9
6
 
10
7
  ARGV.shift
11
8
  require "pathutil"
12
9
  require "msgpack"
13
10
 
14
- # ----------------------------------------------------------------------------
11
+ # --
15
12
 
16
13
  list = MessagePack.unpack(
17
14
  Pathutil.new(__dir__).expand_path.join("list.pak").read
18
15
  )
19
16
 
20
- # ----------------------------------------------------------------------------
17
+ # --
21
18
 
22
19
  if ARGV.first == "build"
23
20
  dir = Pathutil.new("repos").expand_path
@@ -30,7 +27,7 @@ if ARGV.first == "build"
30
27
  end
31
28
  end
32
29
 
33
- # ----------------------------------------------------------------------------
30
+ # --
34
31
 
35
32
  def key?(obj, key)
36
33
  obj["_reply"].include?(
@@ -38,7 +35,7 @@ def key?(obj, key)
38
35
  )
39
36
  end
40
37
 
41
- # ----------------------------------------------------------------------------
38
+ # --
42
39
 
43
40
  def contains?(obj, key)
44
41
  result = obj["_reply"].grep(/#{Regexp.escape(
@@ -48,13 +45,13 @@ def contains?(obj, key)
48
45
  !result.empty?
49
46
  end
50
47
 
51
- # ----------------------------------------------------------------------------
48
+ # --
52
49
 
53
50
  def opt?(key)
54
51
  key =~ /\A-{1,2}/
55
52
  end
56
53
 
57
- # ----------------------------------------------------------------------------
54
+ # --
58
55
 
59
56
  if ARGV.empty?
60
57
  $stdout.puts list["_reply"].join(
data/comp/list.pak CHANGED
Binary file
@@ -1,8 +1,6 @@
1
- # ----------------------------------------------------------------------------
2
1
  # Frozen-string-literal: true
3
2
  # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
4
3
  # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
4
 
7
5
  require "docker"
8
6
  require "extras/all"
@@ -12,35 +10,28 @@ require "simple/ansi"
12
10
  require "pathutil"
13
11
  require "set"
14
12
 
15
- # ----------------------------------------------------------------------------
13
+ # --
16
14
 
17
15
  Excon.defaults[ :read_timeout] = 1440
18
16
  Excon.defaults[:write_timeout] = 1440
19
17
 
20
- # ----------------------------------------------------------------------------
18
+ # --
21
19
 
22
20
  module Docker
23
21
  module Template
24
22
  module_function
25
23
 
26
- # ------------------------------------------------------------------------
27
-
28
- autoload :Notify, "docker/template/notify"
29
- autoload :Utils, "docker/template/utils"
30
- autoload :Repo, "docker/template/repo"
31
- autoload :Error, "docker/template/error"
32
- autoload :Logger, "docker/template/logger"
33
- autoload :Normal, "docker/template/normal"
34
- autoload :Parser, "docker/template/parser"
35
- autoload :Builder, "docker/template/builder"
36
- autoload :Metadata, "docker/template/metadata"
37
- autoload :Scratch, "docker/template/scratch"
38
- autoload :Rootfs, "docker/template/rootfs"
39
- autoload :Cache, "docker/template/cache"
40
- autoload :Alias, "docker/template/alias"
41
- autoload :CLI, "docker/template/cli"
42
-
43
- # ------------------------------------------------------------------------
24
+ # --
25
+
26
+ def project?
27
+ dir = root.join("docker")
28
+ any = Builder.all.dup.keep_if(&:projects_allowed?)
29
+ any = any.map(&:files).reduce(&:|).any? { |file| root.join(file).file? }
30
+ return true if any && root.join(Meta.opts_file(:force => \
31
+ :project)).file?
32
+ end
33
+
34
+ # --
44
35
 
45
36
  def root
46
37
  @root ||= begin
@@ -48,7 +39,7 @@ module Docker
48
39
  end
49
40
  end
50
41
 
51
- # ------------------------------------------------------------------------
42
+ # --
52
43
 
53
44
  def gem_root
54
45
  @gem_root ||= begin
@@ -58,7 +49,7 @@ module Docker
58
49
  end
59
50
  end
60
51
 
61
- # ------------------------------------------------------------------------
52
+ # --
62
53
 
63
54
  def template_root
64
55
  @template_root ||= begin
@@ -66,10 +57,10 @@ module Docker
66
57
  end
67
58
  end
68
59
 
69
- # ------------------------------------------------------------------------
60
+ # --
70
61
  # Pull a `template` from the `template_root` to parse it's data.
71
- # TODO: Rename this get template!
72
- # ------------------------------------------------------------------------
62
+ # TODO: Rename this to get_template!
63
+ # --
73
64
 
74
65
  def get(name, data = {})
75
66
  data = ERB::Context.new(data)
@@ -82,7 +73,7 @@ module Docker
82
73
  )
83
74
  end
84
75
 
85
- # ------------------------------------------------------------------------
76
+ # --
86
77
 
87
78
  def _require(what)
88
79
  require what
@@ -98,12 +89,24 @@ module Docker
98
89
  end
99
90
  end
100
91
 
101
- # ----------------------------------------------------------------------------
92
+ # --
102
93
  # Trick extras into merging array's into array's for us so users can inherit.
103
- # ----------------------------------------------------------------------------
94
+ # --
104
95
 
105
96
  class Array
106
97
  def deep_merge(new_)
107
98
  self | new_
108
99
  end
109
100
  end
101
+
102
+ # --
103
+
104
+ require "docker/template/error"
105
+ require "docker/template/cache"
106
+ require "docker/template/notify"
107
+ require "docker/template/builder"
108
+ require "docker/template/logger"
109
+ require "docker/template/parser"
110
+ require "docker/template/repo"
111
+ require "docker/template/meta"
112
+ require "docker/template/auth"
@@ -0,0 +1,72 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
3
+ # Encoding: utf-8
4
+
5
+ module Docker
6
+ module Template
7
+ module Auth
8
+ module_function
9
+
10
+ # --
11
+
12
+ DEFAULT_SERVER = "https://index.docker.io/v1/"
13
+
14
+ # --
15
+
16
+ def auth_with_env?
17
+ (
18
+ ENV.key?("DOCKER_USERNAME") && \
19
+ ENV.key?("DOCKER_PASSWORD") && \
20
+ ENV.key?("DOCKER_EMAIL")
21
+ ) || \
22
+ (
23
+ ENV.key?("bamboo_dockerUsername") && \
24
+ ENV.key?("bamboo_dockerPassword") && \
25
+ ENV.key?("bambo_dockerEmail")
26
+ )
27
+ end
28
+
29
+ # --
30
+
31
+ def hub
32
+ return auth_from_env if auth_with_env?
33
+
34
+ auth_from_config
35
+ rescue Docker::Error::AuthenticationError
36
+ raise Error::UnsuccessfulAuth
37
+ end
38
+
39
+ # --
40
+
41
+ def auth_from_env
42
+ Docker.authenticate!({
43
+ "username" => ENV["DOCKER_USERNAME"] || ENV["bamboo_dockerUsername"],
44
+ "serveraddress" => ENV["DOCKER_SERVER"] || ENV["bamboo_dockerServer"] || DEFAULT_SERVER,
45
+ "password" => ENV["DOCKER_PASSWORD"] || ENV["bamboo_dockerPassword"],
46
+ "email" => ENV["DOCKER_EMAIL"] || ENV["bamboo_dockerEmail"]
47
+ })
48
+ end
49
+
50
+ # --
51
+
52
+ def auth_from_config
53
+ credentials = Pathutil.new("~/.docker/config.json")
54
+ credentials = credentials.expand_path.read_json
55
+
56
+ unless credentials.empty?
57
+ credentials["auths"].each do |server, info|
58
+ username, password = Base64.decode64(info["auth"])
59
+ .split(":", 2)
60
+
61
+ Docker.authenticate!({
62
+ "username" => username,
63
+ "serveraddress" => server,
64
+ "email" => info["email"],
65
+ "password" => password
66
+ })
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,44 +1,43 @@
1
- # ----------------------------------------------------------------------------
2
1
  # Frozen-string-literal: true
3
2
  # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
4
3
  # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
4
 
7
5
  module Docker
8
6
  module Template
9
7
  class Builder
10
8
  extend Forwardable::Extended
11
9
 
12
- # ----------------------------------------------------------------------
10
+ # --
13
11
 
14
12
  attr_reader :repo
15
13
  attr_reader :context
14
+ attr_reader :copy
16
15
  attr_reader :img
17
16
 
18
- # ----------------------------------------------------------------------
17
+ # --
19
18
 
20
19
  ALIAS_SETUP = [:cache_context]
21
- SETUP = [:setup_context, :copy_global, :copy_all,
22
- :copy_group, :copy_tag, :copy_cleanup, :build_context,
20
+ SETUP = [:setup_context, :copy_global, :copy_project,
21
+ :copy_all, :copy_group, :copy_tag, :copy_cleanup, :copy_git, :build_context,
23
22
  :verify_context, :cache_context].freeze
24
23
 
25
- # ----------------------------------------------------------------------
24
+ # --
26
25
 
27
26
  def initialize(repo)
28
27
  @repo = repo
29
28
  end
30
29
 
31
- # ----------------------------------------------------------------------
30
+ # --
32
31
  # Checks to see if this repository is an alias. This happens when the
33
32
  # user has alised data inside of their configuration file. At this point
34
33
  # we will not only copy the parent's data but the aliased data.
35
- # ----------------------------------------------------------------------
34
+ # --
36
35
 
37
36
  def alias?
38
37
  !@repo.complex_alias? && @repo.alias? && !rootfs?
39
38
  end
40
39
 
41
- # ----------------------------------------------------------------------
40
+ # --
42
41
 
43
42
  def rootfs?
44
43
  is_a?(
@@ -46,21 +45,21 @@ module Docker
46
45
  )
47
46
  end
48
47
 
49
- # ----------------------------------------------------------------------
48
+ # --
50
49
 
51
50
  def normal?
52
51
  @repo.type == "normal" \
53
52
  && !rootfs?
54
53
  end
55
54
 
56
- # ----------------------------------------------------------------------
55
+ # --
57
56
 
58
57
  def scratch?
59
58
  @repo.type == "scratch" \
60
59
  && !rootfs?
61
60
  end
62
61
 
63
- # ----------------------------------------------------------------------
62
+ # --
64
63
 
65
64
  def aliased_img
66
65
  if alias?
@@ -77,16 +76,15 @@ module Docker
77
76
  end
78
77
  end
79
78
 
80
- # ----------------------------------------------------------------------
79
+ # --
81
80
 
82
81
  def push
83
82
  return if rootfs? || !@repo.pushable?
84
- Notify.push self
85
- auth!
86
83
 
84
+ Notify.push(self); Auth.hub
87
85
  img = @img || Image.get(@repo.to_s)
88
- img.push nil, :repo_tag => \
89
- @repo.to_s, &Logger.new.method(:api)
86
+ img.push nil, :repo_tag => @repo.to_s, \
87
+ &Logger.new(repo).method(:api)
90
88
 
91
89
  rescue Docker::Error::NotFoundError
92
90
  $stderr.puts Simple::Ansi.red(
@@ -94,7 +92,7 @@ module Docker
94
92
  )
95
93
  end
96
94
 
97
- # ----------------------------------------------------------------------
95
+ # --
98
96
 
99
97
  def build
100
98
  Simple::Ansi.clear if @repo.buildable?
@@ -102,11 +100,9 @@ module Docker
102
100
  setup
103
101
 
104
102
  if @repo.buildable?
105
- Notify.build(@repo, {
106
- :rootfs => rootfs?
107
- })
108
-
109
- chdir_build
103
+ then Notify.build(@repo, :rootfs => rootfs?) do
104
+ chdir_build
105
+ end
110
106
  end
111
107
 
112
108
  push
@@ -121,11 +117,11 @@ module Docker
121
117
  end
122
118
  end
123
119
 
124
- # ----------------------------------------------------------------------
120
+ # --
125
121
  # This method is a default reference. It is called when the image is
126
122
  # done building or when there is an error and we need to clean up some
127
123
  # stuff before exiting, use it... please.
128
- # ----------------------------------------------------------------------
124
+ # --
129
125
 
130
126
  def teardown(*_)
131
127
  $stderr.puts Ansi.red(
@@ -133,7 +129,25 @@ module Docker
133
129
  )
134
130
  end
135
131
 
136
- # ----------------------------------------------------------------------
132
+ # --
133
+ # The prebuild happens when a user has "setup_context", which typically
134
+ # only happens with scratch, which will prebuild it's rootfs image so
135
+ # it can get to building it's actual image.
136
+ # --
137
+
138
+ def setup
139
+ unless respond_to?(:setup_context, true)
140
+ raise Error::NoSetupContext
141
+ end
142
+
143
+ SETUP.map do |val|
144
+ if respond_to?(val, true)
145
+ send(val)
146
+ end
147
+ end
148
+ end
149
+
150
+ # --
137
151
 
138
152
  private
139
153
  def build_alias
@@ -161,26 +175,7 @@ module Docker
161
175
  push
162
176
  end
163
177
 
164
- # ----------------------------------------------------------------------
165
- # The prebuild happens when a user has "setup_context", which typically
166
- # only happens with scratch, which will prebuild it's rootfs image so
167
- # it can get to building it's actual image.
168
- # ----------------------------------------------------------------------
169
-
170
- private
171
- def setup
172
- unless respond_to?(:setup_context, true)
173
- raise Error::NoSetupContext
174
- end
175
-
176
- SETUP.map do |val|
177
- if respond_to?(val, true)
178
- send(val)
179
- end
180
- end
181
- end
182
-
183
- # ----------------------------------------------------------------------
178
+ # --
184
179
 
185
180
  private
186
181
  def alias_setup
@@ -191,19 +186,32 @@ module Docker
191
186
  end
192
187
  end
193
188
 
194
- # ----------------------------------------------------------------------
189
+ # --
195
190
 
196
191
  private
197
192
  def chdir_build
198
193
  @context.chdir do
199
- logger = Logger.new(self).method(:api)
200
- opts = { :t => @repo.to_s(rootfs: rootfs?) }
201
- $stderr.puts Simple::Ansi.yellow("TTY not supported: Ignored.") if @repo.metadata["tty"]
202
- @img = Docker::Image.build_from_dir(".", opts, &logger)
194
+ logger = Logger.new(repo).method(:api)
195
+ opts = {
196
+ :force => @repo.meta.force?,
197
+ :t => @repo.to_s(rootfs: rootfs?),
198
+ :squash => @repo.meta.squash?,
199
+ :nocache => @repo.meta.force?
200
+ }
201
+
202
+ if @repo.meta["tty"]
203
+ $stderr.puts Simple::Ansi.yellow(
204
+ "TTY not supported: Ignored."
205
+ )
206
+ end
207
+
208
+ @img = Docker::Image.build_from_dir(".",
209
+ opts, &logger
210
+ )
203
211
  end
204
212
  end
205
213
 
206
- # ----------------------------------------------------------------------
214
+ # --
207
215
 
208
216
  private
209
217
  def cache_context
@@ -214,16 +222,46 @@ module Docker
214
222
  end
215
223
  end
216
224
 
217
- # ----------------------------------------------------------------------
225
+ # --
226
+ # Copy any git repositories the user wishes us to copy.
227
+ # --
228
+
229
+ private
230
+ def copy_git
231
+ return if rootfs? || !@repo.meta.git?
232
+ require "rugged"
233
+
234
+ @repo.meta[:git].each do |repo|
235
+ credentials = Rugged::Credentials::SshKey.new({
236
+ :privatekey => Pathutil.new(repo[:key]).expand_path.to_s,
237
+ :publickey => Pathutil.new(repo[:pub]).expand_path.to_s,
238
+ :username => repo[:user]
239
+ })
240
+
241
+ dir = @copy.join(repo[:clone_to])
242
+ if !dir.exist?
243
+ $stderr.puts Simple::Ansi.green("Cloning #{repo[:repo]} to #{repo[:clone_to]}.")
244
+ Rugged::Repository.clone_at(repo[:repo], dir.to_s, {
245
+ :credentials => credentials
246
+ })
247
+ else
248
+ $stderr.puts Simple::Ansi.yellow(
249
+ "Skipping #{repo[:repo]}, exists already."
250
+ )
251
+ end
252
+ end
253
+ end
254
+
255
+ # --
218
256
  # The root can have it's own global copy directory shared across all
219
257
  # repos in your repo container dir so this encapsulates those.
220
- # ----------------------------------------------------------------------
258
+ # --
221
259
 
222
260
  private
223
261
  def copy_global
224
262
  unless rootfs?
225
263
  dir = Template.root.join(
226
- @repo.metadata["copy_dir"]
264
+ @repo.meta["copy_dir"]
227
265
  )
228
266
 
229
267
  if dir.exist?
@@ -234,7 +272,26 @@ module Docker
234
272
  end
235
273
  end
236
274
 
237
- # ----------------------------------------------------------------------
275
+ # --
276
+
277
+ private
278
+ def copy_project
279
+ if Template.project?
280
+ ignores = repo.meta["project_copy_ignore"].map do |path|
281
+ Pathutil.new(path).expand_path(
282
+ Template.root
283
+ )
284
+ end
285
+
286
+ Template.root.safe_copy(
287
+ context.join(repo.meta.project_copy_dir), {
288
+ :root => Template.root, :ignore => ignores
289
+ }
290
+ )
291
+ end
292
+ end
293
+
294
+ # --
238
295
 
239
296
  private
240
297
  def copy_tag
@@ -249,11 +306,11 @@ module Docker
249
306
  end
250
307
  end
251
308
 
252
- # ----------------------------------------------------------------------
309
+ # --
253
310
 
254
311
  private
255
312
  def copy_group
256
- build_group = @repo.metadata["tags"][
313
+ build_group = @repo.meta["tags"][
257
314
  @repo.tag
258
315
  ]
259
316
 
@@ -268,7 +325,7 @@ module Docker
268
325
  end
269
326
  end
270
327
 
271
- # ----------------------------------------------------------------------
328
+ # --
272
329
 
273
330
  private
274
331
  def copy_all
@@ -283,33 +340,64 @@ module Docker
283
340
  end
284
341
  end
285
342
 
286
- # ----------------------------------------------------------------------
343
+ # --
287
344
 
288
- private
289
- def auth!
290
- credentials = Pathutil.new("~/.docker/config.json").expand_path.read_json
291
- return if credentials.empty?
345
+ rb_delegate :aliased_tag, :to => "repo.meta"
346
+ rb_delegate :aliased_repo, {
347
+ :to => :repo, :alias_of => :aliased
348
+ }
292
349
 
293
- credentials["auths"].each do |server, info|
294
- user, pass = Base64.decode64(info["auth"]).split(
295
- ":", 2
296
- )
350
+ class << self
297
351
 
298
- Docker.authenticate!({
299
- "username" => user,
300
- "serveraddress" => server,
301
- "email" => info["email"],
302
- "password" => pass
303
- })
352
+ # --
353
+ # REFERENCE METHOD: This is here to let you know we access files.
354
+ # --
355
+
356
+ def files
357
+ return [
358
+ #
359
+ ]
304
360
  end
305
- end
306
361
 
307
- # ----------------------------------------------------------------------
362
+ # --
308
363
 
309
- rb_delegate :aliased_tag, :to => "repo.metadata"
310
- rb_delegate :aliased_repo, {
311
- :to => :repo, :alias_of => :aliased
312
- }
364
+ def projects_allowed!
365
+ return @projects_allowed \
366
+ = true
367
+ end
368
+
369
+ # --
370
+
371
+ def projects_allowed?
372
+ return !!@projects_allowed
373
+ end
374
+
375
+ # --
376
+
377
+ def sub?
378
+ false
379
+ end
380
+
381
+ # --
382
+
383
+ def inherited(klass)
384
+ (@sub_classes ||= []).push(
385
+ klass
386
+ )
387
+ end
388
+
389
+ # --
390
+
391
+ def all
392
+ @sub_classes ||= [
393
+ #
394
+ ]
395
+ end
396
+ end
313
397
  end
314
398
  end
315
399
  end
400
+
401
+ require "docker/template/builder/rootfs"
402
+ require "docker/template/builder/scratch"
403
+ require "docker/template/builder/normal"