dapp 0.7.2 → 0.7.3
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/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
|