dply 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,68 @@
1
+ require 'dply/logger'
2
+ require 'dply/lock'
3
+ require 'dply/build'
4
+ require 'dply/build_config'
5
+
6
+ module Dply
7
+ module Cli
8
+ class Build
9
+
10
+ include Logger
11
+
12
+ def initialize(argv)
13
+ @argv = argv
14
+ end
15
+
16
+ def run
17
+ lock.acquire
18
+ opts.parse!(@argv)
19
+ build.run
20
+ end
21
+
22
+ def build
23
+ @build ||= ::Dply::Build.new(config)
24
+ end
25
+
26
+ def config
27
+ @config ||= ::Dply::BuildConfig.new.to_struct
28
+ end
29
+
30
+ def dir
31
+ @dir ||= Dir.pwd
32
+ end
33
+
34
+ def lock
35
+ @lock ||= ::Dply::Lock.new
36
+ end
37
+
38
+ def opts
39
+ OptionParser.new do |opts|
40
+
41
+ opts.banner = "Usage: drake build [options] [target]"
42
+
43
+ opts.on("-b", "--branch [BRANCH]" , "Specify git branch") do |b|
44
+ config.branch = b
45
+ end
46
+
47
+ opts.on("-r", "--revision [REVISION]", "Specify revision") do |r|
48
+ config.revision = r
49
+ end
50
+
51
+ opts.on("--no-pull", "Enable/disable git pull") do |e|
52
+ config.no_pull = true
53
+ end
54
+
55
+ opts.on("--skip-git", "Disable git") do |e|
56
+ config.git = false
57
+ end
58
+
59
+ opts.on("-h", "--help", "Help") do
60
+ puts opts
61
+ exit
62
+ end
63
+ end
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -1,6 +1,7 @@
1
1
  require 'dply/deploy'
2
2
  require 'dply/logger'
3
3
  require 'dply/lock'
4
+ require 'dply/config'
4
5
 
5
6
  module Dply
6
7
  module Cli
@@ -8,29 +9,28 @@ module Dply
8
9
 
9
10
  include Logger
10
11
 
11
- attr_reader :deploy_dir, :argv, :config
12
+ attr_reader :argv
12
13
 
13
- def initialize(deploy_dir, config, argv)
14
- @deploy_dir = deploy_dir
15
- @config = config
14
+ def initialize(argv)
16
15
  @argv = argv
17
16
  end
18
17
 
19
18
  def run
20
19
  lock.acquire
21
20
  opts.parse!(argv)
22
- target = argv.shift
23
- config.target = target if target
24
- deploy.options = options
25
- deploy.run
21
+ strategy.deploy
26
22
  end
27
23
 
28
- def deploy
29
- @deploy ||= ::Dply::Deploy.new(deploy_dir, config)
24
+ def strategy
25
+ @strategy ||= Strategy.load(config, options)
30
26
  end
31
27
 
32
28
  def lock
33
- @lock ||= ::Dply::Lock.new(deploy_dir)
29
+ @lock ||= Lock.new
30
+ end
31
+
32
+ def config
33
+ @config ||= Config.new.to_struct
34
34
  end
35
35
 
36
36
  def opts
@@ -39,7 +39,11 @@ module Dply
39
39
  opts.banner = "Usage: dply deploy [options] [target]"
40
40
 
41
41
  opts.on("-b", "--branch [BRANCH]" , "Specify git branch") do |b|
42
- options[:branch] = b
42
+ config.branch = b
43
+ end
44
+
45
+ opts.on("-r", "--revision [REVISION]", "Specify build revision (only used in archive strategy)") do |r|
46
+ config.revision = r
43
47
  end
44
48
 
45
49
  opts.on("--no-pull", "Enable/disable git pull") do |e|
@@ -1,4 +1,3 @@
1
- require 'dply/reload'
2
1
  require 'dply/logger'
3
2
  require 'dply/lock'
4
3
 
@@ -8,45 +7,29 @@ module Dply
8
7
 
9
8
  include Logger
10
9
 
11
- attr_reader :deploy_dir, :argv, :config
12
-
13
- def initialize(deploy_dir, config, argv)
14
- @deploy_dir = deploy_dir
10
+ def initialize(argv)
15
11
  @argv = argv
16
- @config = config
17
12
  end
18
13
 
19
14
  def run
20
15
  lock.acquire
21
- opts.parse!(argv)
22
- target = argv.shift
23
- config.target = target if target
24
- reload.options = options
25
- reload.run
16
+ strategy.deploy
26
17
  end
27
18
 
28
- def reload
29
- @reload ||= ::Dply::Reload.new(deploy_dir, config)
19
+ def strategy
20
+ @strategy ||= ::Dply::Strategy.load(config, options)
30
21
  end
31
22
 
