Invoking an analyzer from ruby

This commit is contained in:
Charles Care
2019-09-02 20:23:11 +01:00
parent 39117b9236
commit e3946d2c51
5 changed files with 57 additions and 3 deletions

View File

@@ -6,4 +6,5 @@ require "pipeline"
Pipeline.load_config(File.expand_path('../../config/pipeline.yml', __FILE__))
# Pipeline.build_analyzer(ARGV[0])
# Pipeline.scratch
# Pipeline.release
Pipeline.analyzer

View File

@@ -35,6 +35,7 @@ module Pipeline
def self.release
FileUtils.rm_rf "/tmp/analyzer-env/"
env_base = "/tmp/analyzer-env/#{SecureRandom.hex}"
env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844"
environment = Runtime::RuntimeEnvironment.new(env_base)
environment.prepare
img = Pipeline::Util::ImgWrapper.new
@@ -44,7 +45,11 @@ module Pipeline
def self.analyzer
env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844"
environment = Runtime::RuntimeEnvironment.new(env_base)
environment.create_analyzer_workdir("ruby")
solution_dir = environment.prepare_analysis("ruby", 42)
iteration_folder = "#{solution_dir}/iteration"
File.write("#{iteration_folder}/two_fer.rb", 'puts "hello"')
environment.run_analysis("ruby", solution_dir, "two_fer")
puts File.read("#{iteration_folder}/analysis.json")
end
end

View File

@@ -59,5 +59,41 @@ module Pipeline::Runtime
FileUtils.mkdir_p iterations
end
def prepare_analysis(track_slug, solution_id)
track_dir = "#{env_base}/#{track_slug}"
runs_dir = "#{track_dir}/runs"
current_dir = "#{track_dir}/current"
solution_dir = "#{runs_dir}/iteration_#{Time.now.to_i}-#{solution_id}-#{SecureRandom.hex}"
iteration_folder = "#{solution_dir}/iteration"
tmp_folder = "#{solution_dir}/tmp"
FileUtils.mkdir_p iteration_folder
FileUtils.mkdir_p tmp_folder
solution_dir
end
def run_analysis(track_slug, solution_dir, exercise_slug)
track_dir = "#{env_base}/#{track_slug}"
runs_dir = "#{track_dir}/runs"
current_dir = "#{track_dir}/current"
img = Pipeline::Util::ImgWrapper.new
runc = Pipeline::Util::RuncWrapper.new
configurator = Pipeline::Util::RuncConfigurator.new
configurator.seed_from_env
rootfs_source = "#{File.readlink(current_dir)}/rootfs"
configurator.rootfs = rootfs_source
container_driver = Pipeline::Util::ContainerDriver.new(runc, img, configurator, solution_dir)
container_driver.run_analyzer_for("two-fer")
end
def analyze_solution(track_slug, solution_id, exercise_slug)
iteration_folder = prepare_analysis
yield iteration_folder
run_analysis(iteration_folder, exercise_slug)
end
end
end

View File

@@ -1,6 +1,10 @@
module Pipeline::Util
class RuncConfigurator
attr_accessor :uid_id, :gid_id, :invocation_args, :interactive
attr_accessor :uid_id, :gid_id, :invocation_args, :interactive, :rootfs
def initialize
@rootfs = "./rootfs"
end
def seed_from_env
@uid_id = `id -u`.chomp
@@ -49,7 +53,7 @@ module Pipeline::Util
"noNewPrivileges": true
},
"root": {
"path": "./rootfs",
"path": "#{rootfs}",
"readonly": true
},
"hostname": "exercism-runner",

View File

@@ -72,6 +72,14 @@ module Pipeline::Util
assert_equal [ "rbind", "rw" ], mount["options"]
end
def test_build_config_supports_rootfs_override
configurator.rootfs = "/absolute/path/to/another/rootfs"
config = configurator.build
assert_equal "/absolute/path/to/another/rootfs", config["root"]["path"]
assert_equal true, config["root"]["readonly"]
end
def test_build_config_has_correct_ids
config = configurator.build
refute config.nil?