Class: Statistrano::Deployment::Releaser::Revisions

Inherits:
Object
  • Object
show all
Includes:
Strategy::InvokeTasks
Defined in:
lib/statistrano/deployment/releaser/revisions.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Strategy::InvokeTasks

#call_or_invoke_task, #invoke_build_task, #invoke_post_deploy_task, #invoke_pre_symlink_task

Constructor Details

#initializeRevisions

Returns a new instance of Revisions.



10
11
12
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 10

def initialize
  @release_name = Time.now.to_i.to_s
end

Instance Attribute Details

#release_nameObject (readonly)

Returns the value of attribute release_name.



8
9
10
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 8

def release_name
  @release_name
end

Instance Method Details

#add_release_to_manifest(remote, build_data = {}) ⇒ Object



83
84
85
86
87
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 83

def add_release_to_manifest remote, build_data={}
  manifest = new_manifest remote
  manifest.push build_data.merge(release: release_name)
  manifest.save!
end

#create_release(remote, build_data = {}) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 14

def create_release remote, build_data={}
  setup_release_path      remote
  rsync_to_remote         remote
  invoke_pre_symlink_task remote
  symlink_release         remote
  add_release_to_manifest remote, build_data
  prune_releases          remote
end

#current_release_data(remote) ⇒ Object

merge of manifest & log data (if a log)



60
61
62
63
64
65
66
67
68
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 60

def current_release_data remote
  release_data = new_manifest(remote).data.last

  if remote.config.log_file_path
    release_data.merge! log_file(remote).last_entry 
  end

  release_data
end

#list_releases(remote) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 50

def list_releases remote
  manifest = new_manifest remote
  manifest.data.keep_if do |rel|
    rel.has_key?(:release)
  end.sort_by do |rel|
    rel[:release]
  end.reverse
end

#prune_releases(remote) ⇒ Object



45
46
47
48
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 45

def prune_releases remote
  remove_untracked_releases remote
  remove_releases_beyond_release_count remote
end

#rollback_release(remote) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 70

def rollback_release remote
  manifest = new_manifest remote
  releases = tracked_releases remote, manifest

  unless releases.length > 1
    return Log.error "There is only one release, best not to remove it"
  end

  symlink_release remote, releases[1]
  remove_release releases[0], remote, manifest
  manifest.save!
end

#rsync_to_remote(remote) ⇒ Object



34
35
36
37
38
39
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 34

def rsync_to_remote remote
  resp = remote.rsync_to_remote local_path(remote), release_path(remote)
  unless resp.success?
    abort()
  end
end

#setup_release_path(remote) ⇒ Object



23
24
25
26
27
28
29
30
31
32
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 23

def setup_release_path remote
  current_release = current_release remote
  remote.create_remote_dir releases_path(remote)

  if current_release.empty?
    remote.create_remote_dir release_path(remote)
  else
    remote.run "cp -a #{release_path(remote, current_release)} #{release_path(remote)}"
  end
end


41
42
43
# File 'lib/statistrano/deployment/releaser/revisions.rb', line 41

def symlink_release remote, release=nil
  remote.run "ln -nfs #{release_path(remote, release)} #{public_path(remote)}"
end