lib/kite/module.rb in kite-1.0.10 vs lib/kite/module.rb in kite-1.1.1

- old
+ new

@@ -1,34 +1,42 @@ module Kite class Module < Base include Kite::Helpers method_option :env, type: :string, desc: "Environment", required: true, default: ENV['KITE_ENV'] - method_option :version, type: :string, desc: "Version", required: false + method_option :version, type: :string, desc: "Version", aliases: '-v', required: false + method_option :method, type: :string, desc: "Module import method", enum: %w{copy submodule}, default: "submodule" desc 'init https://github.com/foo/bar-module', 'Initialize a kite module and render its vars.module.yml' def init(path) - @env = options[:env] - @path = path - @name = path.gsub(/(.*:|.git)/, '').split('/').last - @cloud = parse_cloud_config(@env) - @version = options[:version] + @env = options[:env] + @module_name = path.gsub(/(.*:|.git)/, '').split('/').last + @module_path = "modules/#{ @module_name }" - unless File.exist? path - @uri = path - @path = "modules/#{@name}" - - clone_module - unless @version.nil? - checkout_version + if File.exist?(@module_path) + overwrite = ask "#{ @module_path } already exists! Overwrite? (y/N)" + if overwrite.downcase == 'y' + say "Remove existing files" + remove_dir(@module_path) + else + say "Skipping module init" + return end + end - say "Use git submodule add #{@path} to be able to commit this module as a submodule", :yellow + case options[:method] + when"submodule" + clone_module(path, @module_path, options[:version]) + when "copy" + FileUtils.mkdir_p("modules") + FileUtils.cp_r(path, @module_path) + else + raise "Unsupported method #{ method }" end - render_vars - - say "Rendered successfully, please fill out config/environments/#{@env}/vars.#{@name}.yml with correct values", :green + @cloud = parse_cloud_config(@env) + vars_output = render_vars(@module_name, @module_path) + say "Rendered successfully #{ vars_output }, please edit this file with correct values", :green end method_option :env, type: :string, desc: "Environment", required: true, default: ENV['KITE_ENV'] desc 'render PATH', 'Render kite module files using vars.*module*.yml' def render(path) @@ -45,55 +53,40 @@ no_commands do def kite_env @env end - def clone_module + def clone_module(uri, path, version) say "Cloning the module" - - if File.exist? @path - overwrite = ask "#{@path} already contains a module! Overwrite? (y/N)" - - if overwrite.downcase == 'y' - remove_dir @path - Git.clone(@uri, @path) - say "Successfully cloned the fresh #{@name}!", :green - else - say "Keeping the current module revision" + run! "git submodule add #{ uri } #{ path }" + run! "git submodule init" + run! "git submodule update" + unless version.to_s.empty? + Dir.chdir(path) do + run! "git checkout #{ version }" end - else - Git.clone(@uri, @path) + run! "git add #{ path }" end + say "Successfully init #{ path }!", :green end - def checkout_version - module_git = Git.open(@path) - - say "Switching to #{@version}" - if @version =~ /\d+\.\d+\.\d+/ && module_git.tags.any? { |t| t.name == @version } - module_git.checkout("tags/#{@version}") - elsif module_git.is_remote_branch? @version - module_git.checkout("origin/#{@version}") - else - say "#{@version} tag/branch was not found in the module, keeping the current one", :red - end + def render_vars(module_name, module_path) + output_file = "config/environments/#{ @env }/vars.#{ module_name }.yml" + create_file output_file, YAML.dump(manifest(module_path)['variables']) + output_file end - def render_vars - create_file "config/environments/#{@env}/vars.#{@name}.yml", YAML.dump(manifest['variables']) - end - def render_templates directory "#{@path}/templates", ".", mode: :preserve chmod "bin", 0755 end def load_vars YAML.load(File.open("config/environments/#{@env}/vars.#{@name}.yml")) end - def manifest - YAML.load(ERB.new(File.read("#{@path}/manifest.yml.tt")).result(binding)) + def manifest(module_path) + YAML.load(ERB.new(File.read("#{module_path}/manifest.yml.tt")).result(binding)) end end end end