dply 0.2.19 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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