Add sample script and extracted common code
This commit is contained in:
40
bin/example.rb
Normal file
40
bin/example.rb
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require_relative "./client"
|
||||
|
||||
pipeline = PipelineClient.new
|
||||
|
||||
puts "Sample for ruby:two-fer"
|
||||
|
||||
action = ARGV[0]
|
||||
lang = "ruby"
|
||||
exercise_slug = "two-fer"
|
||||
solution_slug = "soln-demo"
|
||||
|
||||
source = ARGV[1] || "s3://exercism-iterations/production/iterations/1182520"
|
||||
|
||||
r = case action
|
||||
when "test"
|
||||
pipeline.test_run(lang, exercise_slug, solution_slug, source)
|
||||
when "analyze"
|
||||
pipeline.analyze(lang, exercise_slug, solution_slug, source)
|
||||
when "represent"
|
||||
pipeline.represent(lang, exercise_slug, solution_slug, source)
|
||||
else
|
||||
raise "Command #{action} unknown.\n Usage: ./example.rb test|analyze|represent [s3_url]"
|
||||
end
|
||||
|
||||
pipeline.close_socket
|
||||
|
||||
puts " === Complete ==="
|
||||
|
||||
|
||||
if r["logs"]
|
||||
r["logs"].each do |log_line|
|
||||
puts "+ #{log_line["cmd"]}"
|
||||
puts log_line["stdout"]
|
||||
puts log_line["stderr"]
|
||||
end
|
||||
end
|
||||
|
||||
puts r["result"]
|
||||
@@ -4,11 +4,13 @@ require_relative "./client"
|
||||
|
||||
pipeline = PipelineClient.new
|
||||
|
||||
|
||||
# return
|
||||
lang = ARGV[0] || "ruby"
|
||||
lang = "ruby"
|
||||
lang = ARGV[1] || "ruby"
|
||||
|
||||
r = pipeline.represent(lang, "two-fer", "soln-42", "s3://exercism-dev/iterations/fff07700-e1c3-402d-8937-823aeefb159f")
|
||||
r = pipeline.represent(lang, "two-fer", "soln-42",
|
||||
"s3://exercism-iterations/production/iterations/1182520")
|
||||
# puts r
|
||||
if r["logs"]
|
||||
r["logs"].each do |log_line|
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module Pipeline::Rpc::Worker
|
||||
|
||||
class AnalyzeAction < WorkerAction
|
||||
class AnalyzeAction < ContainerAction
|
||||
|
||||
attr_reader :reader, :return_address
|
||||
|
||||
@@ -14,52 +14,24 @@ module Pipeline::Rpc::Worker
|
||||
Pipeline::Runtime::AnalysisRun.new(track_dir, exercise_slug, solution_slug)
|
||||
end
|
||||
|
||||
def invoke
|
||||
s3 = Aws::S3::Client.new(
|
||||
credentials: parse_credentials(request["context"]),
|
||||
region: "eu-west-1")
|
||||
|
||||
language_slug = request["track_slug"]
|
||||
exercise_slug = request["exercise_slug"]
|
||||
solution_slug = request["solution_slug"]
|
||||
location = request["iteration_folder"]
|
||||
container_version = request["container_version"]
|
||||
|
||||
unless environment.released?(language_slug, container_version)
|
||||
return {
|
||||
error: "Container #{language_slug}:#{container_version} isn't available"
|
||||
}
|
||||
end
|
||||
|
||||
analysis_run = setup(language_slug, container_version, exercise_slug, solution_slug)
|
||||
analysis_run.prepare_iteration do |iteration_folder|
|
||||
location_uri = URI(location)
|
||||
bucket = location_uri.host
|
||||
path = location_uri.path[1..]
|
||||
params = {
|
||||
def prepare_folder(iteration_folder)
|
||||
location = @request["iteration_folder"]
|
||||
location_uri = URI(location)
|
||||
bucket = location_uri.host
|
||||
path = location_uri.path[1..]
|
||||
params = {
|
||||
bucket: bucket,
|
||||
prefix: "#{path}/",
|
||||
}
|
||||
resp = s3.list_objects(params)
|
||||
resp.contents.each do |item|
|
||||
key = item[:key]
|
||||
filename = File.basename(key)
|
||||
s3.get_object({
|
||||
bucket: bucket,
|
||||
prefix: "#{path}/",
|
||||
}
|
||||
resp = s3.list_objects(params)
|
||||
resp.contents.each do |item|
|
||||
key = item[:key]
|
||||
filename = File.basename(key)
|
||||
s3.get_object({
|
||||
bucket: bucket,
|
||||
key: key,
|
||||
response_target: "#{iteration_folder}/#{filename}"
|
||||
})
|
||||
end
|
||||
end
|
||||
begin
|
||||
result = analysis_run.analyze!
|
||||
result["return_address"] = return_address
|
||||
result['msg_type'] = 'response'
|
||||
result
|
||||
rescue => e
|
||||
puts e
|
||||
ensure
|
||||
puts "DONE"
|
||||
key: key,
|
||||
response_target: "#{iteration_folder}/#{filename}"
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
54
lib/pipeline/rpc/worker/container_action.rb
Normal file
54
lib/pipeline/rpc/worker/container_action.rb
Normal file
@@ -0,0 +1,54 @@
|
||||
module Pipeline::Rpc::Worker
|
||||
|
||||
class ContainerAction < WorkerAction
|
||||
|
||||
attr_reader :reader, :return_address, :s3
|
||||
|
||||
def initialize(request, return_address)
|
||||
@request = request
|
||||
@return_address = return_address
|
||||
end
|
||||
|
||||
def setup(track_slug, version, exercise_slug, solution_slug)
|
||||
track_dir = environment.track_dir(track_slug, version)
|
||||
Pipeline::Runtime::AnalysisRun.new(track_dir, exercise_slug, solution_slug)
|
||||
end
|
||||
|
||||
def invoke
|
||||
@s3 = Aws::S3::Client.new(
|
||||
credentials: parse_credentials(request["context"]),
|
||||
region: "eu-west-1")
|
||||
|
||||
language_slug = request["track_slug"]
|
||||
exercise_slug = request["exercise_slug"]
|
||||
solution_slug = request["solution_slug"]
|
||||
container_version = request["container_version"]
|
||||
|
||||
unless environment.released?(language_slug, container_version)
|
||||
return {
|
||||
error: "Container #{language_slug}:#{container_version} isn't available"
|
||||
}
|
||||
end
|
||||
|
||||
analysis_run = setup(language_slug, container_version, exercise_slug, solution_slug)
|
||||
analysis_run.prepare_iteration do |iteration_folder|
|
||||
prepare_folder(iteration_folder)
|
||||
end
|
||||
begin
|
||||
result = analysis_run.analyze!
|
||||
result["return_address"] = return_address
|
||||
result['msg_type'] = 'response'
|
||||
result
|
||||
rescue => e
|
||||
puts e
|
||||
ensure
|
||||
puts "DONE"
|
||||
end
|
||||
end
|
||||
|
||||
def prepare_folder(iteration_folder)
|
||||
raise "Please prepare input"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user