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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bf43174e5252c0faeb8aef5c900dc0cf0c988fc1
4
- data.tar.gz: 4dae0c3e99804ae6d9feab5a8d8ae875681122e0
2
+ SHA256:
3
+ metadata.gz: ffaa634a168cfe8ccaab138bff92455a00ea17fab5ed722046add3e4ad9107f1
4
+ data.tar.gz: 9890f68e334f77d50bcef82fb1b508c137c52f26b5a39b4ff872cd4180f2e6ce
5
5
  SHA512:
6
- metadata.gz: c43c24b1062726c5372ad4a350e54abde63557ea97722f2b6902e7be6cb3389f68c301d3eef900aa0c783fdbf206a0616070b825bec49e6dacc727840d6b2506
7
- data.tar.gz: d892b00aa2efadefbb6b024a47fad9623aff43d680085ae61613d51da2e32775d7f0e2c8d1038b22490d4387d9a0004d17a1987f27968f1baa74ee5a2dc13873
6
+ metadata.gz: 3a2991743833049bb2ec714dbc3da301affae32812e0f8f806a9a96104b920291df9a1ee8563b2e71e304df89d5e1e8b68b426ec2a79e3033e315d46c9b2e7be
7
+ data.tar.gz: 2c99051eec06e0dbb9e25cd1c9d0ea804073db65f0355bf1931b13a8749911e51080e49008564b905202944b0e232afd3bbdade973ab80da3d413a782df3ed8f
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
4
+ --warnings
data/Rakefile CHANGED
@@ -7,17 +7,3 @@ Rake::TestTask.new do |t|
7
7
  t.pattern = "test/unit/*_test.rb"
8
8
  end
9
9
 
10
- task :dev_install do
11
- load './lib/dply/version.rb'
12
- version = Dply::VERSION
13
- sh "gem build dply.gemspec"
14
- sh "gem install dply-#{version}.gem"
15
- end
16
-
17
-
18
- file "wtf" do |t|
19
- cp "dply.gemspec", t.name
20
- end
21
-
22
- task :lol => :wtf
23
-
data/TODO CHANGED
@@ -1,4 +1,3 @@
1
1
  - packages.yml
2
2
  - rpm -V --nofiles --nodeps --noscripts rbgem-bundler rbgem-unicorn ImageMagick-devel ImageMagick readline-devel zlib-devel nodejs geos1-devel
3
3
  - sudo yum install
4
- - shell escape everywhere wherever backticks used (curl)
@@ -78,6 +78,8 @@ module Dply
78
78
 
79
79
  def handle_ready_stream(stream)
80
80
  host_string = "#{@io_names[stream]}"
81
+ #readline is bad here...will block
82
+ #should use read_nonblock to read full lines and keep partial lines in fd specific old buffer...then concatenate old_buffer and new lines
81
83
  printf @job_output_template, host_string, stream.readline
82
84
  return false
83
85
  rescue EOFError,Errno::ECONNRESET, Errno::EPIPE, Errno::EIO => e
File without changes
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
3
3
  $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
4
- load __dir__ + '/../bin/drake'
4
+ load __dir__ + '/../exe/drake'
@@ -13,11 +13,11 @@ Gem::Specification.new do |spec|
13
13
  spec.license = "MIT"
14
14
 
15
15
  spec.files = `git ls-files -z`.split("\x0")
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.bindir = "exe"
17
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
17
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
19
  spec.require_paths = ["lib"]
19
20
  spec.add_dependency "ruby-elf", "~> 1.0"
20
- spec.add_dependency "ruby-filemagic", "~> 0.7"
21
21
 
22
22
  spec.add_development_dependency "bundler", "~> 1.6"
23
23
  spec.add_development_dependency "rake"
File without changes
@@ -5,9 +5,7 @@ $stdout.sync = true
5
5
 
6
6
  require 'optparse'
7
7
  require 'dply/error'
8
- require 'dply/version'
9
8
  require 'dply/logger'
10
- require 'dply/config'
11
9
  require 'pathname'
12
10
 
13
11
  File.umask 0022
@@ -15,16 +13,16 @@ File.umask 0022
15
13
  logger = ::Dply::Logger.logger
16
14
 
17
15
  options = {}
18
- opts_parser = OptionParser.new do |opts|
19
-
20
- banner = []
16
+ opts_parser = OptionParser.new do |opts|
17
+
18
+ banner = []
21
19
  banner << "Usage: drake [global options] command [options] args"
