Class: Release

Inherits:
Thor
  • Object
show all
Includes:
Releasetool::Util
Defined in:
lib/tasks/release_thor.rb

Constant Summary collapse

DEFAULT_COMMIT_MESSAGE =
'preparing for release [CI SKIP]'

Constants included from Releasetool::Util

Releasetool::Util::DIR, Releasetool::Util::RELEASE_MARKER_FILE, Releasetool::Util::TEMPLATE_FILE

Instance Method Summary collapse

Methods included from Releasetool::Util

#config, #guarded_capture, #guarded_system, #remove_stored_version, #stored_version, version_file

Instance Method Details

#__print_versionObject



122
123
124
# File 'lib/tasks/release_thor.rb', line 122

def __print_version
  say "Releasetool v#{Releasetool::VERSION}"
end

#abortObject



115
116
117
# File 'lib/tasks/release_thor.rb', line 115

def abort
  remove_stored_version
end

#commit(version = nil) ⇒ Object



78
79
80
81
82
83
84
85
86
# File 'lib/tasks/release_thor.rb', line 78

def commit(version = nil)
  version ||= stored_version
  if options[:after] == "default" || !options[:after]
    guarded_system("git add #{DIR}")
    guarded_system("git add #{Releasetool::Util.version_file}") if File.exist?(Releasetool::Util.version_file)
    guarded_system("git commit #{DIR} #{File.exist?(Releasetool::Util.version_file) ? Releasetool::Util.version_file : ''} #{options[:edit] ? '-e' : nil} -m\"#{DEFAULT_COMMIT_MESSAGE}\"")
  end
  config.after_commit_hook(version) if options[:after]
end

#initObject



15
16
17
# File 'lib/tasks/release_thor.rb', line 15

def init
  config.generate
end

#latestObject



35
36
37
# File 'lib/tasks/release_thor.rb', line 35

def latest
  puts previous_version
end

#listObject



25
26
27
# File 'lib/tasks/release_thor.rb', line 25

def list
  system("git for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags")
end

#log(*args) ⇒ Object



45
46
47
48
# File 'lib/tasks/release_thor.rb', line 45

def log(*args)
  extra = " #{args.join(" ")}" if args.length > 0
  guarded_system("git log #{previous_version}..#{extra}")
end

#push(version = nil) ⇒ Object



104
105
106
107
108
109
# File 'lib/tasks/release_thor.rb', line 104

def push(version = nil)
  version ||= stored_version
  guarded_system("git push")
  guarded_system("git push origin #{version}")
  remove_stored_version
end

#start(specified_version = nil) ⇒ Object

Raises:

  • (Thor::Error)


61
62
63
64
65
66
67
68
# File 'lib/tasks/release_thor.rb', line 61

def start(specified_version = nil)
  raise Thor::Error.new("Can't start when already started on a version. release abort or release finish") if File.exist?(RELEASE_MARKER_FILE)

  version = specified_version ? Releasetool::Version.new(specified_version) : next_version
  File.write(RELEASE_MARKER_FILE, version)
  Releasetool::Release.new(version, previous: previous_version).prepare(edit: options[:edit])
  config.after_start_hook(version)
end

#tag(version = nil) ⇒ Object



93
94
95
96
97
# File 'lib/tasks/release_thor.rb', line 93

def tag(version = nil)
  version ||= stored_version
  last_useful_commit = guarded_capture("git log head^^..head^  --pretty=format:%s").strip.split("\n").first.strip
  guarded_system("git tag -a #{version} -e -m \"#{last_useful_commit}\"")
end