dapp 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/en/common.yml +2 -0
- data/config/en/net_status.yml +3 -0
- data/lib/dapp.rb +2 -0
- data/lib/dapp/build/stage/base.rb +3 -3
- data/lib/dapp/cli.rb +2 -1
- data/lib/dapp/cli/tag.rb +24 -0
- data/lib/dapp/config/directive/docker/base.rb +3 -1
- data/lib/dapp/dimg.rb +13 -0
- data/lib/dapp/dimg/path.rb +3 -0
- data/lib/dapp/dimg/stages.rb +3 -3
- data/lib/dapp/docker_registry.rb +9 -9
- data/lib/dapp/image/docker.rb +9 -0
- data/lib/dapp/image/stage.rb +22 -12
- data/lib/dapp/project.rb +1 -0
- data/lib/dapp/project/command/common.rb +4 -0
- data/lib/dapp/project/command/push.rb +1 -0
- data/lib/dapp/project/command/spush.rb +1 -0
- data/lib/dapp/project/command/stages/common.rb +1 -0
- data/lib/dapp/project/command/stages/pull.rb +1 -0
- data/lib/dapp/project/command/stages/push.rb +1 -0
- data/lib/dapp/project/command/tag.rb +18 -0
- data/lib/dapp/project/logging/process.rb +1 -1
- data/lib/dapp/version.rb +1 -1
- 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: 272df4bf11a8835a28a24c7c07d6267b1621ed69
|
4
|
+
data.tar.gz: 8b938f63edb0d4c2ccceffc8e901ab23432ad46f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 263b8f2dae547e2d70b6bae8b3ae4977f030df3436208237e5b2eb55814d2795d021b73606ad5e7696827173930eb5fcd1fdc4e03efc4623baa4f513331c1c9b
|
7
|
+
data.tar.gz: 1f24ef716042766765497256794bafd8b3d99f17d546852bce63e430ac84cbba1e78e18fc04269c4a48590e28e6278e8bbbd6b0938923c05b7209b0d1732d2d3
|
data/config/en/common.yml
CHANGED
@@ -28,6 +28,7 @@ en:
|
|
28
28
|
pulling: '[PULLING]'
|
29
29
|
building: '[BUILDING]'
|
30
30
|
default: '[RUNNING]'
|
31
|
+
tagging: '[TAGGING]'
|
31
32
|
success:
|
32
33
|
default: '[OK]'
|
33
34
|
failed:
|
@@ -40,6 +41,7 @@ en:
|
|
40
41
|
empty: '[EMPTY]'
|
41
42
|
push: '[PUSH]'
|
42
43
|
pull: '[PULL]'
|
44
|
+
tag: '[TAG]'
|
43
45
|
warning:
|
44
46
|
wrong_using_base_directive: "WARNING: Directive '%{directive}' has declared after dimg_group|dimg|artifact!"
|
45
47
|
wrong_using_directive: "WARNING: Directive '%{directive}' has declared after dimg_group|dimg!"
|
data/config/en/net_status.yml
CHANGED
@@ -21,6 +21,9 @@ en:
|
|
21
21
|
spush_command_unexpected_dimgs_number: "Command 'spush' can process only one dimg!"
|
22
22
|
command_unexpected_dimgs_number: "Command can process only one dimg!"
|
23
23
|
no_such_dimg: "No such dimg: '%{dimgs_patterns}'!"
|
24
|
+
tag_command_unexpected_dimgs_number: "Command 'tag' can process only one dimg!"
|
25
|
+
tag_command_incorrect_tag: "Incorrect tag ('%{name}') given!"
|
26
|
+
repo_name_incorrect: "Incorrect repo ('%{name}') given!"
|
24
27
|
dappfile_not_found: "Dappfile not found!"
|
25
28
|
cannot_run_ssh_agent: "Cannot run ssh-agent"
|
26
29
|
ssh_key_not_found: "Ssh key '%{path}' not exist!"
|
data/lib/dapp.rb
CHANGED
@@ -42,6 +42,7 @@ require 'dapp/cli/base'
|
|
42
42
|
require 'dapp/cli/build'
|
43
43
|
require 'dapp/cli/push'
|
44
44
|
require 'dapp/cli/spush'
|
45
|
+
require 'dapp/cli/tag'
|
45
46
|
require 'dapp/cli/list'
|
46
47
|
require 'dapp/cli/stages'
|
47
48
|
require 'dapp/cli/stages/flush_local'
|
@@ -129,6 +130,7 @@ require 'dapp/project/command/list'
|
|
129
130
|
require 'dapp/project/command/push'
|
130
131
|
require 'dapp/project/command/run'
|
131
132
|
require 'dapp/project/command/spush'
|
133
|
+
require 'dapp/project/command/tag'
|
132
134
|
require 'dapp/project/command/stages/common'
|
133
135
|
require 'dapp/project/command/stages/cleanup_local'
|
134
136
|
require 'dapp/project/command/stages/cleanup_repo'
|
@@ -60,7 +60,7 @@ module Dapp
|
|
60
60
|
def save_in_cache!
|
61
61
|
prev_stage.save_in_cache! if prev_stage
|
62
62
|
return unless should_be_tagged?
|
63
|
-
image.
|
63
|
+
image.save_in_cache! unless dimg.project.dry_run?
|
64
64
|
end
|
65
65
|
|
66
66
|
def image
|
@@ -101,10 +101,10 @@ module Dapp
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def image_add_default_volumes(type)
|
104
|
-
(dimg.config.public_send("_#{type}_mount").map(&:
|
104
|
+
(dimg.config.public_send("_#{type}_mount").map(&:_to) +
|
105
105
|
from_image.labels.select { |l, _| l == "dapp-#{type}-dir" }.map { |_, value| value.split(';') }.flatten).each do |path|
|
106
106
|
absolute_path = File.expand_path(File.join('/', path))
|
107
|
-
tmp_path = dimg.send(
|
107
|
+
tmp_path = dimg.send(type, 'mount', absolute_path[1..-1]).tap(&:mkpath)
|
108
108
|
image.add_volume "#{tmp_path}:#{absolute_path}"
|
109
109
|
end
|
110
110
|
end
|
data/lib/dapp/cli.rb
CHANGED
@@ -5,7 +5,7 @@ module Dapp
|
|
5
5
|
include Mixlib::CLI
|
6
6
|
include Helper::Trivia
|
7
7
|
|
8
|
-
SUBCOMMANDS = ['build', 'push', 'spush', 'list', 'run', 'stages', 'cleanup', 'bp', 'mrproper', 'stage image'].freeze
|
8
|
+
SUBCOMMANDS = ['build', 'push', 'spush', 'list', 'run', 'stages', 'cleanup', 'bp', 'mrproper', 'stage image', 'tag'].freeze
|
9
9
|
|
10
10
|
banner <<BANNER.freeze
|
11
11
|
Usage: dapp [options] sub-command [sub-command options]
|
@@ -16,6 +16,7 @@ dapp build [options] [DIMGS PATTERN ...]
|
|
16
16
|
dapp bp [options] [DIMGS PATTERN ...] REPO
|
17
17
|
dapp push [options] [DIMGS PATTERN] REPO
|
18
18
|
dapp spush [options] [DIMG PATTERN ...] REPO
|
19
|
+
dapp tag [options] [DIMG PATTERN ...] TAG
|
19
20
|
dapp list [options] [DIMGS PATTERN ...]
|
20
21
|
dapp run [options] [DIMG PATTERN] [DOCKER ARGS]
|
21
22
|
dapp cleanup [options] [DIMGS PATTERN ...]
|
data/lib/dapp/cli/tag.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Dapp
|
2
|
+
class CLI
|
3
|
+
# CLI tag subcommand
|
4
|
+
class Tag < Base
|
5
|
+
banner <<BANNER.freeze
|
6
|
+
Version: #{Dapp::VERSION}
|
7
|
+
|
8
|
+
Usage:
|
9
|
+
dapp tag [options] [DIMG PATTERN ...] TAG
|
10
|
+
|
11
|
+
DIMG PATTERN Dapp image to process [default: *].
|
12
|
+
REPO Pushed image name.
|
13
|
+
|
14
|
+
Options:
|
15
|
+
BANNER
|
16
|
+
|
17
|
+
def run(argv = ARGV)
|
18
|
+
self.class.parse_options(self, argv)
|
19
|
+
tag = self.class.required_argument(self)
|
20
|
+
Project.new(cli_options: config, dimgs_patterns: cli_arguments).public_send(class_to_lowercase, tag)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -7,7 +7,9 @@ module Dapp
|
|
7
7
|
attr_reader :_from, :_from_cache_version
|
8
8
|
|
9
9
|
def from(image, cache_version: nil)
|
10
|
-
|
10
|
+
image = image.to_s
|
11
|
+
raise(Error::Config, code: :docker_from_incorrect, data: { name: image }) unless image =~ Image::Docker.image_regex
|
12
|
+
raise(Error::Config, code: :docker_from_without_tag, data: { name: image }) unless image.include?(':')
|
11
13
|
@_from = image
|
12
14
|
@_from_cache_version = cache_version
|
13
15
|
end
|
data/lib/dapp/dimg.rb
CHANGED
@@ -39,6 +39,19 @@ module Dapp
|
|
39
39
|
FileUtils.rm_rf(tmp_path)
|
40
40
|
end
|
41
41
|
|
42
|
+
def tag!(tag)
|
43
|
+
project.lock("#{config._basename}.images", readonly: true) do
|
44
|
+
dimg_name = config._name
|
45
|
+
if project.dry_run?
|
46
|
+
project.log_state(dimg_name, state: project.t(code: 'state.tag'), styles: { status: :success })
|
47
|
+
else
|
48
|
+
project.log_process(dimg_name, process: project.t(code: 'status.process.tagging')) do
|
49
|
+
last_stage.image.tag!(tag)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
42
55
|
def export!(repo, format:)
|
43
56
|
project.lock("#{project.name}.images", readonly: true) do
|
44
57
|
tags.each do |tag|
|
data/lib/dapp/dimg/path.rb
CHANGED
data/lib/dapp/dimg/stages.rb
CHANGED
@@ -17,14 +17,14 @@ module Dapp
|
|
17
17
|
|
18
18
|
def images
|
19
19
|
(@images ||= []).tap do |images|
|
20
|
-
stages.
|
20
|
+
stages.each do |stage|
|
21
21
|
if stage.respond_to?(:images)
|
22
22
|
images.concat(stage.images)
|
23
23
|
else
|
24
24
|
images << stage.image
|
25
25
|
end
|
26
|
-
end
|
27
|
-
end
|
26
|
+
end
|
27
|
+
end.uniq!(&:name)
|
28
28
|
end
|
29
29
|
|
30
30
|
protected
|
data/lib/dapp/docker_registry.rb
CHANGED
@@ -3,8 +3,8 @@ module Dapp
|
|
3
3
|
module DockerRegistry
|
4
4
|
def self.new(repo)
|
5
5
|
repo_regex =~ repo
|
6
|
-
expected_hostname = Regexp.last_match(
|
7
|
-
expected_repo_suffix = Regexp.last_match(
|
6
|
+
expected_hostname = Regexp.last_match(:hostname)
|
7
|
+
expected_repo_suffix = Regexp.last_match(:repo_suffix)
|
8
8
|
expected_hostname_url = expected_hostname ? "http://#{expected_hostname}" : nil
|
9
9
|
|
10
10
|
if hostname_exist?(expected_hostname_url)
|
@@ -15,13 +15,13 @@ module Dapp
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.repo_regex
|
18
|
-
separator =
|
19
|
-
alpha_numeric =
|
20
|
-
component =
|
21
|
-
port_number =
|
22
|
-
hostcomponent =
|
23
|
-
hostname =
|
24
|
-
%r{^(
|
18
|
+
separator = '[_.]|__|[-]*'
|
19
|
+
alpha_numeric = '[[:alnum:]]*'
|
20
|
+
component = "#{alpha_numeric}[#{separator}#{alpha_numeric}]*"
|
21
|
+
port_number = '[[:digit:]]+'
|
22
|
+
hostcomponent = '[[:alnum:]-]*[[:alnum:]]'
|
23
|
+
hostname = "#{hostcomponent}[\.#{hostcomponent}]*(?<port>:#{port_number})?"
|
24
|
+
%r{^(?<hostname>#{hostname}/)?(?<repo_suffix>#{component}[/#{component}]*)$}
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.hostname_exist?(url)
|
data/lib/dapp/image/docker.rb
CHANGED
@@ -68,6 +68,15 @@ module Dapp
|
|
68
68
|
end
|
69
69
|
|
70
70
|
class << self
|
71
|
+
def image_regex
|
72
|
+
/^[a-z0-9]+(?:[._-][a-z0-9]+)*(:[\w][\w.-]{0,127})?$/
|
73
|
+
end
|
74
|
+
|
75
|
+
def tag!(id:, tag:)
|
76
|
+
Project.shellout!("docker tag #{id} #{tag}")
|
77
|
+
cache_reset
|
78
|
+
end
|
79
|
+
|
71
80
|
def cache
|
72
81
|
@cache ||= (@cache = {}).tap { cache_reset }
|
73
82
|
end
|
data/lib/dapp/image/stage.rb
CHANGED
@@ -33,24 +33,30 @@ module Dapp
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def export!(name)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
tag!(name).tap do |image|
|
37
|
+
image.push!
|
38
|
+
image.untag!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def tag!(name)
|
43
|
+
clone!(name).tap do |image|
|
44
|
+
self.class.tag!(id: image.built_id, tag: image.name)
|
45
|
+
end
|
40
46
|
end
|
41
47
|
|
42
48
|
def import!(name)
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
49
|
+
clone!(name).tap do |image|
|
50
|
+
image.pull!
|
51
|
+
@built_id = image.built_id
|
52
|
+
save_in_cache!
|
53
|
+
image.untag!
|
54
|
+
end
|
48
55
|
end
|
49
56
|
|
50
|
-
def
|
57
|
+
def save_in_cache!
|
51
58
|
project.log_warning(desc: { code: :another_image_already_tagged }) if !(existed_id = id).nil? && built_id != existed_id
|
52
|
-
|
53
|
-
cache_reset
|
59
|
+
self.class.tag!(id: built_id, tag: name)
|
54
60
|
end
|
55
61
|
|
56
62
|
def labels
|
@@ -77,6 +83,10 @@ module Dapp
|
|
77
83
|
def commit!
|
78
84
|
project.shellout!("docker commit #{prepared_change} #{container_name}").stdout.strip
|
79
85
|
end
|
86
|
+
|
87
|
+
def clone!(name)
|
88
|
+
self.class.new(name: name, project: project, built_id: built_id)
|
89
|
+
end
|
80
90
|
end # Stage
|
81
91
|
end # Image
|
82
92
|
end # Dapp
|
data/lib/dapp/project.rb
CHANGED
@@ -55,6 +55,10 @@ module Dapp
|
|
55
55
|
name
|
56
56
|
end
|
57
57
|
|
58
|
+
def validate_repo_name(repo)
|
59
|
+
raise(Error::Project, code: :repo_name_incorrect, data: { name: repo }) unless repo =~ DockerRegistry.repo_regex
|
60
|
+
end
|
61
|
+
|
58
62
|
def proper_cache_version?
|
59
63
|
!!cli_options[:proper_cache_version]
|
60
64
|
end
|
@@ -6,6 +6,7 @@ module Dapp
|
|
6
6
|
# Spush
|
7
7
|
module Spush
|
8
8
|
def spush(repo)
|
9
|
+
validate_repo_name(repo)
|
9
10
|
raise Error::Project, code: :spush_command_unexpected_dimgs_number unless build_configs.one?
|
10
11
|
Dimg.new(config: build_configs.first, project: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
|
11
12
|
dimg.export!(repo, format: '%{repo}:%{tag}')
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Dapp
|
2
|
+
# Project
|
3
|
+
class Project
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
# Tag
|
7
|
+
module Tag
|
8
|
+
def tag(tag)
|
9
|
+
raise Error::Project, code: :tag_command_unexpected_dimgs_number unless build_configs.one?
|
10
|
+
raise Error::Project, code: :tag_command_incorrect_tag, data: { name: tag } unless tag =~ Image::Docker.image_regex
|
11
|
+
Application.new(config: build_configs.first, project: self, ignore_git_fetch: true, should_be_built: true).tap do |app|
|
12
|
+
app.tag!(tag)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end # Project
|
18
|
+
end # Dapp
|
@@ -48,7 +48,7 @@ module Dapp
|
|
48
48
|
# rubocop:enable Metrics/ParameterLists
|
49
49
|
|
50
50
|
def log_secondary_process(message, **kwargs, &blk)
|
51
|
-
log_process(message, **kwargs.merge(style: { message: :secondary, success: :secondary }), &blk)
|
51
|
+
log_process(message, **kwargs.merge(style: { message: :secondary, success: :secondary }, quiet: !log_verbose?), &blk)
|
52
52
|
end
|
53
53
|
|
54
54
|
protected
|
data/lib/dapp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Stolyarov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -404,6 +404,7 @@ files:
|
|
404
404
|
- lib/dapp/cli/stages/flush_repo.rb
|
405
405
|
- lib/dapp/cli/stages/pull.rb
|
406
406
|
- lib/dapp/cli/stages/push.rb
|
407
|
+
- lib/dapp/cli/tag.rb
|
407
408
|
- lib/dapp/config/artifact_dimg.rb
|
408
409
|
- lib/dapp/config/artifact_group.rb
|
409
410
|
- lib/dapp/config/base.rb
|
@@ -483,6 +484,7 @@ files:
|
|
483
484
|
- lib/dapp/project/command/stages/flush_repo.rb
|
484
485
|
- lib/dapp/project/command/stages/pull.rb
|
485
486
|
- lib/dapp/project/command/stages/push.rb
|
487
|
+
- lib/dapp/project/command/tag.rb
|
486
488
|
- lib/dapp/project/dappfile.rb
|
487
489
|
- lib/dapp/project/deps/base.rb
|
488
490
|
- lib/dapp/project/deps/gitartifact.rb
|