OpenSearch/dev-tools/build_randomization.rb

76 lines
2.4 KiB
Ruby
Raw Normal View History

#!/usr/bin/env ruby
# Licensed to ElasticSearch and Shay Banon under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF 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
#
# generate property file for the jdk randomization test
#
#
require 'yaml'
class JDKSelector
attr_reader :directory, :jdk_list
def initialize(directory)
@directory = directory
end
# get selection of available jdks from jenkins automatic install directory
def get_jdk
@jdk_list = Dir.entries(directory).select do |x|
x.chars.first == 'J'
end.map do |y|
File.join(directory, y)
end
self
end
# do ranomize selection from a given array
def select_one(selection_array = nil)
selection_array ||= @jdk_list
selection_array[rand(selection_array.size)]
end
end
# given a jdk directory selection, generate revelant environment variables
def get_env_matrix(data_array)
[*data_array].map do |x|
{
'PATH' => File.join(x,'bin') + ':' + ENV['PATH'],
'JAVA_HOME' => x,
'BUILD_DESC' => File.basename(x)
}
end
end
# pick first element out of array of hashes, generate write java property file
def generate_property_file(directory, data)
#array transformation
content = data.first.map do |key, value|
"%s=%s"%[key, value]
end
file_name = (ENV['BUILD_ID'] + ENV['BUILD_NUMBER']) || 'prop'
file_name = file_name.split(File::SEPARATOR).first + '.txt'
File.open(File.join(directory, file_name), 'w') do |file|
file.write(content.join("\n"))
end
end
# jenkins sets pwd prior to execution
jdk_selector = JDKSelector.new(File.join(ENV['PWD'],'tools','hudson.model.JDK'))
environment_matrix = get_env_matrix(jdk_selector.get_jdk.select_one)
working_directory = ENV['WORKSPACE'] || '/var/tmp'
generate_property_file(working_directory, environment_matrix)