openteam-capistrano 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,5 +5,19 @@ require 'rvm/capistrano'
5
5
 
6
6
  require 'capistrano-db-tasks' if use_db?
7
7
  require 'capistrano-unicorn'
8
- begin; require 'airbrake/capistrano'; rescue LoadError; end
8
+
9
+ # airbrake
10
+ begin
11
+ require 'airbrake/capistrano'
12
+ rescue LoadError
13
+ STDERR.puts '!!! WARNING: airbrake not detected, deployment notifications has been disabled !!!'
14
+ end
15
+
16
+
17
+ # delayed job
18
+ begin
19
+ require 'delayed/recipes'
20
+ Capistrano::Configuration.instance.load { after 'deploy:restart', 'delayed_job:restart' }
21
+ rescue LoadError
22
+ end
9
23
 
@@ -5,7 +5,7 @@ require 'tmpdir'
5
5
 
6
6
  class Solr
7
7
  class Replicator
8
- attr_accessor :remote, :local
8
+ attr_accessor :remote, :local, :base_local_index_version
9
9
 
10
10
  def initialize(options)
11
11
  self.remote = Solr.new options[:remote]
@@ -13,7 +13,8 @@ class Solr
13
13
  end
14
14
 
15
15
  def replicate
16
- if same_versions?
16
+ self.base_local_index_version = local.index_version
17
+ if base_local_index_version == remote.index_version
17
18
  puts 'local and remote index versions are same, no need for replication'
18
19
  else
19
20
  really_replicate
@@ -24,7 +25,7 @@ class Solr
24
25
  def really_replicate
25
26
  print 'wait while solr replicated '
26
27
  local.send_replication_command :fetchindex, :masterUrl => "#{remote.url}/replication"
27
- while !same_versions?
28
+ while base_local_index_version == local.index_version
28
29
  print '.'
29
30
  sleep 0.5
30
31
  end
@@ -35,10 +36,6 @@ class Solr
35
36
  STDOUT.print *args
36
37
  STDOUT.sync
37
38
  end
38
-
39
- def same_versions?
40
- remote.index_version == local.index_version
41
- end
42
39
  end
43
40
 
44
41
  attr_accessor :url
@@ -48,7 +45,7 @@ class Solr
48
45
  end
49
46
 
50
47
  def index_version
51
- send_replication_command(:indexversion)['indexversion']
48
+ send_replication_command(:indexversion)['indexversion'].to_i
52
49
  end
53
50
 
54
51
  def send_replication_command(command, extra={})
@@ -5,19 +5,29 @@ Capistrano::Configuration.instance.load do
5
5
  namespace :tagging do
6
6
  def tag_name(options={})
7
7
  formatted_local_time = DateTime.strptime(options[:for], '%Y%m%d%H%M%S').to_time.strftime("%Y.%m.%d-%H%M")
8
- "#{fetch(:stage)}-#{formatted_local_time}"
8
+ "#{stage}-#{formatted_local_time}"
9
9
  end
10
10
 
11
11
  def create_tag(tag_name)
12
12
  run_locally "git tag -a #{tag_name} -m 'Deployed by #{fetch(:local_user)}' origin/#{fetch(:branch)}"
13
- run_locally "git push origin --tags"
13
+ run_locally "git push origin #{tag_name}"
14
14
  end
15
15
 
16
- def remove_tag(tag_name)
17
- run_locally "git tag -d #{tag_name} || true"
18
- run_locally "git push origin :refs/tags/#{tag_name}"
16
+ def remove_tags(tags)
17
+ tag_refs = tags.map{|tag| ":refs/tags/#{tag}"}
18
+ run_locally "git tag -d #{tags.join(' ')}"
19
+ run_locally "git push origin #{tag_refs.join(' ')}"
19
20
  end
20
21
 
22
+ set(:stage_tags) do
23
+ run_locally('git fetch --tags')
24
+ run_locally("git tag -l | grep ^#{stage}-").chomp.split("\n")
25
+ end
26
+ set(:kept_releases_count) { fetch(:keep_releases, 5) }
27
+ set(:kept_releases) { releases.last(kept_releases_count) }
28
+ set(:kept_tags) { kept_releases.map{|release| tag_name(:for => release)} }
29
+ set(:rotten_tags) { stage_tags - kept_tags }
30
+
21
31
  desc "Create release tag in local and origin repo"
22
32
  task :deploy do
23
33
  logger.info "tag current release"
@@ -26,16 +36,11 @@ Capistrano::Configuration.instance.load do
26
36
 
27
37
  desc "Remove release tag from local and origin repo"
28
38
  task :cleanup do
29
- run_locally 'git fetch --tags'
30
- count = fetch(:keep_releases, 5)
31
-
32
- if count >= releases.size
33
- logger.important "no old release tags to clean up"
39
+ if rotten_tags.any?
40
+ logger.info "keeping #{kept_releases_count} of #{stage} #{stage_tags.size} stage tags"
41
+ remove_tags(rotten_tags)
34
42
  else
35
- logger.info "keeping #{count} of #{releases.size} release tags"
36
- releases.first(releases.size - count).map do |release|
37
- remove_tag tag_name(:for => release)
38
- end
43
+ logger.important "no old release tags to clean up"
39
44
  end
40
45
  end
41
46
  end
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = 'openteam-capistrano'
7
- gem.version = '0.0.11'
7
+ gem.version = '0.0.12'
8
8
  gem.authors = ["OpenTeam developers"]
9
9
  gem.email = ["developers@openteam.ru"]
10
10
  gem.description = %q{OpenTeam common capistrano recipe}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openteam-capistrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-04 00:00:00.000000000 Z
12
+ date: 2013-04-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano-db-tasks
@@ -129,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
129
  version: '0'
130
130
  segments:
131
131
  - 0
132
- hash: 3709530121711528520
132
+ hash: -694622114785548101
133
133
  required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  none: false
135
135
  requirements:
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  version: '0'
139
139
  segments:
140
140
  - 0
141
- hash: 3709530121711528520
141
+ hash: -694622114785548101
142
142
  requirements: []
143
143
  rubyforge_project:
144
144
  rubygems_version: 1.8.24