|
18 | 18 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | 19 |
|
20 | 20 | require "date" |
| 21 | +require "json" |
| 22 | +require "open-uri" |
21 | 23 | require "tmpdir" |
22 | 24 |
|
23 | 25 | VERSION_FULL = File.read("version_full") |
@@ -48,6 +50,32 @@ def new_version_micro |
48 | 50 | new_version.split(".")[1][1] |
49 | 51 | end |
50 | 52 |
|
| 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 | + |
51 | 79 | def new_version_in_hex |
52 | 80 | major, minor_micro = new_version.split(".").collect {|x| Integer(x, 10)} |
53 | 81 | "0x%02x%02x" % [major, minor_micro] |
@@ -112,6 +140,24 @@ namespace :release do |
112 | 140 | end |
113 | 141 |
|
114 | 142 | 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 | + |
115 | 161 | desc "Update versions for a new release" |
116 | 162 | task :update do |
117 | 163 | new_release_date = |
|
147 | 193 |
|
148 | 194 | desc "Release" |
149 | 195 | task release: [ |
| 196 | + "release:version:validate", |
150 | 197 | "release:version:update", |
151 | 198 | "release:tag", |
152 | 199 | "dev:version:bump" |
|
0 commit comments