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
|