32
- def lock
33
- @lock ||= ::Dply::Lock.new(deploy_dir)
23
+ def config
24
+ @config ||= ::Dply::Config.new(dir).to_struct
34
25
  end
35
26
 
36
- def opts
37
- OptionParser.new do |opts|
38
-
39
- opts.banner = "Usage: dply reload [options] [target]"
40
-
41
- opts.on("--skip-bundler", "Skip bundle install") do |e|
42
- options[:skip_bundler] = true
43
- end
27
+ def dir
28
+ @dir ||= Dir.pwd
29
+ end
44
30
 
45
- opts.on("-h", "--help", "Help") do
46
- puts opts
47
- exit
48
- end
49
- end
31
+ def lock
32
+ @lock ||= ::Dply::Lock.new
50
33
  end
51
34
 
52
35
  def options
data/lib/dply/config.rb CHANGED
@@ -1,39 +1,36 @@
1
- require 'ostruct'
2
1
  require 'dply/helper'
2
+ require 'dply/config_struct'
3
3
 
4
4
  module Dply
5
5
  class Config
6
6
 
7
7
  include Helper
8
- attr_reader :deploy_dir, :read_config
8
+ attr_reader :read_config
9
9
 
10
- def initialize(deploy_dir, read_config: true)
11
- @deploy_dir = deploy_dir
10
+ def initialize(dir = nil, read_config: true)
11
+ @dir = dir || Dir.pwd
12
12
  @read_config = read_config
13
13
  end
14
14
 
15
+ def to_struct
16
+ config
17
+ end
18
+
19
+ private
20
+
15
21
  def config
16
22
  return @config if @config
17
- @config = {
18
- deploy_dir: deploy_dir,
19
- target: :default,
20
- branch: :master,
21
- strategy: :default,
22
- repo: nil,
23
- env: {},
24
- link_config: false,
25
- config_map: nil,
26
- dir_map: nil,
27
- shared_dirs: [],
28
- config_skip_download: [],
29
- config_download_url: nil
30
- }
23
+ @config = ConfigStruct.new(@dir)
31
24
  read_from_file if read_config
32
25
  return @config
33
26
  end
34
27
 
35
- def target(target)
36
- set :target, target
28
+ def name(name)
29
+ set :name, name
30
+ end
31
+
32
+ def repo(repo)
33
+ set :repo, repo
37
34
  end
38
35
 
39
36
  def branch(branch)
@@ -41,74 +38,75 @@ module Dply
41
38
  end
42
39
 
43
40
  def strategy(strategy)
44
- set :strategy, strategy
41
+ set :strategy, strategy.to_sym
45
42
  end
46
43
 
47
- def repo(repo)
48
- set :repo, repo
44
+ def target(target)
45
+ set :target, target
49
46
  end
50
47
 
51
- def link_config(link_config)
52
- set :link_config, link_config
48
+ def shared_dirs(dirs)
49
+ raise if not dirs.is_a? Array
50
+ set :shared_dirs, dirs
53
51
  end
54
52
 
55
53
  def config_map(map)
56
- set :link_config, true
57
54
  set :config_map, map
58
55
  end
59
56
 
60
- def config_skip_download(list)
61
- set :config_skip_download, list
57
+ def dir_map(map)
58
+ set :dir_map, map
62
59
  end
63
60
 
64
61
  def config_download_url(url)
65
62
  set :config_download_url, url
66
63
  end
67
64
 
68
-
69
-
70
- def dir_map(map)
71
- set :dir_map, map
65
+ def config_skip_download(list)
66
+ set :config_skip_download, list
72
67
  end
73
68
 
74
- def set_env(key, value)
75
- @config[:env].store key, value
69
+ def verify_checksum(verify_checksum)
70
+ set :verify_checksum, verify_checksum
76
71
  end
77
72
 
78
- def set(key, value)
79
- @config.store key, value
80
- end
81
73
 
82
- def to_struct
83
- OpenStruct.new(config)
74
+ def set(key, value)
75
+ method = "#{key}=".to_sym
76
+ @config.send method, value
84
77
  end
85
78
 
86
79
  def env(h)
87
80
  raise if not h.is_a? Hash
88
- @config[:env] = h
89
- @config[:env].each do |k,v|
81
+ h.each do |k,v|
90
82
  ENV[k.to_s] = v.to_s
91
83
  end
92
84
  end
93
85
 
94
86
  def config_file
95
- @config_file ||= "#{deploy_dir}/dply.rb"
87
+ @config_file ||= begin
88
+ found = ["#{@dir}/deploy.rb", "#{@dir}/dply.rb"].find { |f| File.readable? f }
89
+ found || "#{@dir}/deploy.rb"
90
+ end
96
91
  end
97
92
 
98
- def shared_dirs(dirs)
99
- raise if not dirs.is_a? Array
100
- @config[:shared_dirs] = dirs
93
+ def revision(&block)
94
+ set :revision_proc , block
95
+ end
96
+
97
+ def build_url(&block)
98
+ set :build_url_proc, block
101
99
  end
