# frozen_string_literal: true

require "rake"

RUBYDOC_DIR = "#{__dir__}/rubydoc".freeze

task default: :build

desc "Generate documentation with YARD"
task :yard do
  cd "#{__dir__}/../Library/Homebrew" do
    sh "bundle exec yard doc --output #{RUBYDOC_DIR}"
  end
end

desc "Build the site."
task :build do
  sh "bundle exec jekyll build"
end

desc "Run Markdownlint to validate the Markdown style."
task :lint do
  sh "mdl $(git ls-files '*.md' | grep -v 'Manpage.md' | grep -v '^docs/index.md$' | grep -v '^index.md$')"
  cd(__dir__) { sh "mdl --style index.mdl_style.rb index.md" } if File.exist?("#{__dir__}/index.md")
  sh "grep -L '^last_review_date:' $(git ls-files '*.md' | grep -v 'Manpage.md') | " \
     "xargs -I {} echo 'File {} is missing last_review_date frontmatter.'"
end

desc "Run HTMLProofer to validate the HTML output."
task test: :build do
  require "html-proofer"

  HOMEBREW_USER_AGENT = ENV.fetch("HOMEBREW_USER_AGENT", nil).freeze
  HTMLProofer.check_directory(
    "./_site",
    parallel:            { in_threads: 4 },
    typhoeus:            {
      headers: {
        "User-Agent" => "#{"#{HOMEBREW_USER_AGENT} " if HOMEBREW_USER_AGENT}HTMLProofer/#{HTMLProofer::VERSION}",
      },
    },
    favicon:             true,
    ignore_status_codes: [0, 403, 429],
    check_favicon:       true,
    check_opengraph:     true,
    check_html:          true,
    check_img_http:      true,
    enforce_https:       true,
    ignore_files:        [
      /Kickstarter-Supporters/,
      %r{/rubydoc/},
    ],
    ignore_urls:         [
      "/",
      %r{https://docs\.brew\.sh/},
      %r{/rubydoc/},
      %r{https://github.com/},
      %r{https://homebrew.1password.com/},
      %r{https://gist.github.com/},
      "https://metacpan.org/pod/local::lib",
      %r{https://www\.virustotal\.com/?},
      %r{https://pypi.org/?},
      "https://itunes.apple.com/us/app/xcode/id497799835",
    ],
    cache:               {
      timeframe: {
        external: "1d",
        internal: "1h",
      },
    },
  ).run
end
