Extracting a class to represent a single run
This commit is contained in:
@@ -5,6 +5,6 @@ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
||||
require "pipeline"
|
||||
Pipeline.load_config(File.expand_path('../../config/pipeline.yml', __FILE__))
|
||||
# Pipeline.build_analyzer(ARGV[0])
|
||||
# Pipeline.scratch
|
||||
# Pipeline.build_analyzer("ruby")
|
||||
# Pipeline.release
|
||||
Pipeline.analyzer
|
||||
|
||||
@@ -21,15 +21,13 @@ module Pipeline
|
||||
end
|
||||
|
||||
def self.build_analyzer(track_slug)
|
||||
AnalyzerBuild.("master", track_slug)
|
||||
end
|
||||
|
||||
def self.scratch
|
||||
track_slug = "rust"
|
||||
repo = Pipeline::AnalyzerRepo.for_track(track_slug)
|
||||
latest_tag = repo.tags.keys.last
|
||||
if (latest_tag.nil?)
|
||||
latest_tag = "master"
|
||||
end
|
||||
puts latest_tag
|
||||
AnalyzerBuild.(latest_tag, track_slug)
|
||||
Pipeline::Build::AnalyzerBuild.(latest_tag, track_slug)
|
||||
end
|
||||
|
||||
def self.release
|
||||
@@ -45,11 +43,12 @@ module Pipeline
|
||||
def self.analyzer
|
||||
env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844"
|
||||
environment = Runtime::RuntimeEnvironment.new(env_base)
|
||||
solution_dir = environment.prepare_analysis("ruby", 42)
|
||||
iteration_folder = "#{solution_dir}/iteration"
|
||||
analysis_run = environment.new_analysis("ruby", "two-fer", 42)
|
||||
analysis_run.prepare_iteration do |iteration_folder|
|
||||
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
|
||||
analysis_run.analyze!
|
||||
puts analysis_run.result
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,3 +66,4 @@ require "pipeline/build/build_image"
|
||||
require "pipeline/build/publish_image"
|
||||
require "pipeline/build/analyzer_build"
|
||||
require "pipeline/runtime/runtime_environment"
|
||||
require "pipeline/runtime/analysis_run"
|
||||
|
||||
62
lib/pipeline/runtime/analysis_run.rb
Normal file
62
lib/pipeline/runtime/analysis_run.rb
Normal file
@@ -0,0 +1,62 @@
|
||||
module Pipeline::Runtime
|
||||
class AnalysisRun
|
||||
|
||||
attr_reader :track_dir, :exercise_slug, :runs_dir, :solution_dir,
|
||||
:iteration_folder, :tmp_folder, :current_dir
|
||||
|
||||
def initialize(track_dir, exercise_slug, solution_slug)
|
||||
@track_dir = track_dir
|
||||
@exercise_slug = exercise_slug
|
||||
@runs_dir = "#{track_dir}/runs"
|
||||
@current_dir = "#{track_dir}/current"
|
||||
@solution_dir = "#{runs_dir}/iteration_#{Time.now.to_i}-#{solution_slug}-#{SecureRandom.hex}"
|
||||
@iteration_folder = "#{solution_dir}/iteration"
|
||||
@tmp_folder = "#{solution_dir}/tmp"
|
||||
end
|
||||
|
||||
def prepare_iteration
|
||||
FileUtils.mkdir_p iteration_folder
|
||||
FileUtils.mkdir_p tmp_folder
|
||||
|
||||
configurator.setup_for_terminal_access
|
||||
File.write("#{solution_dir}/terminal_config.json", configurator.build.to_json)
|
||||
|
||||
yield iteration_folder
|
||||
end
|
||||
|
||||
def analyze!
|
||||
container_driver = Pipeline::Util::ContainerDriver.new(runc, img, configurator, solution_dir)
|
||||
container_driver.run_analyzer_for(exercise_slug)
|
||||
end
|
||||
|
||||
def result
|
||||
File.read("#{iteration_folder}/analysis.json")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def configurator
|
||||
@configurator ||= begin
|
||||
configurator = Pipeline::Util::RuncConfigurator.new
|
||||
configurator.seed_from_env
|
||||
configurator.rootfs = rootfs_source
|
||||
configurator
|
||||
end
|
||||
end
|
||||
|
||||
def img
|
||||
@img ||= Pipeline::Util::ImgWrapper.new
|
||||
end
|
||||
|
||||
def runc
|
||||
@runc ||= Pipeline::Util::RuncWrapper.new
|
||||
end
|
||||
|
||||
def rootfs_source
|
||||
@rootfs_source ||= begin
|
||||
release_folder = File.readlink(current_dir)
|
||||
"#{release_folder}/rootfs"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -59,35 +59,44 @@ module Pipeline::Runtime
|
||||
FileUtils.mkdir_p iterations
|
||||
end
|
||||
|
||||
def prepare_analysis(track_slug, solution_id)
|
||||
def new_analysis(track_slug, exercise_slug, solution_slug)
|
||||
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
|
||||
AnalysisRun.new(track_dir, exercise_slug, solution_slug)
|
||||
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 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
|
||||
#
|
||||
# configurator.setup_for_terminal_access
|
||||
# File.write("#{solution_dir}/terminal_config.json", configurator.build.to_json)
|
||||
#
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user