102
100
 
103
101
  def read_from_file
104
102
  if not File.readable? config_file
105
- raise error "dply.rb not found in #{deploy_dir}"
103
+ error "deploy.rb not found in #{@dir}"
106
104
  return
107
105
  end
108
106
  instance_eval(File.read(config_file))
109
107
  rescue NoMethodError => e
110
- raise error "invalid option used in config: #{e.name}"
108
+ error "invalid option used in config: #{e.name}"
111
109
  end
112
-
110
+
113
111
  end
114
112
  end
@@ -3,17 +3,15 @@ module Dply
3
3
  class ConfigDownloader
4
4
 
5
5
  include Helper
6
- attr_accessor :base_url, :config_files, :config_skip_download
6
+ attr_writer :config_skip_download
7
7
 
8
- def initialize(config_files , base_url, secret: nil, config_skip_download: [])
8
+ def initialize(config_files , base_url)
9
9
  @config_files = config_files
10
10
  @base_url = base_url
11
- @secret = secret
12
- @config_skip_download = config_skip_download
13
11
  end
14
12
 
15
13
  def download_all
16
- config_files.each do |f|
14
+ @config_files.each do |f|
17
15
  if config_skip_download.include? f
18
16
  logger.debug "skipping to download file #{f}"
19
17
  next
@@ -22,14 +20,21 @@ module Dply
22
20
  end
23
21
  end
24
22
 
23
+ private
24
+
25
25
  def download(file)
26
- url = "#{base_url}/#{file}"
26
+ url = "#{@base_url}/#{file}"
27
27
  logger.bullet "downloading #{file}"
28
28
  http_status = `curl -w "%{http_code}" -f -s -o 'config/#{file}' '#{url}' `
29
29
  if http_status != "200"
30
- raise error "failed to download #{file}, http status #{http_status}"
30
+ error "failed to download #{file}, http status #{http_status}"
31
31
  end
32
32
  end
33
33
 
34
+
35
+ def config_skip_download
36
+ @config_skip_download ||= []
37
+ end
38
+
34
39
  end
35
40
  end
@@ -0,0 +1,41 @@
1
+ require 'dply/jenkins'
2
+ module Dply
3
+ class ConfigStruct
4
+
5
+ attr_writer :revision, :build_url, :build_url_proc,
6
+ :revision_proc
7
+ attr_accessor :dir, :name, :repo, :branch,
8
+ :strategy, :target, :verify_checksum,
9
+ :config_map, :dir_map, :shared_dirs,
10
+ :config_download_url, :config_skip_download
11
+
12
+ def initialize(dir = nil)
13
+ @dir = dir || Dir.pwd
14
+ @target = :default
15
+ @branch = :master
16
+ @verify_checksum = true
17
+ end
18
+
19
+ def revision
20
+ @revision ||= instance_eval(&revision_proc)
21
+ end
22
+
23
+ def build_url
24
+ @build_url ||= instance_eval(&build_url_proc)
25
+ end
26
+
27
+ def revision_proc
28
+ @revision_proc ||= Proc.new do
29
+ jenkins = Jenkins.new(repo, name)
30
+ jenkins.latest_successful_revision
31
+ end
32
+ end
33
+
34
+ def build_url_proc
35
+ @build_url_proc ||= Proc.new do
36
+ "#{repo.chomp("/")}/job/#{name}/#{revision}/artifact/build/#{name}-#{revision}-#{branch}.tar.gz"
37
+ end
38
+ end
39
+
40
+ end
41
+ end
@@ -3,6 +3,8 @@ require 'dply/ext/string'
3
3
  module Dply
4
4
  class CustomLogger < ::Logger
5
5
 
6
+ attr_writer :trace_mode, :remote_mode
7
+
6
8
  def initialize(file)
7
9
  super(file)
8
10
  @level = ::Logger::INFO
@@ -17,7 +19,7 @@ module Dply
17
19
  when "WARN"
18
20
  "#{severity.downcase.bold.yellow} #{msg}\n"
19
21
  else
20
- "#{severity.downcase.bold.blue} #{msg}\n"
22
+ "#{severity[0].bold.blue} #{msg}\n"
21
23
  end
22
24
  end
23
25
 
@@ -25,5 +27,15 @@ module Dply
25
27
  puts "#{"\u2219".bold.blue} #{msg}"
26
28
  end
27
29
 
30
+ def trace(msg)
31
+ return if not @trace_mode
32
+ puts %(#{"T".bold.blue} #{msg}\n)
33
+ end
34
+
35
+ def remote(msg)
36
+ return if not @remote_mode
37
+ puts %{dply_msg|#{msg}}
38
+ end
39
+
28
40
  end
29
41
  end