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
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)
params = {
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
router = Pipeline::Rpc::Router.new(context)
router.run

View File

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

View File

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

View File

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

View File

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

View File

@@ -27,7 +27,7 @@ module Pipeline::Build
end
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.expects(:repo).never
@cmd.check_tag_exists