22
20
  banner << "Commands: deploy reload task"
23
-
21
+
24
22
  banner << "Options: "
25
23
  opts.banner = banner.join("\n")
26
24
 
27
- opts.on("-d", "--dir [DEPLOY DIR]" , "Set dir") do |d|
25
+ opts.on("-d", "--dir [DEPLOY DIR]" , "Set dir") do |d|
28
26
  path = Pathname.new(d)
29
27
  raise ::Dply::Error, "dir path must be absolute" if path.relative?
30
28
  options[:dir] = path
@@ -35,6 +33,7 @@ opts_parser = OptionParser.new do |opts|
35
33
  end
36
34
 
37
35
  opts.on("-v", "--version", "Show version") do |v|
36
+ require 'dply/version'
38
37
  puts ::Dply::VERSION
39
38
  exit
40
39
  end
@@ -51,10 +50,10 @@ opts_parser = OptionParser.new do |opts|
51
50
  logger.trace_mode = true
52
51
  end
53
52
 
54
- opts.on_tail("-h", "--help", "Show this message") do
53
+ opts.on_tail("-h", "--help", "Show this message") do
55
54
  puts opts
56
55
  exit
57
- end
56
+ end
58
57
  end
59
58
 
60
59
  def run_cli(command, argv)
@@ -75,15 +74,15 @@ begin
75
74
  case command
76
75
  when :deploy, :task, :app_task,
77
76
  :build, :depcheck, :"install-pkgs",
78
- :status, :devbuild, :setup
77
+ :status, :devbuild, :setup, :run
79
78
  run_cli command, ARGV
80
79
  when :reload, :stop, :start, :reopen_logs
81
80
  require 'dply/cli/ctl'
82
81
  ctl = Dply::Cli::Ctl.new
83
82
  ctl.run command
84
- when /\A[a-zA-Z_\-0-9]+[:][a-zA-Z_\-0-9]+\z/
85
- require 'dply/tasks'
86
- ::Dply::Tasks.new.rake command.to_s
83
+ when :console
84
+ require 'pry'
85
+ binding.pry
87
86
  when :''
88
87
  puts opts_parser
89
88
  else
@@ -101,4 +100,3 @@ rescue OptionParser::InvalidOption, OptionParser::MissingArgument, ::Dply::Error
101
100
  abort
102
101
  end
103
102
  end
