65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			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
 |