dply 0.2.19 → 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.
Files changed (96) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +4 -0
  3. data/Rakefile +0 -14
  4. data/TODO +0 -1
  5. data/code_dump/old_remote_task.rb +2 -0
  6. data/{dev_bin → dev_exe}/dplyr +0 -0
  7. data/{dev_bin → dev_exe}/drake +1 -1
  8. data/dply.gemspec +2 -2
  9. data/{bin → exe}/dplyr +0 -0
  10. data/{bin → exe}/drake +12 -14
  11. data/lib/dply/TEST_TODO +50 -0
  12. data/lib/dply/app_config.rb +108 -0
  13. data/lib/dply/base_config.rb +110 -0
  14. data/lib/dply/build.rb +17 -11
  15. data/lib/dply/build_config.rb +28 -96
  16. data/lib/dply/bundle.rb +7 -30
  17. data/lib/dply/cli/build.rb +5 -12
  18. data/lib/dply/cli/ctl.rb +7 -8
  19. data/lib/dply/cli/deploy.rb +6 -10
  20. data/lib/dply/cli/devbuild.rb +6 -10
  21. data/lib/dply/cli/install_pkgs.rb +2 -3
  22. data/lib/dply/cli/run.rb +27 -0
  23. data/lib/dply/cli/status.rb +1 -2
  24. data/lib/dply/cli/task.rb +6 -12
  25. data/lib/dply/code_archive.rb +123 -0
  26. data/lib/dply/command.rb +57 -0
  27. data/lib/dply/config_downloader.rb +3 -2
  28. data/lib/dply/curl.rb +1 -5
  29. data/lib/dply/custom_logger.rb +18 -1
  30. data/lib/dply/deplist.rb +16 -48
  31. data/lib/dply/deploy_config.rb +34 -0
  32. data/lib/dply/elf.rb +60 -0
  33. data/lib/dply/env.rb +9 -0
  34. data/lib/dply/git.rb +15 -8
  35. data/lib/dply/helper.rb +21 -33
  36. data/lib/dply/linker.rb +27 -27
  37. data/lib/dply/lock.rb +2 -9
  38. data/lib/dply/logger.rb +1 -1
  39. data/lib/dply/pkgs.rb +9 -11
  40. data/lib/dply/release.rb +2 -2
  41. data/lib/dply/{archive.rb → remote_archive.rb} +1 -1
  42. data/lib/dply/repo.rb +3 -3
  43. data/lib/dply/rpm.rb +12 -20
  44. data/lib/dply/scripts/depcheck.rb +4 -0
  45. data/lib/dply/shared_dirs.rb +1 -1
  46. data/lib/dply/strategy/archive.rb +15 -22
  47. data/lib/dply/strategy/base.rb +82 -0
  48. data/lib/dply/strategy/git.rb +18 -19
  49. data/lib/dply/task_dsl.rb +101 -0
  50. data/lib/dply/util.rb +75 -0
  51. data/lib/dply/venv.rb +53 -0
  52. data/lib/dply/version.rb +1 -1
  53. data/lib/dply/yum.rb +21 -31
  54. data/lib/dplyr/consul.rb +1 -1
  55. data/spec/dply/base_config_spec.rb +178 -0
  56. data/spec/dply/bundle_spec.rb +100 -0
  57. data/spec/dply/command_spec.rb +190 -0
  58. data/spec/dply/curl_spec.rb +41 -0
  59. data/spec/dply/deplist_spec.rb +48 -0
  60. data/spec/dply/elf_spec.rb +64 -0
  61. data/spec/dply/env_spec.rb +57 -0
  62. data/spec/dply/git_spec.rb +136 -0
  63. data/spec/dply/helper_spec.rb +168 -0
  64. data/spec/dply/linker_spec.rb +81 -0
  65. data/spec/dply/lock_spec.rb +24 -0
  66. data/spec/dply/pkgs_spec.rb +105 -0
  67. data/spec/dply/repo_spec.rb +58 -0
  68. data/spec/dply/rpm_spec.rb +32 -0
  69. data/spec/dply/yum_spec.rb +29 -0
  70. data/spec/integration/archive_flow_spec.rb +87 -0
  71. data/spec/integration/git_flow_spec.rb +63 -0
  72. data/spec/repo.rb +27 -0
  73. data/spec/spec_helper.rb +44 -0
  74. data/spec/test_data/build.tar.gz +0 -0
  75. data/spec/test_data/build.tar.gz.md5 +1 -0
  76. data/spec/test_data/bundle/gems_installed/Gemfile +1 -0
  77. data/spec/test_data/bundle/gems_not_installed/Gemfile +2 -0
  78. data/spec/test_data/bundle/no_gemfile/.gitkeep +0 -0
  79. data/spec/test_data/command/test.rb +7 -0
  80. data/spec/test_data/elf/elf +0 -0
  81. data/spec/test_data/elf/libpgtypes.so.3 +0 -0
  82. data/spec/test_data/elf/not_elf +1 -0
  83. data/spec/test_data/sample_repo/.dply.lock +0 -0
  84. data/spec/test_data/sample_repo/Gemfile +2 -0
  85. data/spec/test_data/sample_repo/Rakefile +3 -0
  86. data/spec/test_data/sample_repo/app.rb +1 -0
  87. data/spec/test_data/sample_repo/dply/app.rb +33 -0
  88. data/spec/test_data/sample_repo/lib/libacl.so.1 +0 -0
  89. data/spec/test_data/sample_repo/pkgs.yml +2 -0
  90. data/spec/webserver.rb +21 -0
  91. metadata +96 -28
  92. data/lib/dply/cli/app_task.rb +0 -38
  93. data/lib/dply/config.rb +0 -120
  94. data/lib/dply/config_struct.rb +0 -52
  95. data/lib/dply/rakelib/drake.rake +0 -33
  96. data/lib/dply/tasks.rb +0 -136
