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
							 |