dapp 0.5.13 → 0.6.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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +3 -0
  3. data/config/en/common.yml +35 -6
  4. data/config/en/net_status.yml +20 -6
  5. data/lib/dapp.rb +53 -27
  6. data/lib/dapp/application.rb +48 -27
  7. data/lib/dapp/application/git_artifact.rb +1 -1
  8. data/lib/dapp/application/path.rb +2 -18
  9. data/lib/dapp/application/tags.rb +5 -5
  10. data/lib/dapp/build/stage/artifact.rb +8 -3
  11. data/lib/dapp/build/stage/base.rb +43 -30
  12. data/lib/dapp/build/stage/{infra_install.rb → before_install.rb} +6 -6
  13. data/lib/dapp/build/stage/before_setup.rb +27 -0
  14. data/lib/dapp/build/stage/docker_instructions.rb +12 -1
  15. data/lib/dapp/build/stage/from.rb +4 -3
  16. data/lib/dapp/build/stage/{source_1_archive.rb → ga_archive.rb} +7 -7
  17. data/lib/dapp/build/stage/{source_1_archive_dependencies.rb → ga_archive_dependencies.rb} +4 -4
  18. data/lib/dapp/build/stage/{source_base.rb → ga_base.rb} +31 -7
  19. data/lib/dapp/build/stage/{source_dependencies_base.rb → ga_dependencies_base.rb} +5 -6
  20. data/lib/dapp/build/stage/{source_5.rb → ga_latest_patch.rb} +6 -6
  21. data/lib/dapp/build/stage/install/ga_post_install_patch.rb +21 -0
  22. data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +21 -0
  23. data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +21 -0
  24. data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +31 -0
  25. data/lib/dapp/build/stage/install/install.rb +31 -0
  26. data/lib/dapp/build/stage/mod/artifact.rb +9 -19
  27. data/lib/dapp/build/stage/mod/group.rb +42 -0
  28. data/lib/dapp/build/stage/mod/logging.rb +62 -26
  29. data/lib/dapp/build/stage/setup/chef_cookbooks.rb +37 -0
  30. data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +25 -0
  31. data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +31 -0
  32. data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +25 -0
  33. data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +27 -0
  34. data/lib/dapp/build/stage/setup/setup.rb +31 -0
  35. data/lib/dapp/builder/base.rb +9 -6
  36. data/lib/dapp/builder/chef.rb +128 -107
  37. data/lib/dapp/builder/chef/berksfile.rb +3 -0
  38. data/lib/dapp/builder/shell.rb +4 -3
  39. data/lib/dapp/cli.rb +8 -6
  40. data/lib/dapp/cli/base.rb +6 -1
  41. data/lib/dapp/cli/bp.rb +41 -0
  42. data/lib/dapp/cli/build.rb +17 -4
  43. data/lib/dapp/cli/cleanup.rb +24 -0
  44. data/lib/dapp/cli/list.rb +2 -2
  45. data/lib/dapp/cli/push.rb +8 -9
  46. data/lib/dapp/cli/run.rb +3 -4
  47. data/lib/dapp/cli/spush.rb +20 -0
  48. data/lib/dapp/cli/stages.rb +2 -0
  49. data/lib/dapp/cli/stages/cleanup.rb +7 -3
  50. data/lib/dapp/cli/stages/flush.rb +6 -3
  51. data/lib/dapp/config/application.rb +17 -11
  52. data/lib/dapp/config/chef.rb +4 -0
  53. data/lib/dapp/config/docker.rb +3 -2
  54. data/lib/dapp/config/git_artifact.rb +1 -2
  55. data/lib/dapp/config/main.rb +5 -2
  56. data/lib/dapp/config/shell.rb +20 -16
  57. data/lib/dapp/docker_registry.rb +32 -0
  58. data/lib/dapp/docker_registry/base.rb +47 -0
  59. data/lib/dapp/docker_registry/default.rb +18 -0
  60. data/lib/dapp/docker_registry/mod/authorization.rb +62 -0
  61. data/lib/dapp/docker_registry/mod/request.rb +44 -0
  62. data/lib/dapp/error/image.rb +6 -0
  63. data/lib/dapp/error/project.rb +6 -0
  64. data/lib/dapp/error/registry.rb +6 -0
  65. data/lib/dapp/exception/registry.rb +6 -0
  66. data/lib/dapp/git_artifact.rb +6 -7
  67. data/lib/dapp/git_repo/base.rb +1 -1
  68. data/lib/dapp/git_repo/remote.rb +6 -38
  69. data/lib/dapp/helper/sha256.rb +3 -3
  70. data/lib/dapp/helper/shellout.rb +25 -7
  71. data/lib/dapp/helper/streaming.rb +1 -3
  72. data/lib/dapp/image/argument.rb +31 -18
  73. data/lib/dapp/image/docker.rb +15 -8
  74. data/lib/dapp/image/stage.rb +10 -12
  75. data/lib/dapp/lock/base.rb +44 -0
  76. data/lib/dapp/lock/error.rb +14 -0
  77. data/lib/dapp/lock/file.rb +33 -0
  78. data/lib/dapp/prctl.rb +22 -0
  79. data/lib/dapp/project.rb +75 -0
  80. data/lib/dapp/project/command/bp.rb +24 -0
  81. data/lib/dapp/project/command/build.rb +21 -0
  82. data/lib/dapp/project/command/cleanup.rb +24 -0
  83. data/lib/dapp/project/command/common.rb +51 -0
  84. data/lib/dapp/project/command/list.rb +14 -0
  85. data/lib/dapp/project/command/push.rb +21 -0
  86. data/lib/dapp/project/command/run.rb +15 -0
  87. data/lib/dapp/project/command/spush.rb +17 -0
  88. data/lib/dapp/project/command/stages_cleanup.rb +70 -0
  89. data/lib/dapp/project/command/stages_flush.rb +18 -0
  90. data/lib/dapp/project/dappfile.rb +70 -0
  91. data/lib/dapp/project/lock.rb +27 -0
  92. data/lib/dapp/project/logging/base.rb +107 -0
  93. data/lib/dapp/project/logging/process.rb +104 -0
  94. data/lib/dapp/project/paint.rb +16 -0
  95. data/lib/dapp/project/ssh_agent.rb +77 -0
  96. data/lib/dapp/version.rb +1 -1
  97. metadata +74 -27
  98. data/lib/dapp/application/deps/gitartifact.rb +0 -39
  99. data/lib/dapp/application/logging.rb +0 -120
  100. data/lib/dapp/application/system_shellout.rb +0 -63
  101. data/lib/dapp/build/stage/chef_cookbooks.rb +0 -33
  102. data/lib/dapp/build/stage/infra_setup.rb +0 -27
  103. data/lib/dapp/build/stage/install.rb +0 -27
  104. data/lib/dapp/build/stage/setup.rb +0 -27
  105. data/lib/dapp/build/stage/source_1.rb +0 -21
  106. data/lib/dapp/build/stage/source_1_dependencies.rb +0 -27
  107. data/lib/dapp/build/stage/source_2.rb +0 -17
  108. data/lib/dapp/build/stage/source_2_dependencies.rb +0 -17
  109. data/lib/dapp/build/stage/source_3.rb +0 -17
  110. data/lib/dapp/build/stage/source_3_dependencies.rb +0 -23
  111. data/lib/dapp/build/stage/source_4.rb +0 -21
  112. data/lib/dapp/build/stage/source_4_dependencies.rb +0 -27
  113. data/lib/dapp/cli/smartpush.rb +0 -19
  114. data/lib/dapp/controller.rb +0 -119
  115. data/lib/dapp/error/controller.rb +0 -6
  116. data/lib/dapp/helper/log.rb +0 -73
