This commit is contained in:
Charles Care
2019-11-11 20:27:07 +00:00
parent 59a458f068
commit 352eca0003
11 changed files with 63 additions and 141 deletions

24
bin/build_test_runner.rb Normal file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env ruby
require "bundler/setup"
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
require "pipeline"
track_slug = ARGV[0]
project_suffix = "test-runner"
env_suffix = (ENV["env"] == "production") ? "" : "-dev"
puts "Building <#{project_suffix}> for <#{track_slug}> (#{env_suffix})"
repo = Pipeline::AnalyzerRepo.for_track(track_slug, project_suffix)
latest_tag = repo.tags.keys.last
if (latest_tag.nil?)
latest_tag = "master"
end
config = YAML.load(File.read(File.expand_path('../../config/pipeline.yml', __FILE__)))
credentials = Aws::Credentials.new(config["aws_access_key_id"], config["aws_secret_access_key"])
container_repo = Pipeline::ContainerRepo.new("#{track_slug}-#{project_suffix}#{env_suffix}", credentials)
Pipeline::Build::TestRunnerBuild.(latest_tag, track_slug, repo, container_repo)

View File

@@ -38,14 +38,6 @@ class PipelineClient
return parsed return parsed
end end
def build_analyzer(track_slug)
send_msg("build-analyzer_#{track_slug}", 300)
end
def build_test_runner(track_slug)
send_msg("build-test-runner_#{track_slug}", 300)
end
def analyze(track_slug, exercise_slug, solution_slug, iteration_folder) def analyze(track_slug, exercise_slug, solution_slug, iteration_folder)
params = { params = {
action: "analyze_iteration", action: "analyze_iteration",

View File

@@ -1,23 +0,0 @@
#!/usr/bin/env ruby
require_relative "./client"
pipeline = PipelineClient.new
# return
lang = ARGV[0] || "ruby"
lang = "ruby"
r = pipeline.analyze(lang, "two-fer", "soln-42", "s3://exercism-dev/iterations/fff07700-e1c3-402d-8937-823aeefb159f")
# puts r
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"]
pipeline.close_socket

View File

@@ -1,23 +0,0 @@
#!/usr/bin/env ruby
require_relative "./client"
pipeline = PipelineClient.new
# return
lang = ARGV[0] || "ruby"
lang = "ruby"
r = pipeline.test_run(lang, "two-fer", "soln-42", "s3://exercism-dev/iterations/fff07700-e1c3-402d-8937-823aeefb159f")
# puts r
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"]
pipeline.close_socket

View File

@@ -1,25 +0,0 @@
#!/usr/bin/env ruby
require_relative "./client"
pipeline = PipelineClient.new
# return
lang = ARGV[0] || "ruby"
lang = ARGV[1] || "ruby"
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|
puts "+ #{log_line["cmd"]}"
puts log_line["stdout"]
puts log_line["stderr"]
end
end
puts r["result"]
pipeline.close_socket

View File

@@ -8,6 +8,4 @@ Pipeline.load_config(File.expand_path('../../config/pipeline.yml', __FILE__))
context = ZMQ::Context.new context = ZMQ::Context.new
router = Pipeline::Rpc::Router.new(context) router = Pipeline::Rpc::Router.new(context)
router.run router.run

View File

@@ -28,56 +28,38 @@ module Pipeline
@config @config
end end
def self.build_analyzer(track_slug) # def self.release(language_slug)
repo = Pipeline::AnalyzerRepo.for_track(track_slug) # puts "Releasing #{language_slug}"
latest_tag = repo.tags.keys.last # env_base = "/tmp/analyzer-env/#{SecureRandom.hex}"
if (latest_tag.nil?) # env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844"
latest_tag = "master" # environment = Runtime::RuntimeEnvironment.new(env_base)
end # environment.prepare
Pipeline::Build::AnalyzerBuild.(latest_tag, track_slug, repo) # environment.release_analyzer(language_slug)
end # end
#
def self.build_test_runner(track_slug) # def self.analyze!(language_slug, exercise_slug, solution_slug)
repo = Pipeline::AnalyzerRepo.test_runner_for_track(track_slug) # env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844"
latest_tag = repo.tags.keys.last # environment = Runtime::RuntimeEnvironment.new(env_base)
if (latest_tag.nil?) # analysis_run = environment.new_analysis(language_slug, exercise_slug, solution_slug)
latest_tag = "master" # analysis_run.prepare_iteration do |iteration_folder|
end # yield(iteration_folder)
Pipeline::Build::TestRunnerBuild.(latest_tag, track_slug, repo) # end
end # begin
# analysis_run.analyze!
def self.release(language_slug) # rescue => e
puts "Releasing #{language_slug}" # puts e
env_base = "/tmp/analyzer-env/#{SecureRandom.hex}" # ensure
env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844" # # puts "---"
environment = Runtime::RuntimeEnvironment.new(env_base) # # puts analysis_run.stdout
environment.prepare # # puts "==="
environment.release_analyzer(language_slug) # # puts analysis_run.stderr
end # # puts "---"
# # puts analysis_run.success?
def self.analyze!(language_slug, exercise_slug, solution_slug) # # puts analysis_run.exit_status
env_base = "/tmp/analyzer-env/1e9c733fd7502974c2a3fdd85da9c844" # # puts analysis_run.result
environment = Runtime::RuntimeEnvironment.new(env_base) # puts "DONE"
analysis_run = environment.new_analysis(language_slug, exercise_slug, solution_slug) # end
analysis_run.prepare_iteration do |iteration_folder| # end
yield(iteration_folder)
end
begin
analysis_run.analyze!
rescue => e
puts e
ensure
# puts "---"
# puts analysis_run.stdout
# puts "==="
# puts analysis_run.stderr
# puts "---"
# puts analysis_run.success?
# puts analysis_run.exit_status
# puts analysis_run.result
puts "DONE"
end
end
end end
# require "pipeline/rpc/router" # require "pipeline/rpc/router"

View File

@@ -4,13 +4,8 @@ class Pipeline::AnalyzerRepo
attr_reader :repo_url attr_reader :repo_url
def self.for_track(track_slug) def self.for_track(track_slug, suffix)
repo_url = "https://github.com/exercism/#{track_slug}-analyzer" repo_url = "https://github.com/exercism/#{track_slug}-#{suffix}"
Pipeline::AnalyzerRepo.new(repo_url)
end
def self.test_runner_for_track(track_slug)
repo_url = "https://github.com/exercism/#{track_slug}-test-runner"
Pipeline::AnalyzerRepo.new(repo_url) Pipeline::AnalyzerRepo.new(repo_url)
end end

View File

@@ -1,6 +1,6 @@
class Pipeline::ContainerRepo class Pipeline::ContainerRepo
def self.instance_for(image_name, credentials) def self.instance_for(container_slug, credentials)
Pipeline::ContainerRepo.new(container_slug, credentials) Pipeline::ContainerRepo.new(container_slug, credentials)
end end

View File

@@ -65,10 +65,12 @@ module Pipeline::Rpc::Worker
msg = [] msg = []
@poller.listen_for_messages do |action_task| @poller.listen_for_messages do |action_task|
puts "ACTION #{action_task}"
unless action_task.nil? unless action_task.nil?
action_task.environment = environment action_task.environment = environment
result = action_task.invoke result = action_task.invoke
if result && result["return_address"] puts "RESULT #{result}"
if result && result[:return_address]
outgoing.send_string(result.to_json) outgoing.send_string(result.to_json)
end end
end end

View File

@@ -27,7 +27,7 @@ module Pipeline::Build
end end
def test_check_tag_permits_master_branch def test_check_tag_permits_master_branch
@analyzer_repo = Pipeline::AnalyzerRepo.for_track("demotrack") @analyzer_repo = Pipeline::AnalyzerRepo.for_track("demotrack", "analyzer")
@cmd = AnalyzerBuild.new("master", "demotrack", @analyzer_repo, nil) @cmd = AnalyzerBuild.new("master", "demotrack", @analyzer_repo, nil)
@cmd.expects(:repo).never @cmd.expects(:repo).never
@cmd.check_tag_exists @cmd.check_tag_exists