24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# File 'lib/semvergen/bump.rb', line 24
def run!(options)
master_release = @shell.current_branch == "master"
unless master_release
say color("You are not on master. It is not recommended to create releases from a branch unless they're maintenance releases", :red)
newline
return unless agree("Proceed anyway? ")
newline
end
unless @shell.git_branch_is_tracking?
@interface.fail_exit color("This branch is not tracking a remote branch. Aborting...", :red)
end
say "Checking for upstream changes..."
@shell.git_fetch
newline
unless @shell.git_up_to_date?
@interface.fail_exit color("This branch is not up to date with upstream", :red)
end
say "Git status: #{color("Up to date", :green)}"
newline
if @shell.git_index_dirty? && !options[:ignore_dirty]
say color("Git index dirty. Commit changes before continuing", :red, :bold)
else
say color("Cut new #{@gem_name} Release", :white, :underline, :bold)
newline
release_types = master_release ? [PATCH, MINOR, MAJOR] : [PATCH]
release_type = choose do ||
. = "Select release type"
.default = "1"
.select_by = :index
.choices *release_types
end
new_version = next_version(@version_file.version, release_type, release_types)
newline
say "Current version: #{color(@version_file.version, :bold)}"
say "Bumped version : #{color(new_version, :bold, :green)}"
newline
say "Enter change log features (or a blank line to finish):"
features = []
while true
response = ask "* " do |q|
q.validate = lambda { |answer| features.size > 0 || answer.length > 0 }
q.responses[:not_valid] = color("Enter at least one feature", :red)
q.responses[:invalid_type] = color("Enter at least one feature", :red)
q.responses[:ask_on_error] = "* "
end
if response.length == 0
features << "\n"
break
else
features << "* #{response}"
end
end
change_log_lines = ["# #{new_version}"] + features
change_log_message = change_log_lines.join("\n")
diff_change_log = change_log_lines.map { |l| color("+++ ", :white) + color(l, :green) }.join("\n")
newline
say color("Will add the following to CHANGELOG.md", :underline)
say color(diff_change_log)
commit_message = "Version bump: #{new_version}"
newline
say color("Summary of actions:", :underline, :green, :red)
newline
say "Bumping version: #{color(@version_file.version, :yellow)} -> #{color(new_version, :green)}"
newline
say "Adding features to CHANGELOG.md:"
say color(diff_change_log, :green)
say "Staging files for commit:"
say color("* #{@version_file.path}", :green)
say color("* CHANGELOG.md", :green)
newline
say "Committing with message: #{color(commit_message, :green)}"
newline
if agree("Proceed? ")
@version_file.version = new_version
node_version_file_path = nil
if @node_version_file
@node_version_file.version = new_version
node_version_file_path = @node_version_file.path
end
@change_log_file << change_log_message
@shell.commit(@version_file.path, node_version_file_path, new_version, commit_message, features)
@shell.push(new_version)
newline
end
Semvergen::Release.new(
@interface,
@version_file,
@node_version_file,
@change_log_file,
@shell,
@gem_name,
@gem_server,
@notifier
).run!(features: features)
end
end
|