@@ -1,63 +0,0 @@
1
- module Dapp
2
- # Application
3
- class Application
4
- # SystemShellout
5
- module SystemShellout
6
- SYSTEM_SHELLOUT_IMAGE = 'ubuntu:14.04'
7
- SYSTEM_SHELLOUT_VERSION = 4
8
-
9
- def system_shellout_container_name
10
- "dapp_system_shellout_#{hashsum [SYSTEM_SHELLOUT_VERSION,
11
- SYSTEM_SHELLOUT_IMAGE,
12
- Deps::Gitartifact::GITARTIFACT_IMAGE]}"
13
- end
14
-
15
- def system_shellout_container
16
- @system_shellout_container ||= begin
17
- if shellout("docker inspect #{system_shellout_container_name}").exitstatus.nonzero?
18
- volumes_from = [gitartifact_container]
19
- log_secondary_process(t(code: 'process.system_shellout_container_loading'), short: true) do
20
- shellout! ['docker run --detach --privileged',
21
- "--name #{system_shellout_container_name}",
22
- *volumes_from.map { |container| "--volumes-from #{container}" },
23
- '--volume /:/.system_shellout_root',
24
- "#{SYSTEM_SHELLOUT_IMAGE} bash -ec 'while true ; do sleep 1 ; done'"].join(' ')
25
-
26
- shellout! ["docker exec #{system_shellout_container_name}",
27
- "bash -ec '#{[
28
- 'export DEBIAN_FRONTEND=noninteractive',
29
- 'mkdir -p /.system_shellout_root/.dapp',
30
- 'mount --rbind /.dapp /.system_shellout_root/.dapp',
31
- # KOSTYL 0.5 only {
32
- "mkdir -p /.system_shellout_root/tmp/dapp_system_shellout/usr/bin",
33
- 'mount --rbind /usr/bin /.system_shellout_root/tmp/dapp_system_shellout/usr/bin',
34
- 'mount --rbind /.system_shellout_root/sys /sys',
35
- 'if [ -d /sys/fs/selinux ] ; then mount -o remount,ro,bind /sys/fs/selinux ; fi',
36
- 'apt-get update -qq',
37
- 'apt-get install -qq openssh-client'
38
- # } KOSTYL 0.5 only
39
- ].join(' && ')}'"].join(' ')
40
- end
41
- end
42
-
43
- system_shellout_container_name
44
- end
45
- end
46
-
47
- def system_shellout(command, **kwargs)
48
- shellout _to_system_shellout_command(command), **kwargs
49
- end
50
-
51
- def system_shellout!(command, **kwargs)
52
- shellout! _to_system_shellout_command(command), **kwargs
53
- end
54
-
55
- private
56
-
57
- def _to_system_shellout_command(command)
58
- cmd = shellout_pack ["cd #{Dir.pwd}", command].join(' && ')
59
- "docker exec #{system_shellout_container} chroot /.system_shellout_root bash -ec '#{cmd}'"
60
- end
61
- end # SystemShellout
62
- end # Application
63
- end # Dapp
@@ -1,33 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # ChefCookbooks
5
- class ChefCookbooks < Base
6
- def initialize(application, next_stage)
7
- @prev_stage = Setup.new(application, self)
8
- super
9
- end
10
-
11
- def dependencies
12
- [application.builder.chef_cookbooks_checksum]
13
- end
14
-
15
- def image
16
- super do |image|
17
- application.builder.chef_cookbooks(image)
18
- end
19
- end
20
-
21
- protected
22
-
23
- def should_be_not_detailed?
24
- true
25
- end
26
-
27
- def ignore_log_commands?
28
- true
29
- end
30
- end # ChefCookbooks
31
- end # Stage
32
- end # Build
33
- end # Dapp
@@ -1,27 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # InfraSetup
5
- class InfraSetup < Base
6
- def initialize(application, next_stage)
7
- @prev_stage = Source2.new(application, self)
8
- super
9
- end
10
-
11
- def empty?
12
- super && !application.builder.infra_setup?
13
- end
14
-
15
- def dependencies
16
- prev_stage.prev_stage.dependencies
17
- end
18
-
19
- def image
20
- super do |image|
21
- application.builder.infra_setup(image)
22
- end
23
- end
24
- end # InfraSetup
25
- end # Stage
26
- end # Build
27
- end # Dapp
@@ -1,27 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Install
5
- class Install < Base
6
- def initialize(application, next_stage)
7
- @prev_stage = Source1.new(application, self)
8
- super
9
- end
10
-
11
- def empty?
12
- super && !application.builder.install?
13
- end
14
-
15
- def dependencies
16
- prev_stage.prev_stage.dependencies
17
- end
18
-
19
- def image
20
- super do |image|
21
- application.builder.install(image)
22
- end
23
- end
24
- end # Install
25
- end # Stage
26
- end # Build
27
- end # Dapp
@@ -1,27 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Setup
5
- class Setup < Base
6
- def initialize(application, next_stage)
7
- @prev_stage = Source3.new(application, self)
8
- super
9
- end
10
-
11
- def empty?
12
- super && !application.builder.setup?
13
- end
14
-
15
- def dependencies
16
- prev_stage.prev_stage.dependencies
17
- end
18
-
19
- def image
20
- super do |image|
21
- application.builder.setup(image)
22
- end
23
- end
24
- end # Setup
25
- end # Stage
26
- end # Build
27
- end # Dapp
@@ -1,21 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source1
5
- class Source1 < SourceBase
6
- def initialize(application, next_stage)
7
- @prev_stage = Source1Dependencies.new(application, self)
8
- super
9
- end
10
-
11
- def prev_source_stage
12
- dependencies_stage.prev_stage
13
- end
14
-
15
- def next_source_stage
16
- super.next_stage
17
- end
18
- end # Source1
19
- end # Stage
20
- end # Build
21
- end # Dapp
@@ -1,27 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source1Dependencies
5
- class Source1Dependencies < SourceDependenciesBase
6
- def initialize(application, next_stage)
7
- @prev_stage = Source1Archive.new(application, self)
8
- super
9
- end
10
-
11
- def dependencies
12
- [install_dependencies_files_checksum, application.builder.install_checksum]
13
- end
14
-
15
- def empty?
16
- super || dependencies_empty?
17
- end
18
-
19
- private
20
-
21
- def install_dependencies_files_checksum
22
- @install_dependencies_files_checksum ||= dependencies_files_checksum(application.config._install_dependencies)
23
- end
24
- end # Source1Dependencies
25
- end # Stage
26
- end # Build
27
- end # Dapp
@@ -1,17 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source2
5
- class Source2 < SourceBase
6
- def initialize(application, next_stage)
7
- @prev_stage = Source2Dependencies.new(application, self)
8
- super
9
- end
10
-
11
- def prev_source_stage
12
- super.prev_stage
13
- end
14
- end # Source2
15
- end # Stage
16
- end # Build
17
- end # Dapp
@@ -1,17 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source2Dependencies
5
- class Source2Dependencies < SourceDependenciesBase
6
- def initialize(application, next_stage)
7
- @prev_stage = Artifact.new(application, self)
8
- super
9
- end
10
-
11
- def dependencies
12
- [application.builder.infra_setup_checksum]
13
- end
14
- end # Source2Dependencies
15
- end # Stage
16
- end # Build
17
- end # Dapp
@@ -1,17 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source3
5
- class Source3 < SourceBase
6
- def initialize(application, next_stage)
7
- @prev_stage = Source3Dependencies.new(application, self)
8
- super
9
- end
10
-
11
- def next_source_stage
12
- super.next_stage
13
- end
14
- end # Source3
15
- end # Stage
16
- end # Build
17
- end # Dapp
@@ -1,23 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source3Dependencies
5
- class Source3Dependencies < SourceDependenciesBase
6
- def initialize(application, next_stage)
7
- @prev_stage = InfraSetup.new(application, self)
8
- super
9
- end
10
-
11
- def dependencies
12
- [setup_dependencies_files_checksum, application.builder.setup_checksum]
13
- end
14
-
15
- private
16
-
17
- def setup_dependencies_files_checksum
18
- @setup_files_checksum ||= dependencies_files_checksum(application.config._setup_dependencies)
19
- end
20
- end # Source3Dependencies
21
- end # Stage
22
- end # Build
23
- end # Dapp
@@ -1,21 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source4
5
- class Source4 < SourceBase
6
- def initialize(application, next_stage)
7
- @prev_stage = Source4Dependencies.new(application, self)
8
- super
9
- end
10
-
11
- def prev_source_stage
12
- super.prev_stage
13
- end
14
-
15
- def next_source_stage
16
- next_stage
17
- end
18
- end # Source4
19
- end # Stage
20
- end # Build
21
- end # Dapp
@@ -1,27 +0,0 @@
1
- module Dapp
2
- module Build
3
- module Stage
4
- # Source4Dependencies
5
- class Source4Dependencies < SourceDependenciesBase
6
- MAX_PATCH_SIZE = 1024 * 1024
7
-
8
- def initialize(application, next_stage)
9
- @prev_stage = ChefCookbooks.new(application, self)
10
- super
11
- end
12
-
13
- def dependencies
14
- [(changes_size_since_source3 / MAX_PATCH_SIZE).to_i]
15
- end
16
-
17
- private
18
-
19
- def changes_size_since_source3
20
- application.git_artifacts.map do |git_artifact|
21
- git_artifact.patch_size(prev_stage.prev_stage.prev_stage.layer_commit(git_artifact), git_artifact.latest_commit)
22
- end.reduce(0, :+)
23
- end
24
- end # Source4Dependencies
25
- end # Stage
26
- end # Build
27
- end # Dapp
@@ -1,19 +0,0 @@
1
- require 'mixlib/cli'
2
-
3
- module Dapp
4
- class CLI
5
- # CLI smartpush subcommand
6
- class Smartpush < Push
7
- banner <<BANNER.freeze
8
- Version: #{Dapp::VERSION}
9
-
10
- Usage:
11
- dapp smartpush [options] [PATTERN ...] REPOPREFIX
12
-
13
- PATTERN Applications to process [default: *].
14
- REPOPREFIX Pushed image name prefix.
15
- Options:
16
- BANNER
17
- end
18
- end
19
- end
@@ -1,119 +0,0 @@
1
- module Dapp
2
- # Controller
3
- class Controller
4
- include Helper::Log
5
- include Helper::Shellout
6
-
7
- attr_reader :cli_options, :patterns
8
-
9
- def initialize(cli_options: {}, patterns: nil)
10
- @cli_options = cli_options
11
- @cli_options[:log_indent] = 0
12
-
13
- @patterns = patterns || []
14
- @patterns << '*' unless @patterns.any?
15
-
16
- paint_initialize
17
- Helper::I18n.initialize
18
- end
19
-
20
- def run(docker_options, command)
21
- raise Error::Controller, code: :run_command_unexpected_apps_number unless build_configs.one?
22
- Application.new(config: build_configs.first, cli_options: cli_options, ignore_git_fetch: true).run(docker_options, command)
23
- end
24
-
25
- def build
26
- build_configs.each do |config|
27
- log_step(config._name)
28
- with_log_indent do
29
- Application.new(config: config, cli_options: cli_options).build!
30
- end
31
- end
32
- end
33
-
34
- def list
35
- build_configs.each { |config| log(config._name) }
36
- end
37
-
38
- def push(repo)
39
- raise Error::Controller, code: :push_command_unexpected_apps_number unless build_configs.one?
40
- Application.new(config: build_configs.first, cli_options: cli_options, ignore_git_fetch: true).export!(repo)
41
- end
42
-
43
- def smartpush(repo_prefix)
44
- build_configs.each do |config|
45
- log_step(config._name)
46
- repo = File.join(repo_prefix, config._name)
47
- with_log_indent { Application.new(config: config, cli_options: cli_options, ignore_git_fetch: true).export!(repo) }
48
- end
49
- end
50
-
51
- def stages_flush
52
- build_configs.map(&:_basename).uniq.each do |basename|
53
- log(basename)
54
- shellout(%{docker rmi $(docker images --format="{{.Repository}}:{{.Tag}}" #{basename}-dappstage)})
55
- end
56
- end
57
-
58
- def stages_cleanup
59
- build_configs.map(&:_basename).uniq.each do |basename|
60
- log(basename)
61
- shellout(%{docker rmi $(docker images -f "dangling=true" -f "label=dapp=#{basename}" -q)})
62
- end
63
- end
64
-
65
- private
66
-
67
- def build_configs
68
- @configs ||= begin
69
- if File.exist? dappfile_path
70
- dappfiles = dappfile_path
71
- elsif (dappfiles = dapps_dappfiles_pathes).empty? && (dappfiles = search_dappfile_up).nil?
72
- raise Error::Controller, code: :dappfile_not_found
73
- end
74
- Array(dappfiles).map { |dappfile| apps(dappfile, app_filters: patterns) }.flatten.tap do |apps|
75
- raise Error::Controller, code: :no_such_app, data: { patterns: patterns.join(', ') } if apps.empty?
76
- end
77
- end
78
- end
79
-
80
- def apps(dappfile_path, app_filters:)
81
- config = Config::Main.new(dappfile_path: dappfile_path) do |conf|
82
- begin
83
- conf.instance_eval File.read(dappfile_path), dappfile_path
84
- rescue SyntaxError, StandardError => e
85
- backtrace = e.backtrace.find { |line| line.start_with?(dappfile_path) }
86
- message = e.is_a?(NoMethodError) ? e.message[/.*(?= for)/] : e.message
87
- message = "#{backtrace[/.*(?=:in)/]}: #{message}" if backtrace
88
- raise Error::Dappfile, code: :incorrect, data: { error: e.class.name, message: message }
89
- end
90
- end
91
- config._apps.select { |app| app_filters.any? { |pattern| File.fnmatch(pattern, app._name) } }
92
- end
93
-
94
- def dappfile_path
95
- File.join [cli_options[:dir], 'Dappfile'].compact
96
- end
97
-
98
- def dapps_dappfiles_pathes
99
- Dir.glob(File.join([cli_options[:dir], '.dapps', '*', 'Dappfile'].compact))
100
- end
101
-
102
- def search_dappfile_up
103
- cdir = Pathname(File.expand_path(cli_options[:dir] || Dir.pwd))
104
- until (cdir = cdir.parent).root?
105
- next unless (path = cdir.join('Dappfile')).exist?
106
- return path.to_s
107
- end
108
- end
109
-
110
- def paint_initialize
111
- Paint.mode = case cli_options[:log_color]
112
- when 'auto' then STDOUT.tty? ? 8 : 0
113
- when 'on' then 8
114
- when 'off' then 0
115
- else raise
116
- end
117
- end
118
- end # Controller
119
- end # Dapp