summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc A. Paradise <marc.paradise@gmail.com>2021-04-09 16:44:51 -0400
committerMarc A. Paradise <marc.paradise@gmail.com>2021-04-21 13:05:37 -0400
commite52712c79ab31d03790d398ebc8c4268e30e8240 (patch)
tree75e0235f987ac25e30f75a768c27e00e68b23a3b
parentf83776b8180f23d92dd5f69a24b4063a34364543 (diff)
downloadchef-mp/knife-gem-specs.tar.gz
WIP - add a tesk to invoke buildkite container tests locallymp/knife-gem-specs
Signed-off-by: Marc A. Paradise <marc.paradise@gmail.com>
-rw-r--r--Rakefile1
-rw-r--r--tasks/bkrun.rb49
2 files changed, 50 insertions, 0 deletions
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
+