Files
analyzer-pipeline/lib/pipeline/runtime/runtime_environment.rb

115 lines
3.4 KiB
Ruby
Raw Normal View History

2019-09-02 09:38:22 +01:00
module Pipeline::Runtime
class RuntimeEnvironment
2019-11-15 15:49:05 +00:00
def self.container_repo(channel, language_slug, credentials)
2019-11-17 14:49:20 +00:00
suffix = "-dev" unless ENV["env"] == "production"
2019-11-15 15:49:05 +00:00
container_slug = case channel
when "static_analyzers"
2019-11-17 14:49:20 +00:00
"#{language_slug}-analyzer#{suffix}"
2019-11-15 15:49:05 +00:00
when "test_runners"
2019-11-17 14:49:20 +00:00
"#{language_slug}-test-runner#{suffix}"
2019-11-15 15:49:05 +00:00
when "representers"
2019-11-17 14:49:20 +00:00
"#{language_slug}-representer#{suffix}"
2019-11-15 15:49:05 +00:00
else
raise "Unknown channel: #{channel}"
end
Pipeline::ContainerRepo.instance_for(container_slug, credentials)
end
2019-11-17 14:49:20 +00:00
def self.source_repo(channel, language_slug)
suffix = case channel
when "static_analyzers"
"analyzer"
when "test_runners"
"test-runner"
when "representers"
"representer"
else
raise "Unknown channel: #{channel}"
end
Pipeline::AnalyzerRepo.for_track(language_slug, suffix)
end
2019-09-02 09:38:22 +01:00
attr_reader :env_base
def initialize(env_base)
@env_base = env_base
end
def prepare
FileUtils.mkdir_p env_base
end
def released?(track_slug, version)
track_dir = "#{env_base}/#{track_slug}/#{version}"
current_dir = "#{track_dir}/current"
File.exist? current_dir
end
def release(channel, language_slug, version, credentials)
2019-11-15 15:49:05 +00:00
container_repo = RuntimeEnvironment.container_repo(channel, language_slug, credentials)
release_container(language_slug, version, container_repo)
2019-10-14 09:33:22 +01:00
end
def list_deployed_containers
glob_pattern = "#{env_base}/*/*/current"
versions = {}
Dir.glob(glob_pattern).map do |match|
folder = match.gsub("#{env_base}/", "").gsub(/\/current$/, "")
track_slug,version = folder.split("/")
versions[track_slug] = version
end
versions
end
def release_container(track_slug, version, container_repo)
track_dir = "#{env_base}/#{track_slug}/#{version}"
2019-09-02 09:38:22 +01:00
release_dir = "#{track_dir}/releases/#{Time.now.to_i}_release"
current_dir = "#{track_dir}/current"
FileUtils.mkdir_p release_dir
2019-09-30 09:26:08 +01:00
logs = Pipeline::Util::LogCollector.new
img = Pipeline::Util::ImgWrapper.new logs
runc = Pipeline::Util::RuncWrapper.new logs
2019-09-02 09:38:22 +01:00
configurator = Pipeline::Util::RuncConfigurator.new
configurator.seed_from_env
container_driver = Pipeline::Util::ContainerDriver.new(runc, img, configurator, release_dir)
user,password = container_repo.create_login_token
img.reset_hub_login
img.login("AWS", password, container_repo.repository_url)
2019-09-02 09:38:22 +01:00
2019-10-14 09:33:22 +01:00
remote_tag = "#{container_repo.repository_url}:#{version}"
2019-09-02 09:38:22 +01:00
puts remote_tag
img.pull(remote_tag)
puts "pulled"
container_driver.unpack_image(remote_tag)
puts "unpacked"
system("chmod -R a-w #{release_dir}")
system("chmod -R go-rwx #{release_dir}")
2019-09-30 09:26:08 +01:00
puts "current_dir #{current_dir} -> #{release_dir}"
2019-09-02 09:38:22 +01:00
FileUtils.symlink(release_dir, current_dir, force: true)
end
def track_dir(track_slug, version)
container_slug = "#{track_slug}/#{version}"
"#{env_base}/#{container_slug}"
end
def new_invocation(track_slug, version, exercise_slug, solution_slug)
container_slug = "#{track_slug}/#{version}"
puts "AnalysisRun: #{container_slug} #{exercise_slug} #{solution_slug}"
track_dir = "#{env_base}/#{container_slug}"
AnalysisRun.new(track_dir, exercise_slug, solution_slug)
2019-09-02 20:23:11 +01:00
end
2019-09-02 09:38:22 +01:00
end
end