lib/raykit/runner.rb



# frozen_string_literal: true


require "yaml"

module Raykit
  class Runner
    def self.run(git_url)
      commands = []
      local_dir = Dir.mktmpdir("runner")
      puts "local_dir : #{local_dir}"
      commands << Raykit::Command.new("git clone #{git_url} #{local_dir}")
      Dir.chdir(local_dir) do
        commands << Raykit::Command.new("git log -n 1")
        yaml = get_build_yaml(local_dir)
        build_hash = YAML.safe_load(yaml)
        build_commands = Raykit::Command.parse_yaml_commands(yaml)
        if build_hash.key?("image")
          image = build_hash["image"]
          build_commands.insert(0, "cd home")
          build_commands.insert(1, "git clone #{git_url} build")
          build_commands.insert(2, "cd build")
          build_commands_string = build_commands.join(";")
          commands << Raykit::Command.new("docker run #{image} sh -c \"#{build_commands_string}\"")
        else
          build_commands.each do |cmd_string|
            commands << Rakkit::Command.new(cmd_string)
          end
        end
      end
      FileUtils.rm_rf(local_dir)
      commands
    end

    def self.get_build_yaml(directory)
      yaml = ""
      Dir.chdir(directory) do
        yaml = File.open(".gitlab-ci.yml").read if File.exist?(".gitlab-ci.yml")
      end
      yaml
    end
  end
end