104
-
@@ -0,0 +1,50 @@
1
+ NN: version.rb
2
+ NN: error.rb
3
+ NN: custom_logger.rb
4
+ NN: logger.rb
5
+
6
+ D: bundle.rb
7
+ D: command.rb
8
+ D: elf.rb
9
+ D: env.rb
10
+ D: linker.rb
11
+ D: rpm.rb
12
+ D: yum.rb
13
+ D: pkgs.rb
14
+ D: curl.rb
15
+
16
+ E: repo.rb
17
+ E: git.rb
18
+ E: deplist.rb
19
+ E: helper.rb
20
+ E: config_downloader.rb
21
+ E: remote_archive.rb
22
+
23
+
24
+
25
+ ?: code_archive.rb
26
+ ?: config.rb
27
+ ?: release.rb
28
+ ?: task_dsl.rb
29
+ ?: tasklib.rb
30
+ ?: tasks_config.rb
31
+ DSL: build.rb
32
+ E: config_struct.rb
33
+ E: jenkins.rb
34
+ E: lock.rb
35
+ E: release_helper.rb
36
+ E: setup.rb
37
+ E: tasks.rb
38
+ H: build_config.rb
39
+ TEST_TODO
40
+ WTF: shared_dirs.rb
41
+ strategy
42
+ strategy.rb
43
+ templates
44
+ todo
45
+
46
+ write integration tests first
47
+
48
+ tasks: refactor....remove sudo/useless functions
49
+ config_downloader : remove skip download
50
+ git: issue with checkout....currently no way to distinguish if a branch is being checked out or a file; pull maybe wrongly worded
@@ -0,0 +1,108 @@
1
+ require_relative 'task_dsl'
2
+ require_relative 'error'
3
+ require_relative 'logger'
4
+
5
+ module Dply
6
+ class AppConfig
7
+
8
+ include Logger
9
+
10
+ def initialize
11
+ @tasks = {}
12
+ @namespace = nil
13
+ @inside_namespace = false
14
+ @config_read = false
15
+ end
16
+
17
+ def run_task(name, optional: false)
18
+ load_config
19
+ name = name.to_s
20
+ task_proc = @tasks[name]
21
+ if task_proc
22
+ task_dsl = TaskDsl.new(self)
23
+ task_dsl.instance_eval &task_proc
24
+ elsif optional
25
+ logger.warn "task #{name} not found: skipping"
26
+ else
27
+ raise Error, "task '#{name}' not defined"
28
+ end
29
+ end
30
+
31
+ def load_config
32
+ return if @config_read
33
+ bundler_setup
34
+ check_config_exists
35
+ read_config "drakefile.rb", optional: true
36
+ Dir["dply/*.rb"].each do |i|
37
+ read_config i
38
+ end
39
+ @config_read = true
40
+ end
41
+
42
+ private
43
+
44
+ [:build, :test, :reload, :stop, :reopen_logs].each do |i|
45
+ define_method i do |&block|
46
+ task i, &block
47
+ end
48
+ end
49
+
50
+ def deploy(kind, &block)
51
+ name = "deploy:#{kind}"
52
+ task name, &block
53
+ end
54
+
55
+ def task(name, &block)
56
+ task_name = @namespace ? "#{@namespace}:#{name}" : name
57
+ @tasks[task_name.to_s] = block
58
+ end
59
+
60
+ def namespace(name, &block)
61
+ raise "nested namespaces not allowed" if @inside_namespace
62
+ @namespace = name
63
+ @inside_namespace = true
64
+ instance_eval &block
65
+ @namespace = nil
66
+ @inside_namespace = false
67
+ end
68
+
69
+ def read_config(file, optional: false)
70
+ if not File.readable? file
71
+ raise Error, "#{file} not found" if not optional
72
+ return
73
+ end
74
+ instance_eval(File.read(file), file)
75
+ rescue NoMethodError => e
76
+ raise Error, "invalid option used in config: #{e.name}"
77
+ end
78
+
79
+ def bundler_setup
80
+ return if not File.exist? "Gemfile"
81
+ require 'bundler'
82
+ deactivate_gem 'ruby-elf' # in case gemfile contains another version of ruby-elf
83
+ Bundler.setup
84
+ reactivate_gem 'dply'
85
+ logger.debug { "LOAD_PATH: #{$LOAD_PATH.inspect}" }
86
+ end
87
+
88
+ def reactivate_gem(name)
89
+ spec = Gem.loaded_specs[name]
90
+ return if not spec
91
+ lib = "#{spec.gem_dir}/lib"
92
+ $LOAD_PATH.unshift lib if File.directory?(lib) && !$LOAD_PATH.include?(lib)
93
+ end
94
+
95
+ def deactivate_gem(name)
96
+ spec = Gem.loaded_specs[name]
97
+ return if not spec
98
+ $LOAD_PATH.delete "#{spec.gem_dir}/lib"
99
+ Gem.loaded_specs.delete name
100
+ end
101
+
102
+ def check_config_exists
103
+ exists = File.exist?("drakefile.rb") || File.directory?("dply")
104
+ raise Error, "drakefile.rb or dply/ dir not present" if not exists
105
+ end
106
+
107
+ end
108
+ end
@@ -0,0 +1,110 @@
1
+ require 'dply/error'
2
+ module Dply
3
+ class BaseConfig
4
+
5
+ def self.define_opts(&block)
6
+ opts = {}
7
+ define_opt(opts)
8
+ opts.instance_eval(&block)
9
+ @struct_klass = new_struct_klass(opts)
10
+ opts.each do |opt, _|
11
+ define_opt_setter(opt)
12
+ end
13
+ end
14
+
15
+ def self.define_opt(opts)
16
+ opts.define_singleton_method(:opt) do |name, type: Object|
17
+ self[name] = type
18
+ end
19
+ end
20
+
21
+ def self.new_struct_klass(opts)
22
+ Class.new do
23
+
24
+ def initialize
25
+ @proc_map = {}
26
+ end
27
+
28
+ def set_proc(opt, pr)
29
+ @proc_map[opt] = pr
30
+ ivar = "@#{opt}"
31
+ remove_instance_variable(ivar) if instance_variable_defined?(ivar)
32
+ end
33
+
34
+ opts.each do |opt, type|
35
+
36
+ define_method "#{opt}=" do |value|
37
+ assert_type(opt, value, type)
38
+ instance_variable_set("@#{opt}", value)
39
+ end
40
+
41
+ define_method opt do
42
+ if instance_variable_defined?("@#{opt}")
43
+ instance_variable_get("@#{opt}")
44
+ elsif @proc_map.key?(opt)
45
+ value = instance_eval(&@proc_map.fetch(opt))
46
+ public_send("#{opt}=", value)
47
+ else
48
+ instance_variable_set("@#{opt}", nil)
49
+ end
50
+ end
51
+ end
52
+
53
+ opts = nil
54
+
55
+ private def assert_type(opt, value, type)
56
+ if not value.is_a?(type)
57
+ raise Error, "opt(#{opt}) has value '#{value}' of type '#{value.class}' (Expected: '#{type}')"
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ def self.define_opt_setter(opt)
64
+ define_method(opt) do |value = nil, &block|
65
+ set opt, value, &block
66
+ end
67
+ end
68
+
69
+ def self.struct_klass
70
+ @struct_klass
71
+ end
72
+
73
+ def self.build(path = nil, &block)
74
+ i = new
75
+ i.read(path) if path
76
+ i.instance_eval(&block) if block_given?
77
+ i.opts_struct
78
+ end
79
+
80
+ private_class_method :new
81
+
82
+ attr_reader :opts_struct
83
+
84
+ def initialize
85
+ @opts_struct = self.class.struct_klass.new
86
+ default_config
87
+ end
88
+
89
+ def default_config
90
+ end
91
+
92
+ def set(opt, value, &block)
93
+ if block
94
+ @opts_struct.set_proc(opt, block)
95
+ else
96
+ @opts_struct.public_send("#{opt}=", value)
97
+ end
98
+ end
99
+
100
+ def read(path, optional: false)
101
+ if not File.readable?(path)
102
+ return if optional
103
+ raise Error, "config #{path} not readable"
104
+ end
105
+ instance_eval(File.read(path), path)
106
+ rescue NoMethodError => e
107
+ raise Error, "invalid option used in config: #{e.name}"
108
+ end
109
+ end
110
+ end
@@ -2,7 +2,7 @@ require 'dply/helper'
2
2
  require 'dply/setup'
