namespace :shiplane do
desc "Install Shiplane" task :install, :app_name do |t, args| puts "Running Task: 'shiplane:install'" Rake::Task['shiplane:capify'].invoke Rake::Task['shiplane:generate_shiplane_folder'].invoke Rake::Task['shiplane:generate_insert_on_build_folder'].invoke Rake::Task['shiplane:generate_shiplane_yaml_file'].invoke(args[:app_name]) Rake::Task['shiplane:generate_production_dockerfile_stages_file'].invoke end task :capify do puts "Running Task: 'shiplane:capify'" shiplane_gems = %w(shiplane shiplane_bootstrappers_chef shiplane_deployers_capistrano_docker) if File.exist?('Capfile') warn "[warn] Capistrano installation detected. Check the Shiplane documentation for details on how to add shiplane to your existing Capistrano configuration" end Rake::Task['shiplane:generate_config_folder'].invoke Rake::Task['shiplane:generate_capistrano_config_deploy_folder'].invoke Rake::Task['shiplane:generate_capfile'].invoke(shiplane_gems) Rake::Task['shiplane:generate_capistrano_deploy_file'].invoke Rake::Task['shiplane:generate_production_environment_deploy_file'].invoke end task :generate_folder, :folder_path do |t, args| puts "Running Task: 'shiplane:generate_folder'" if Dir.exist?(args[:folder_path]) warn "[skip] #{args[:folder_path]} already exists" else FileUtils.mkdir_p args[:folder_path] puts "#{args[:folder_path]} created" end Rake::Task['shiplane:generate_folder'].reenable end task :generate_file, :file_path, :file_contents do |t, args| puts "Running Task: 'shiplane:generate_file'" if File.exist?(args[:file_path]) warn "[skip] #{args[:file_path]} already exists" else File.write(args[:file_path], args[:file_contents]) puts "#{args[:file_path]} created" end Rake::Task['shiplane:generate_file'].reenable end task :generate_shiplane_folder do puts "Running Task: 'shiplane:generate_shiplane_folder'" Rake::Task['shiplane:generate_folder'].invoke('.shiplane') end task :generate_insert_on_build_folder do puts "Running Task: 'shiplane:generate_insert_on_build_folder'" Rake::Task['shiplane:generate_folder'].invoke('.shiplane/insert_on_build') end task :generate_config_folder do puts "Running Task: 'shiplane:generate_config_folder'" Rake::Task['shiplane:generate_folder'].invoke('config') end task :generate_capistrano_config_deploy_folder do puts "Running Task: 'shiplane:generate_capistrano_config_deploy_folder'" Rake::Task['shiplane:generate_folder'].invoke('config/deploy') end task :generate_shiplane_yaml_file, :app_name do |t, args| puts "Running Task: 'shiplane:generate_shiplane_yaml_file'" app_name = args[:app_name] shiplane_yml_erb_filepath = File.expand_path("../../generators/shiplane/install/templates/shiplane.yml.erb", __dir__) Rake::Task['shiplane:generate_file'].invoke( 'shiplane.yml', ERB.new(File.read(shiplane_yml_erb_filepath), nil, '-').result(binding), ) end task :generate_production_dockerfile_stages_file do puts "Running Task: 'shiplane:generate_production_dockerfile_stages_file'" production_dockerfile_stages_template_filepath = File.expand_path("../../generators/shiplane/install/templates/production_dockerfile_stages.erb", __dir__) Rake::Task['shiplane:generate_file'].invoke( '.shiplane/production_dockerfile_stages', ERB.new(File.read(production_dockerfile_stages_template_filepath), nil, '-').result, ) end task :generate_capfile, :gems do |t, args| puts "Running Task: 'shiplane:generate_capfile'" gems = args[:gems] capfile_template_filepath = File.expand_path("../../generators/shiplane/install/templates/Capfile.erb", __dir__) Rake::Task['shiplane:generate_file'].invoke( 'Capfile', ERB.new(File.read(capfile_template_filepath), nil, '-').result(binding), ) end task :generate_capistrano_deploy_file do puts "Running Task: 'shiplane:generate_capistrano_deploy_file'" capistrano_deploy_template_filepath = File.expand_path("../../generators/shiplane/install/templates/deploy.rb.erb", __dir__) Rake::Task['shiplane:generate_file'].invoke( 'config/deploy.rb', ERB.new(File.read(capistrano_deploy_template_filepath), nil, '-').result, ) end task :generate_production_environment_deploy_file do puts "Running Task: 'shiplane:generate_production_environment_deploy_file'" production_environment_deploy_filepath = File.expand_path("../../generators/shiplane/install/templates/production.rb.erb", __dir__) Rake::Task['shiplane:generate_file'].invoke( 'config/deploy/production.rb', ERB.new(File.read(production_environment_deploy_filepath), nil, '-').result, ) end
end