From e52712c79ab31d03790d398ebc8c4268e30e8240 Mon Sep 17 00:00:00 2001 From: "Marc A. Paradise" Date: Fri, 9 Apr 2021 16:44:51 -0400 Subject: WIP - add a tesk to invoke buildkite container tests locally Signed-off-by: Marc A. Paradise --- Rakefile | 1 + tasks/bkrun.rb | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tasks/bkrun.rb diff --git a/Rakefile b/Rakefile index d3a8aebf44..fbe5990607 100644 --- a/Rakefile +++ b/Rakefile @@ -25,6 +25,7 @@ begin require_relative "tasks/dependencies" require_relative "tasks/docs" require_relative "tasks/spellcheck" + require_relative "tasks/bkrun" unless ENV.key?('CI') require_relative "chef-utils/lib/chef-utils/dist" unless defined?(ChefUtils::Dist) rescue LoadError => e puts "Skipping missing rake dep: #{e}" diff --git a/tasks/bkrun.rb b/tasks/bkrun.rb new file mode 100644 index 0000000000..80f19938dd --- /dev/null +++ b/tasks/bkrun.rb @@ -0,0 +1,49 @@ +require "yaml" + +namespace :bkrun do + def create_tasks_from_expeditor_verification_pipeline + spec = YAML.load_file(".expeditor/verify.pipeline.yml") + spec["steps"].each do |step| + + if step.class == Hash && image = step.dig("expeditor", "executor", "docker", "image") + image = image.split("/")[1] + #os, rubyversion = image.split(":") + test_group, component_name = nil + step["commands"].each do |cmd| + test_group ||= if cmd == "rake spec" + "spec" + elsif cmd =~ /rake spec:(.*)/ + $1 + else + nil + end + component_name ||= cmd =~ /cd (.*)/ ? $1 : nil + end + + + # We'll skip anything we can't find either a test group or comp onent name for. + # This primarily affects windows integration/functional - they're not yet available here + # (and when they are available, they must be run from a windows host) + name = test_group || component_name + next if name.nil? + + desc "Run via docker: #{step["label"].gsub(":ruby:", "ruby")}" # ruby #{rubyversion} #{name} tests on #{os}" + + task "#{name}-#{image.gsub(":", "-")}" do + docker_cfg = step["expeditor"]["executor"]["docker"] + flags = "" + if docker_cfg["privileged"] + flags << " --privileged " + end + + if docker_cfg["environment"] + flags << "-e #{docker_cfg["environment"].join(",")}" + end + sh "docker run #{flags} --volume $(pwd):/workdir --workdir /workdir rubydistros/#{image} #{flags} sh -e -c '#{step["commands"].join(" && ")}'" + end + end + end + end + create_tasks_from_expeditor_verification_pipeline +end + -- cgit v1.2.1