google-api-ruby-client/rakelib/devsite/link_checker.rb

65 lines
1.8 KiB
Ruby

require "open3"
class LinkChecker
def initialize
@failed = false
end
def run
job_info
git_commit = ENV.fetch "KOKORO_GITHUB_COMMIT", "master"
markdown_files = Dir.glob "**/*.md"
broken_markdown_links = check_links(markdown_files,
"https://github.com/googleapis/google-api-ruby-client/tree/#{git_commit}",
" --skip '^(?!(\\Wruby.*google|.*google.*\\Wruby|.*cloud\\.google\\.com))'")
broken_devsite_links = check_links(["google-api-client"],
"https://googleapis.dev/ruby",
"/latest/ --recurse --skip https:.*github.*")
puts_broken_links broken_markdown_links
puts_broken_links broken_devsite_links
end
def check_links location_list, base, tail
broken_links = Hash.new { |h, k| h[k] = [] }
location_list.each do |location|
out, err, st = Open3.capture3 "npx linkinator #{base}/#{location}#{tail}"
puts out
unless st.to_i.zero?
@failed = true
puts err
end
checked_links = out.split "\n"
checked_links.select! { |link| link =~ /\[\d+\]/ && !link.include?("[200]") }
unless checked_links.empty?
@failed = true
broken_links[location] += checked_links
end
end
broken_links
end
def puts_broken_links link_hash
link_hash.each do |location, links|
puts "#{location} contains the following broken links:"
links.each { |link| puts " #{link}" }
puts ""
end
end
def job_info
line_length = "Using Ruby - #{RUBY_VERSION}".length + 8
puts
puts "#" * line_length
puts "### Using Ruby - #{RUBY_VERSION} ###"
puts "#" * line_length
puts
end
def exit_status
@failed ? 1 : 0
end
end