@@ -1,101 +1,33 @@
1
- require 'ostruct'
2
- require 'dply/helper'
1
+ require 'dply/base_config'
3
2
 
4
3
  module Dply
5
- class BuildConfig
6
-
7
- include Helper
8
-
9
- def initialize(dir: nil, read_config: true)
10
- @read_config = read_config
11
- @dir = (dir || Dir.pwd)
4
+ class BuildConfig < BaseConfig
5
+ define_opts do
6
+ opt :dir
7
+ opt :task
8
+ opt :branch
9
+ opt :repo
10
+ opt :mirror
11
+ opt :git
12
+ opt :no_pull
13
+ opt :revision
14
+ opt :config_map, type: Hash
15
+ opt :dir_map, type: Hash
16
+ opt :shared_dirs, type: Array
17
+ opt :config_download_url
18
+ opt :config_skip_download, type: Array
19
+ end
20
+
21
+ def default_config
22
+ dir Dir.pwd
23
+ git true
24
+ task :build
25
+ branch "master"
26
+ shared_dirs []
27
+ dir_map({
28
+ "tmp" => "tmp",
29
+ "log" => "log"
30
+ })
12
31
  end
13
-
14
- def config
15
- return @config if @config
16
- @config = {
17
- dir: @dir,
18
- task: "app:build",
19
- branch: :master,
20
- repo: nil,
21
- git: true,
22
- env: {},
23
- config_map: nil,
24
- dir_map: nil,
25
- shared_dirs: [],
26
- config_skip_download: [],
27
- config_download_url: nil
28
- }
29
- read_from_file if @read_config
30
- return @config
31
- end
32
-
33
- def branch(branch)
34
- set :branch, branch
35
- end
36
-
37
- def task(task)
38
- set :task, task
39
- end
40
-
41
- def repo(repo)
42
- set :repo, repo
43
- end
44
-
45
- def config_map(map)
46
- set :config_map, map
47
- end
48
-
49
- def config_skip_download(list)
50
- set :config_skip_download, list
51
- end
52
-
53
- def config_download_url(url)
54
- set :config_download_url, url
55
- end
56
-
57
- def dir_map(map)
58
- set :dir_map, map
59
- end
60
-
61
- def set_env(key, value)
62
- @config[:env].store key, value
63
- end
64
-
65
- def set(key, value)
66
- @config.store key, value
67
- end
68
-
69
- def to_struct
70
- OpenStruct.new(config)
71
- end
72
-
73
- def env(h)
74
- raise if not h.is_a? Hash
75
- @config[:env] = h
76
- @config[:env].each do |k,v|
77
- ENV[k.to_s] = v.to_s
78
- end
79
- end
80
-
81
- def config_file
82
- @config_file ||= "#{@dir}/build.rb"
83
- end
84
-
85
- def shared_dirs(dirs)
86
- raise if not dirs.is_a? Array
87
- @config[:shared_dirs] = dirs
88
- end
89
-
90
- def read_from_file
91
- if not File.readable? config_file
92
- error "build.rb not found in #{@dir}"
93
- return
94
- end
95
- instance_eval(File.read(config_file), config_file)
96
- rescue NoMethodError => e
97
- error "invalid option used in config: #{e.name}"
98
- end
99
-
100
32
  end
