class Nanoc::CLI::Commands::Deploy

Public Instance Methods

run() click to toggle source
# File lib/nanoc/cli/commands/deploy.rb, line 15
def run
  load_site
  # FIXME: ugly to preprocess here
  site.compiler.action_provider.preprocess(site)

  # List deployers
  if options[:'list-deployers']
    deployers      = Nanoc::Int::PluginRegistry.instance.find_all(Nanoc::Extra::Deployer)
    deployer_names = deployers.keys.sort_by(&:to_s)
    puts 'Available deployers:'
    deployer_names.each do |name|
      puts "  #{name}"
    end
    return
  end

  # Get & list configs
  deploy_configs = site.config.fetch(:deploy, {})

  if options[:list]
    if deploy_configs.empty?
      puts 'No deployment configurations.'
    else
      puts 'Available deployment configurations:'
      deploy_configs.keys.each do |name|
        puts "  #{name}"
      end
    end
    return
  end

  # Can't proceed further without a deploy config
  if deploy_configs.empty?
    raise Nanoc::Int::Errors::GenericTrivial, 'The site has no deployment configurations.'
  end

  # Get target
  target = options.fetch(:target, :default).to_sym
  config = deploy_configs.fetch(target) do
    raise Nanoc::Int::Errors::GenericTrivial, "The site has no deployment configuration for #{target}."
  end

  # Get deployer
  names = Nanoc::Extra::Deployer.all.keys
  name = config.fetch(:kind) do
    $stderr.puts 'Warning: The specified deploy target does not have a kind attribute. Assuming rsync.'
    'rsync'
  end
  deployer_class = Nanoc::Extra::Deployer.named(name)
  if deployer_class.nil?
    raise Nanoc::Int::Errors::GenericTrivial, "The specified deploy target has an unrecognised kind “#{name}” (expected one of #{names.join(', ')})."
  end

  # Check
  unless options[:'no-check']
    runner = Nanoc::Extra::Checking::Runner.new(site)
    if runner.dsl_present?
      puts 'Running issue checks…'
      ok = runner.run_for_deploy
      unless ok
        puts 'Issues found, deploy aborted.'
        return
      end
      puts 'No issues found. Deploying!'
    end
  end

  # Run
  deployer = deployer_class.new(
    site.config[:output_dir],
    config,
    dry_run: options[:'dry-run'])
  deployer.run
end