127 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| require "pathname"
 | |
| require "tmpdir"
 | |
| 
 | |
| require_relative "repo_metadata.rb"
 | |
| 
 | |
| class DevsiteBuilder
 | |
|   def initialize build_tag = nil
 | |
|     @build_tag = build_tag || latest_tag
 | |
|     @output_dir = "doc"
 | |
|   end
 | |
| 
 | |
|   def build tag
 | |
|     checkout_tag tag
 | |
|     doc_path = tmp_dir + @output_dir
 | |
|     FileUtils.remove_dir doc_path if Dir.exist? doc_path
 | |
|     markup = "--markup markdown --markup-provider redcarpet"
 | |
| 
 | |
|     Dir.chdir tmp_dir do
 | |
|       cmds = ["-o #{@output_dir}", markup]
 | |
|       cmd "yard --verbose #{cmds.join ' '}"
 | |
|     end
 | |
|     metadata.build doc_path
 | |
|   end
 | |
| 
 | |
|   def upload
 | |
|     Dir.chdir tmp_dir + @output_dir do
 | |
|       opts = [
 | |
|         "--credentials=#{ENV['KOKORO_KEYSTORE_DIR']}/73713_docuploader_service_account",
 | |
|         "--staging-bucket=#{ENV.fetch 'STAGING_BUCKET', 'docs-staging'}",
 | |
|         "--metadata-file=./docs.metadata"
 | |
|       ]
 | |
|       cmd "python3 -m docuploader upload . #{opts.join ' '}"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def publish tag = nil
 | |
|     build(tag || @build_tag)
 | |
|     upload
 | |
|   end
 | |
| 
 | |
|   def publish_if_missing tag = nil
 | |
|     tag ||= @build_tag
 | |
|     puts tag
 | |
|     puts missing? tag
 | |
|     publish tag if missing? tag
 | |
|   end
 | |
| 
 | |
|   def missing? tag
 | |
|     require "httparty"
 | |
| 
 | |
|     url = "https://googleapis.dev/ruby/google-api-client/v#{version tag}/index.html"
 | |
|     response = HTTParty.get url
 | |
|     response.code != 200
 | |
|   rescue StandardError
 | |
|     true
 | |
|   end
 | |
| 
 | |
|   def cmd line
 | |
|     puts line
 | |
|     output = `#{line}`
 | |
|     puts output
 | |
|     output
 | |
|   end
 | |
| 
 | |
|   def metadata
 | |
|     return @metadata if @metadata
 | |
| 
 | |
|     metadata_json = "#{tmp_dir}/.repo-metadata.json"
 | |
|     @metadata = RepoMetadata.from_source metadata_json if File.file? metadata_json
 | |
|     @metadata ||= RepoMetadata.from_source "name"              => "google-api-client",
 | |
|                                            "distribution-name" => "google-api-client",
 | |
|                                            "language"          => "ruby"
 | |
|     @metadata["version"] = "v#{version @build_tag}"
 | |
|     @metadata
 | |
|   end
 | |
| 
 | |
|   def checkout_tag git_tag
 | |
|     Dir.chdir tmp_dir do
 | |
|       `git checkout tags/#{git_tag} -b v#{version git_tag}`
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def version git_tag
 | |
|     m = git_tag.match(/(\d+\.\d+\.\d+)/)
 | |
|     return m if m.nil?
 | |
|     m[0]
 | |
|   end
 | |
| 
 | |
|   def versions
 | |
|     Dir.chdir tmp_dir do
 | |
|       tags.map { |t| version t }.reject(&:nil?).sort_by { |v| Gem::Version.new v }.reverse
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def tags
 | |
|     Dir.chdir tmp_dir do
 | |
|       `git tag`.split "\n"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def latest_version
 | |
|     @latest_version ||= versions.first
 | |
|   end
 | |
| 
 | |
|   def latest_tag
 | |
|     @latest_tag ||= tags.select { |t| t.include? latest_version }.min_by(&:size)
 | |
|   end
 | |
| 
 | |
|   def tmp_dir
 | |
|     return @tmp_dir if @tmp_dir
 | |
| 
 | |
|     tmp = Dir.tmpdir
 | |
|     dir_name = "google-api-ruby-client"
 | |
|     @tmp_dir = Pathname.new(tmp) + dir_name
 | |
|     FileUtils.remove_dir @tmp_dir if Dir.exist? @tmp_dir
 | |
| 
 | |
|     Dir.chdir tmp do
 | |
|       `git clone https://github.com/googleapis/google-api-ruby-client.git`
 | |
|     end
 | |
|     Dir.chdir @tmp_dir do
 | |
|       `git fetch`
 | |
|     end
 | |
| 
 | |
|     @tmp_dir
 | |
|   end
 | |
| end
 |