Class: HerokuRelease::Task

Inherits:
Object
  • Object
show all
Defined in:
lib/heroku_release.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.tasksObject



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/heroku_release.rb', line 18

def self.tasks
  {
    :push => nil,
    :tag => nil,
    :log => "Produces a changelog from release tags and their comments. Assumes tag comments have no newlines in them.",
    :current_release => "Show version of current release",
    :previous_release => "Show version of previous release",
    :pending => "Show git commits since last released version",
    :rollback => "Rollback to previous release and remove current release tag"
  }      
end

Instance Method Details

#current_releaseObject



62
63
64
# File 'lib/heroku_release.rb', line 62

def current_release
  output current_release_version
end

#logObject



58
59
60
# File 'lib/heroku_release.rb', line 58

def log
  output("\n" + changelog)
end

#pendingObject



74
75
76
# File 'lib/heroku_release.rb', line 74

def pending
  execute "git log #{current_release_version}..HEAD"
end

#previous_releaseObject



66
67
68
69
70
71
72
# File 'lib/heroku_release.rb', line 66

def previous_release
  if previous_release_version
    output previous_release_version
  else
    output "no previous release found"
  end
end

#pushObject



30
31
32
33
# File 'lib/heroku_release.rb', line 30

def push
  output 'Deploying site to Heroku ...'
  execute "git push #{config.heroku_remote} master"
end

#rollbackObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/heroku_release.rb', line 78

def rollback
  # Store releases in local variables so they don't change during tag deletion
  current = current_release_version
  previous = previous_release_version
  if previous
    output "Rolling back to '#{previous}' ..."
    execute "git push -f #{config.heroku_remote} #{previous}:master"
    output "Removing rolled back release tag '#{current}' ..."
    remove_tag(current)
    output 'Rollback completed'
  else
    output "No release tags found - cannot do rollback"
    output releases
  end
end

#tagObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/heroku_release.rb', line 35

def tag
  release_name = get_release_name
  tag_comment = get_tag_comment
  quoted_tag_comment = single_quote(tag_comment)

  if config.version_file_path || config.changelog_path
    if config.version_file_path
      output "Updating version file at #{config.version_file_path}"
      update_version_file(release_name)
    end
    if config.changelog_path
      output "Updating #{config.changelog_path}"
      update_changelog(release_name, tag_comment)
    end
    commit(release_name, quoted_tag_comment)
  end

  output "Tagging release as '#{release_name}'"
  execute "git tag -a #{release_name} -m '#{quoted_tag_comment}'"
  execute "git push --tags origin"
  execute "git push --tags #{config.heroku_remote}"
end