101
33
  end
@@ -1,7 +1,6 @@
1
1
  require 'dply/helper'
2
2
  require 'fileutils'
3
3
  require 'yaml'
4
- require 'shellwords'
5
4
 
6
5
  module Dply
7
6
  class Bundle
@@ -9,26 +8,22 @@ module Dply
9
8
  include Helper
10
9
 
11
10
  def install
12
- init
11
+ return if not gemfile_exists?
12
+ write_config
13
13
  return if check
14
14
  cmd "bundle install -j5 --deployment"
15
15
  end
16
16
 
17
- def rake(task)
18
- rakelib = Shellwords.shellescape "#{__dir__}/rakelib"
19
- rake_cmd = %(rake -R #{rakelib} -Nf dply/Rakefile #{task})
20
- command = gemfile_exists? ? "bundle exec #{rake_cmd}" : rake_cmd
21
- cmd command, env: env, display: false
22
- end
23
-
24
17
  def clean
18
+ return if not gemfile_exists?
19
+ write_config
25
20
  cmd "bundle clean"
26
21
  end
27
22
 
28
23
  private
29
24
 
30
- def init
31
- @init ||= begin
25
+ def write_config
26
+ @write_config ||= begin
32
27
  h = {
33
28
  "BUNDLE_PATH" => "vendor/bundle",
34
29
  "BUNDLE_FROZEN" => "1",
@@ -43,26 +38,8 @@ module Dply
43
38
  system "bundle check > /dev/null"
44
39
  end
45
40
 
46
- def env
47
- @env ||= begin
48
- env = {}
49
- env.merge! env_from_yml(".env.yml")
50
- env.merge! env_from_yml("config/env.yml")
51
- env
52
- end
53
- end
54
-
55
- def env_from_yml(path)
56
- if not File.readable? path
57
- logger.debug "skipped loading env from #{path}"
58
- return {}
59
- end
60
- require 'yaml'
61
- YAML.load_file(path)
62
- end
63
-
64
41
  def gemfile_exists?
65
- File.exists? "Gemfile"
42
+ File.exist? "Gemfile"
66
43
  end
67
44
 
68
45
  end
@@ -24,41 +24,34 @@ module Dply
24
24
  end
25
25
 
26
26
  def config
27
- @config ||= ::Dply::BuildConfig.new.to_struct
28
- end
29
-
30
- def dir
31
- @dir ||= Dir.pwd
27
+ @config ||= BuildConfig.build("#{Dir.pwd}/build.rb")
32
28
  end
33
29
 
34
30
  def lock
35
- @lock ||= ::Dply::Lock.new
31
+ @lock ||= Lock.new(Dir.pwd)
36
32
  end
37
33
 
38
34
  def opts
39
35
  OptionParser.new do |opts|
40
36
 
41
37
  opts.banner = "Usage: drake build [options] [target]"
42
-
38
+
43
39
  opts.on("-b", "--branch [BRANCH]" , "Specify git branch") do |b|
44
40
  config.branch = b
45
41
  end
46
42
 
47
43
  opts.on("-r", "--revision [REVISION]", "Specify revision") do |r|
48
44
  config.revision = r
45
+ ENV["BUILD_NUMBER"] = r.to_s
49
46
  end
50
47
 
51
48
  opts.on("--no-pull", "Enable/disable git pull") do |e|
52
49
  config.no_pull = true
53
50
  end
54
51
 
55
- opts.on("--use-yum", "use yum to install packages") do |e|
56
- config.use_yum = true
57
- end
58
-
59
52
  opts.on("--skip-git", "Disable git") do |e|
60
53
  config.git = false
61
- end
54
+ end
62
55
 
63
56
  opts.on("-h", "--help", "Help") do
64
57
  puts opts
@@ -1,7 +1,7 @@
1
1
  require 'dply/lock'
2
2
  require 'dply/strategy'
3
- require 'dply/config'
4
- require 'dply/tasks'
3
+ require 'dply/deploy_config'
4
+ require 'dply/util'
5
5
 
6
6
  module Dply
7
7
  module Cli
@@ -10,9 +10,8 @@ module Dply
10
10
  def run(command)
11
11
  case command
12
12
  when :start, :stop, :reopen_logs
13
- config
14
13
  lock.acquire
15
- Dir.chdir("current") { tasks.send command.to_sym }
14
+ Dir.chdir("current") { util.run command }
16
15
  when :reload
17
16
  lock.acquire
18
17
  strategy.reload
@@ -24,15 +23,15 @@ module Dply
24
23
  end
25
24
 
26
25
  def config
27
- @config ||= Config.new.to_struct
26
+ @config ||= DeployConfig.build("#{Dir.pwd}/deploy.rb")
28
27
  end
29
28
 
30
29
  def lock
31
- @lock ||= Lock.new
30
+ @lock ||= Lock.new(Dir.pwd)
32
31
  end
33
32
 
34
- def tasks
35
- @tasks ||= ::Dply::Tasks.new
33
+ def util
34
+ @util ||= ::Dply::Util.new
36
35
  end
37
36
 
38
37
  end
@@ -1,7 +1,7 @@
1
1
  require 'dply/strategy'
2
2
  require 'dply/logger'
3
3
  require 'dply/lock'
4
- require 'dply/config'
4
+ require 'dply/deploy_config'
5
5
 
6
6
  module Dply
7
7
  module Cli
@@ -26,18 +26,18 @@ module Dply
26
26
  end
27
27
 
28
28
  def lock
29
- @lock ||= Lock.new
29
+ @lock ||= Lock.new(Dir.pwd)
30
30
  end
31
31
 
32
32
  def config
33
- @config ||= Config.new.to_struct
33
+ @config ||= DeployConfig.build("#{Dir.pwd}/deploy.rb")
34
34
  end
35
35
 
36
36
  def opts
37
37
  OptionParser.new do |opts|
38
38
 
39
39
  opts.banner = "Usage: dply deploy [options] [target]"
40
-
40
+
41
41
  opts.on("-b", "--branch [BRANCH]" , "Specify git branch") do |b|
42
42
  config.branch = b
43
43
  end
@@ -52,14 +52,10 @@ module Dply
52
52
 
53
53
  opts.on("--skip-git", "Disable git") do |e|
54
54
  options[:skip_git] = true
55
- end
56
-
57
- opts.on("--skip-bundler", "Skip bundle install") do |e|
58
- options[:skip_bundler] = true
59
55
  end
60
56
 
61
- opts.on("--use-yum", "use yum to install packages") do |e|
62
- options[:use_yum] = true
57
+ opts.on("--skip-bundler", "Skip bundle install") do |e|
58
+ options[:skip_bundler] = true
63
59
  end
64
60
 
65
61
  opts.on("-h", "--help", "Help") do
@@ -1,6 +1,6 @@
1
1
  require 'dply/logger'
2
2
  require 'dply/lock'
3
- require 'dply/tasks'
3
+ require 'dply/util'
4
4
  require 'fileutils'
5
5
 
6
6
  module Dply
@@ -24,18 +24,18 @@ module Dply
24
24
  FileUtils.mkdir_p build_artifacts
25
25
 
26
26
  clear_bundle_config
27
- tasks.install_pkgs(build_mode: true, use_yum: @options[:use_yum])
28
- tasks.build "app:build"
27
+ util.install_pkgs(build_mode: true)
28
+ util.run :build
29
29
  ensure
30
30
  clear_bundle_config
31
31
  end
32
32
 
33
- def tasks
34
- @tasks ||= ::Dply::Tasks.new
33
+ def util
34
+ @util ||= ::Dply::Util.new
35
35
  end
36
36
 
37
37
  def lock
38
- @lock ||= ::Dply::Lock.new
38
+ @lock ||= Lock.new(Dir.pwd)
39
39
  end
40
40
 
41
41
  def clear_bundle_config
@@ -51,10 +51,6 @@ module Dply
51
51
  @options[:revision] = r
52
52
  end
53
53
 
54
- opts.on("--use-yum", "use yum to install packages") do |e|
55
- @options[:use_yum] = true
56
- end
57
-
58
54
  opts.on("-h", "--help", "Help") do
59
55
  puts opts
60
56
  exit
@@ -15,7 +15,7 @@ module Dply
15
15
  def run
16
16
  opts.parse!(@argv)
17
17
  error "pkgs.yml cannot be a symlink" if File.symlink? "pkgs.yml"
18
- pkgs = Pkgs.new
18
+ pkgs = Pkgs.new("pkgs.yml")
19
19
  pkgs.install(build_mode: @options[:build_mode])
20
20
  puts "installed"
21
21
  end
@@ -24,7 +24,7 @@ module Dply
24
24
  OptionParser.new do |opts|
25
25
 
26
26
  opts.banner = "Usage: drake install-pkgs [options] [target]"
27
-
27
+
28
28
  opts.on("-b" , "Build mode") do |b|
29
29
  @options[:build_mode] = true
30
30
  end
@@ -36,7 +36,6 @@ module Dply
36
36
  end
37
37
  end
38
38
 
39
-
40
39
  end
41
40
  end
42
41
  end
@@ -0,0 +1,27 @@
1
+ require 'dply/logger'
2
+ require 'dply/lock'
3
+ require 'dply/app_config'
4
+
5
+ module Dply
6
+ module Cli
7
+ class Run
8
+
9
+ include Logger
10
+
11
+ def initialize(argv)
12
+ @argv = argv
13
+ end
14
+
15
+ def run
16
+ lock.acquire
17
+ app_config = AppConfig.new
18
+ app_config.run_task @argv.shift
19
+ end
20
+
21
+ def lock
22
+ @lock ||= Lock.new(Dir.pwd)
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -1,6 +1,5 @@
1
1
  require 'dply/logger'
2
2
  require 'dply/release_helper'
3
- require 'dply/config'
4
3
 
5
4
  module Dply
6
5
  module Cli
@@ -19,7 +18,7 @@ module Dply
19
18
  def print_status
20
19
  r = current_release
21
20
  color = r[:deployed] ? :green : :red
22
- logger.info "#{r[:revision].send color} #{r[:project]} #{r[:branch]} #{r[:timestamp]}"
21
+ logger.info "#{r[:revision].send color} #{r[:project]} #{r[:branch]} #{r[:timestamp]}"
23
22
  end
24
23
 
25
24
  def current_release
@@ -1,7 +1,6 @@
1
1
  require 'dply/logger'
2
2
  require 'dply/lock'
3
- require 'dply/strategy'
4
- require 'dply/config'
3
+ require 'dply/app_config'
5
4
 
6
5
  module Dply
7
6
  module Cli
@@ -17,19 +16,14 @@ module Dply
17
16
  task_name = @argv.shift
18
17
  error "task name not specified" if not task_name
19
18
  lock.acquire
20
- strategy.task(task_name)
21
- end
22
-
23
- def strategy
24
- @strategy ||= Strategy.load(config, {})
25
- end
26
-
27
- def config
28
- @config ||= Config.new.to_struct
19
+ Dir.chdir "current" do
20
+ app_config = AppConfig.new
21
+ app_config.run_task task_name
22
+ end
29
23
  end
30
24
 
31
25
  def lock
32
- @lock ||= Lock.new
26
+ @lock ||= Lock.new(Dir.pwd)
33
27
  end
34
28
 
35
29
  end