Class: Release
- Inherits:
-
Object
- Object
- Release
- Defined in:
- lib/cookbook-release/release.rb
Defined Under Namespace
Classes: ExistingRelease
Instance Attribute Summary collapse
-
#git ⇒ Object
readonly
Returns the value of attribute git.
Class Method Summary collapse
-
.current_version(file) ⇒ Object
file will be used to determine the git directory.
Instance Method Summary collapse
- #display_changelog(new_version) ⇒ Object
- #display_suggested_version(new_version, reasons) ⇒ Object
- #git_changelog ⇒ Object
-
#initialize(git, opts = {}) ⇒ Release
constructor
A new instance of Release.
- #last_release ⇒ Object
-
#new_version ⇒ Object
return the new version and the reasons.
- #prepare_release ⇒ Object
- #release! ⇒ Object
- #user_defined_version ⇒ Object
Constructor Details
#initialize(git, opts = {}) ⇒ Release
Returns a new instance of Release.
18 19 20 21 22 23 |
# File 'lib/cookbook-release/release.rb', line 18 def initialize(git, opts={}) @git = git @no_prompt = opts[:no_prompt] @git.no_prompt = @no_prompt @category = opts[:category] || 'Other' end |
Instance Attribute Details
#git ⇒ Object (readonly)
Returns the value of attribute git.
16 17 18 |
# File 'lib/cookbook-release/release.rb', line 16 def git @git end |
Class Method Details
.current_version(file) ⇒ Object
file will be used to determine the git directory
4 5 6 7 8 9 10 11 |
# File 'lib/cookbook-release/release.rb', line 4 def self.current_version(file) r = Release.new(GitUtilities.new(cwd: File.dirname(file))) begin r.new_version.first rescue ExistingRelease r.last_release end end |
Instance Method Details
#display_changelog(new_version) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/cookbook-release/release.rb', line 56 def display_changelog(new_version) puts "Changelog for #{new_version}:" git_changelog.each do |commit| puts "* #{commit[:hash]} #{HighLine.color(commit[:subject], commit.color)} (#{commit[:author]})" end end |
#display_suggested_version(new_version, reasons) ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/cookbook-release/release.rb', line 48 def display_suggested_version(new_version, reasons) puts "Suggested version: " + new_version.to_s puts "Commits that suggest this change:" reasons.each do |commit| puts "* #{commit[:hash]} #{commit[:subject]} (#{commit[:author]})" end end |
#git_changelog ⇒ Object
29 30 31 |
# File 'lib/cookbook-release/release.rb', line 29 def git_changelog @git_changelog ||= git.compute_changelog(last_release) end |
#last_release ⇒ Object
25 26 27 |
# File 'lib/cookbook-release/release.rb', line 25 def last_release @last_release ||= git.compute_last_release end |
#new_version ⇒ Object
return the new version and the reasons
34 35 36 37 38 39 40 |
# File 'lib/cookbook-release/release.rb', line 34 def new_version %w(major minor patch).each do |level| changes = git_changelog.select(&"#{level}?".to_sym) return [ last_release.send("#{level}!"), changes ] if changes.size > 0 end raise ExistingRelease, "No commit since last release (#{last_release})" end |
#prepare_release ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/cookbook-release/release.rb', line 63 def prepare_release git.clean_index! new_version , reasons = self.new_version puts "Last release was: " + last_release.to_s display_suggested_version(new_version, reasons) puts "" agreed = @no_prompt || agree("Do you agree with that version?") { |q| q.default = "yes" } new_version = user_defined_version unless agreed puts "New release will be #{new_version}" puts "" new_version end |
#release! ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/cookbook-release/release.rb', line 78 def release! new_version = prepare_release begin git.tag(new_version) display_changelog(new_version) puts "" agreed = @no_prompt || agree("Do you agree with this changelog?") { |q| q.default = "yes" } exit 1 unless agreed git.push_tag(new_version) supermarket = Supermarket.new supermarket.publish_ck(@category) rescue puts HighLine.color("Release aborted, you have to reset to previous state manually", :red) puts ":use with care: #{git.reset_command(new_version)}" raise end end |
#user_defined_version ⇒ Object
42 43 44 45 46 |
# File 'lib/cookbook-release/release.rb', line 42 def user_defined_version puts "Which kind of upgrade ?" new_release_level = choose(*%w(major minor patch)) last_release.send("#{new_release_level}!") end |