Skip to content

Commit 20fc113

Browse files
committed
release: add release:version:validate task
This task validates the following before release: 1. VERSION environment variable must not be specified - If specified, it must match VERSION_FULL - Prevents accidental release with overridden version 2. Mroonga version must be >= latest Groonga version - Fetches latest Groonga version from GitHub API - Uses Gem::Version for semantic version comparison - Suggests the correct dev:version:bump command on failure
1 parent 49747ff commit 20fc113

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Rakefile

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1919

2020
require "date"
21+
require "json"
22+
require "open-uri"
2123
require "tmpdir"
2224

2325
VERSION_FULL = File.read("version_full")
@@ -48,6 +50,32 @@ def new_version_micro
4850
new_version.split(".")[1][1]
4951
end
5052

53+
def version_major
54+
version.split(".")[0]
55+
end
56+
57+
def version_minor
58+
version.split(".")[1][0]
59+
end
60+
61+
def version_micro
62+
version.split(".")[1][1]
63+
end
64+
65+
def latest_groonga_version
66+
@latest_groonga_version ||= begin
67+
releases_url = "https://api.github.com/repos/groonga/groonga/releases/latest"
68+
URI.open(releases_url) do |response|
69+
Gem::Version.new(JSON.parse(response.read)["tag_name"].delete_prefix("v"))
70+
end
71+
end
72+
end
73+
74+
def latest_groonga_version_in_mroonga_style
75+
segments = latest_groonga_version.segments
76+
"#{segments[0]}.#{segments[1]}#{segments[2]}"
77+
end
78+
5179
def new_version_in_hex
5280
major, minor_micro = new_version.split(".").collect {|x| Integer(x, 10)}
5381
"0x%02x%02x" % [major, minor_micro]
@@ -112,6 +140,24 @@ namespace :release do
112140
end
113141

114142
namespace :version do
143+
desc "Validate version for release"
144+
task :validate do
145+
if ENV["VERSION"] && ENV["VERSION"] != VERSION_FULL
146+
message = "You must NOT specify VERSION= for 'rake release'. "
147+
message += "You must run 'rake dev:version:bump NEW_VERSION=#{ENV["VERSION"]}' "
148+
message += "before 'rake release'."
149+
raise message
150+
end
151+
152+
mroonga_version = Gem::Version.new("#{version_major}.#{version_minor}.#{version_micro}")
153+
if mroonga_version < latest_groonga_version
154+
message = "Mroonga version (#{VERSION_FULL.chomp}) must be greater than or equal to "
155+
message += "the latest Groonga version (#{latest_groonga_version}). "
156+
message += "You must run 'rake dev:version:bump NEW_VERSION=#{latest_groonga_version_in_mroonga_style}'."
157+
raise message
158+
end
159+
end
160+
115161
desc "Update versions for a new release"
116162
task :update do
117163
new_release_date =
@@ -147,6 +193,7 @@ end
147193

148194
desc "Release"
149195
task release: [
196+
"release:version:validate",
150197
"release:version:update",
151198
"release:tag",
152199
"dev:version:bump"

0 commit comments

Comments
 (0)