require "bundler/gem_tasks"

require "rake/testtask"
Rake::TestTask.new(:unit) do |t|
  t.libs.push "lib"
  t.test_files = FileList["spec/**/*_spec.rb"]
  t.verbose = true
end

begin
  require "cucumber"
  require "cucumber/rake/task"
  Cucumber::Rake::Task.new(:features) do |t|
    t.cucumber_opts = ["features", "-x", "--format progress", "--no-color", "--tags ~@ignore"]
  end
rescue LoadError
  puts "cucumber is not available. (sudo) gem install cucumber to run tests."
end

desc "Run all test suites"
task test: %i{unit features}

desc "Display LOC stats"
task :stats do
  puts "\n## Production Code Stats"
  sh "countloc -r lib/kitchen lib/kitchen.rb"
  puts "\n## Test Code Stats"
  sh "countloc -r spec features"
end

begin
  require "chefstyle"
  require "rubocop/rake_task"
  RuboCop::RakeTask.new(:style) do |task|
    task.options += ["--display-cop-names", "--no-color"]
  end
rescue LoadError
  puts "chefstyle is not available. (sudo) gem install chefstyle to do style checking."
end

desc "Run all quality tasks"
task quality: %i{style stats}

begin
  require "yard" unless defined?(YARD)
  YARD::Rake::YardocTask.new
rescue LoadError
  puts "yard is not available. (sudo) gem install yard to generate yard documentation."
end

task default: %i{test quality}

begin
  require "github_changelog_generator/task"
  require "kitchen/version"

  GitHubChangelogGenerator::RakeTask.new :changelog do |config|
    config.future_release = "v#{Kitchen::VERSION}"
    config.enhancement_labels = "enhancement,Enhancement,New Feature,Feature,Improvement".split(",")
    config.bug_labels = "bug,Bug".split(",")
    config.exclude_labels = %w{Duplicate Question Discussion No_Changelog}
  end
rescue LoadError
  puts "github_changelog_generator is not available." \
       " (sudo) gem install github_changelog_generator to generate changelogs"
end

namespace :docs do
  desc "Deploy docs"
  task :deploy do
    sh "cd docs && hugo"
    sh "aws --profile chef-cd s3 sync docs/public s3://test-kitchen-legacy.cd.chef.co --delete --acl public-read"
    sh "aws --profile chef-cd cloudfront create-invalidation --distribution-id EQD8MRW086SRT --paths '/*'"
  end
end
