lib/raykit/rake.rb



# frozen_string_literal: true


require "time"

module Raykit
  class Rake
    def self.run(remote, branch, task = "default")
      repo = Raykit::Git::Repository.new(remote)
      rel_dir = repo.relative_path
      commit = repo.latest_commit(branch)
      log_filename = "#{Environment.get_dev_dir("log")}/RayKit.Runner/#{rel_dir}/#{branch}/#{commit}.json"
      if File.exist?(log_filename)
        Command.parse(File.read(log_filename))
      else
        run_dir = "#{Environment.get_dev_dir("tmp")}/#{rel_dir}.#{branch}.#{commit}"
        unless Dir.exist?(run_dir)
          parent_dir = File.expand_path("..", run_dir)
          FileUtils.mkdir_p(parent_dir) unless Dir.exist?(parent_dir)
          cmd = Command.new("git clone #{remote} #{run_dir}")
        end
        Dir.chdir(run_dir) do
          cmd = Command.new("rake #{task}")
          parent_dir = File.dirname(log_filename)
          FileUtils.mkdir_p(parent_dir) unless Dir.exist?(parent_dir)
          File.open(log_filename, "w") do |f|
            f.write(JSON.generate(cmd.to_hash))
          end
          return cmd
        end
      end
    end

    def self.rake(rakefile, task)
      Dir.chdir(File.dirname(rakefile)) do
        Raykit::TopLevel.run("rake #{task}", true)
      end
    end
  end
end