3
3
  require 'dply/config_downloader'
4
4
  require 'dply/yum'
5
- require 'dply/tasks'
5
+ require 'dply/util'
6
6
  require 'forwardable'
7
7
  require 'digest'
8
8
 
@@ -31,12 +31,14 @@ module Dply
31
31
  install_pkgs
32
32
  clean_build_dir
33
33
  link_build_dir
34
- tasks.build config.task
34
+ bundle.install
35
+ bundle.clean
36
+ util.run config.task
35
37
  generate_checksum
36
38
  end
37
39
  end
38
40
 
39
- private
41
+ private
40
42
 
41
43
  def setup
42
44
  setup = Setup.new(@config)
@@ -46,10 +48,10 @@ module Dply
46
48
  def download_configs
47
49
  files = config_map.values.uniq
48
50
  downloader = ConfigDownloader.new(files, config_download_url)
49
- downloader.skip_download = config_skip_download
51
+ downloader.skip_download = config_skip_download
50
52
  downloader.download_all
51
53
  end
52
-
54
+
53
55
  def git_step
54
56
  return unless config.git
55
57
  if config.no_pull
@@ -60,12 +62,12 @@ module Dply
60
62
  end
61
63
 
62
64
  def link_all
63
- tasks.link "#{config.dir}/shared", dir_map
64
- tasks.link "#{config.dir}/config", config_map
65
+ util.link "#{config.dir}/shared", dir_map
66
+ util.link "#{config.dir}/config", config_map
65
67
  end
66
68
 
67
69
  def install_pkgs
68
- tasks.install_pkgs(build_mode: true, use_yum: config.use_yum)
70
+ util.install_pkgs(build_mode: true)
69
71
  end
70
72
 
71
73
  def clean_build_dir
@@ -79,7 +81,7 @@ module Dply
79
81
  FileUtils.rm_rf build_artifacts if File.exists? build_artifacts
80
82
  symlink build_dir, build_artifacts
81
83
  end
82
-
84
+
83
85
  def repo_dir
84
86
  @repo_dir ||= "#{config.dir}/repo"
85
87
  end
@@ -96,8 +98,12 @@ module Dply
96
98
  end
97
99
  end
98
100
 
99
- def tasks
100
- @tasks ||= Tasks.new
101
+ def util
102
+ @util ||= Util.new
103
+ end
104
+
105
+ def bundle
106
+ @bundle ||= Bundle.new
101
107
  end
102
108
 
103
109
  end