rake_tasks/automation.rake (112 lines of code) (raw):
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
require 'fileutils'
require 'yaml'
require_relative '../elasticsearch/lib/elasticsearch/version'
namespace :automation do
desc 'Build gem releases and snapshots'
task :build_gems do
output_dir = File.expand_path("#{__dir__}/../build")
dir = CURRENT_PATH.join(output_dir).to_s
FileUtils.mkdir_p(dir) unless File.exist?(dir)
version = Elasticsearch::VERSION
RELEASE_TOGETHER.each do |gem|
puts '-' * 80
puts "Building #{gem} v#{version} to #{output_dir}"
sh "cd #{CURRENT_PATH.join(gem)} " \
"&& gem build --silent -o #{gem}-#{version}.gem && " \
"mv *.gem #{CURRENT_PATH.join(output_dir)}"
end
puts '-' * 80
end
desc 'Generate API code'
task :codegen do
path = File.expand_path('../elasticsearch-api/', __dir__)
branch = YAML.load_file(File.expand_path("#{__dir__}/../.buildkite/pipeline.yml"))['steps'].first['env']['ES_YAML_TESTS_BRANCH']
unless File.exist?(File.expand_path('elastic-client-generator-ruby', __dir__))
sh "git clone https://#{ENV['CLIENTS_GITHUB_TOKEN']}@github.com/elastic/elastic-client-generator-ruby.git "
end
sh "export ES_RUBY_CLIENT_PATH=#{path} " \
' && cd elastic-client-generator-ruby ' \
' && sudo bundle install ' \
" && bundle exec rake update[#{branch}]" \
' && bundle exec rake gen_es' \
' && cd ../../ ' \
' && rm -rf elastic-client-generator-ruby '
end
desc <<-DESC
Update Rubygems versions in version.rb and *.gemspec files
Example:
$ rake automation:bump[42.0.0]
DESC
task :bump, :version do |_, args|
abort('[!] Required argument [version] missing') unless (version = args[:version])
files = ['elasticsearch/elasticsearch.gemspec'] + RELEASE_TOGETHER.map { |gem| Dir["./#{gem}/**/**/version.rb"] }
version_regexp = Regexp.new(/VERSION = ("|'([0-9.]+(-SNAPSHOT)?)'|")/)
gemspec_regexp = Regexp.new(/'elasticsearch-api',\s+'([0-9x.]+)'/)
files.flatten.each do |file|
content = File.read(file)
is_gemspec_file = file.match?('gemspec')
regexp = if is_gemspec_file
gemspec_regexp
else
version_regexp
end
if (match = content.match(regexp))
old_version = match[1]
if is_gemspec_file
content.gsub!("'elasticsearch-api', '#{old_version}'", "'elasticsearch-api', '#{version}'")
else
content.gsub!(old_version, "'#{version}'")
end
else
match = content.match(version_regexp)
old_version = match[1]
content.gsub!(old_version, "'#{version}'")
end
puts "[#{old_version}] -> [#{version}] in #{file.gsub('./', '')}"
File.open(file, 'w') { |f| f.puts content }
end
rescue StandardError => e
raise "[!!!] #{e.class} : #{e.message}"
end
desc <<-DESC
Bump the version in test matrixes:
- .github/workflows
- .buildkite/pipeline.yml
Example:
$ rake automation:bump_matrix[42.0.0]
DESC
task :bumpmatrix, :version do |_, args|
abort('[!] Required argument [version] missing') unless (version = args[:version])
gh_actions = Dir.glob(File.expand_path('../.github/workflows/*.yml', __dir__))
files = gh_actions + ['.buildkite/pipeline.yml']
regexp = Regexp.new(/([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}?+(-SNAPSHOT)?)/)
files.each do |file|
content = File.read(file)
if file == '.buildkite/pipeline.yml'
require 'yaml'
yaml = YAML.safe_load(content)
yaml_tests_branch = yaml['steps'][0]['env']['ES_YAML_TESTS_BRANCH']
if yaml_tests_branch == 'main'
old = content.match(/STACK_VERSION: (.*)/)[1]
new = "STACK_VERSION: #{version}"
content.gsub!(new, old)
else
branch = version.match(/([0-9]+\.[0-9]+)\.[0-9]+.*/)[1]
content.gsub!(yaml_tests_branch, branch)
end
puts "[#{yaml_tests_branch}] -> [#{branch}] in #{file.gsub('./', '')}"
end
match = content.match(regexp)
next if match.nil?
old_version = match[1]
next if old_version == args[:version]
content.gsub!(old_version, args[:version])
puts "[#{old_version}] -> [#{version}] in #{file.gsub('./', '')}"
File.open(file, 'w') { |f| f.puts content }
end
end
desc 'Show current client version'
task :version do
puts Elasticsearch::VERSION
end
end