forked from elastic/logstash
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathversion.rake
67 lines (59 loc) · 1.96 KB
/
version.rake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
require 'yaml'
VERSION_FILE = "versions.yml"
def get_versions
yaml_versions = YAML.safe_load(IO.read(VERSION_FILE))
{
"logstash" => yaml_versions["logstash"],
"logstash-core" => yaml_versions["logstash-core"],
"logstash-core-plugin-api" => yaml_versions["logstash-core-plugin-api"],
}
end
# Update the version file, keeping the comments in tact
def update_version_file(hash)
existing_versions = YAML.safe_load(File.read(VERSION_FILE))
versions_as_text = IO.read(VERSION_FILE)
%w(logstash logstash-core logstash-core-plugin-api).each do |field|
versions_as_text.gsub!(/(?<=#{field}: )#{existing_versions[field]}/, "#{hash[field]}")
end
IO.write(VERSION_FILE, versions_as_text)
end
namespace :version do
desc "show version of core components"
task :show do
get_versions.each do |component, version|
puts "#{component}: #{version}"
end
end
desc "set version of logstash, logstash-core"
task :set, [:version] => [:validate] do |t, args|
hash = {}
get_versions.each do |component, version|
# we just assume that, usually, all components except
# "logstash-core-plugin-api" will be versioned together
# so let's skip this one and have a separate task for it
if component == "logstash-core-plugin-api"
hash[component] = version
else
hash[component] = args[:version]
end
end
update_version_file(hash)
end
desc "set version of logstash-core-plugin-api"
task :set_plugin_api, [:version] => [:validate] do |t, args|
hash = {}
get_versions.each do |component, version|
if component == "logstash-core-plugin-api"
hash[component] = args[:version]
else
hash[component] = version
end
end
update_version_file(hash)
end
task :validate, :version do |t, args|
unless Regexp.new('^\d+\.\d+\.\d+(?:-\w+\d+)?$').match(args[:version])
abort("Invalid version argument: \"#{args[:version]}\". Aborting...")
end
end
end