From a6082d158b61b2830322faf15c02d69cbd3ccff5 Mon Sep 17 00:00:00 2001 From: Graham Paye Date: Fri, 11 Oct 2019 10:56:55 -0700 Subject: [PATCH] chore: publish to googleapis.dev on release (#242) --- .kokoro/release.cfg | 2 +- .repo-metadata.json | 5 ++++ .rubocop.yml | 1 + Rakefile | 19 ++++++++++-- googleauth.gemspec | 1 + rakelib/devsite_builder.rb | 45 +++++++++++++++++++++++++++++ rakelib/repo_metadata.rb | 59 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 .repo-metadata.json create mode 100644 rakelib/devsite_builder.rb create mode 100644 rakelib/repo_metadata.rb diff --git a/.kokoro/release.cfg b/.kokoro/release.cfg index ec95571..f4f543e 100644 --- a/.kokoro/release.cfg +++ b/.kokoro/release.cfg @@ -60,7 +60,7 @@ build_file: "google-auth-library-ruby/.kokoro/trampoline.sh" # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/google-cloud-ruby/ruby-release" + value: "gcr.io/cloud-devrel-kokoro-resources/yoshi-ruby/release" } env_vars: { diff --git a/.repo-metadata.json b/.repo-metadata.json new file mode 100644 index 0000000..2ee3eb3 --- /dev/null +++ b/.repo-metadata.json @@ -0,0 +1,5 @@ +{ + "name": "googleauth", + "language": "ruby", + "distribution-name": "googleauth" +} \ No newline at end of file diff --git a/.rubocop.yml b/.rubocop.yml index b560582..d9fb038 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -5,6 +5,7 @@ AllCops: Exclude: - "spec/**/*" - "Rakefile" + - "rakelib/**/*" Metrics/ClassLength: Max: 110 Exclude: diff --git a/Rakefile b/Rakefile index 4f71c3c..2d0f70f 100755 --- a/Rakefile +++ b/Rakefile @@ -13,7 +13,7 @@ task :release_gem, :tag do |_t, args| raise "You must provide a tag to release." if tag.nil? # Verify the tag format "vVERSION" - m = tag.match(/google-auth-library-ruby\/v(?\S*)/) + m = tag.match /v(?\S*)/ raise "Tag #{tag} does not match the expected format." if m.nil? version = m[:version] @@ -35,16 +35,23 @@ task :release_gem, :tag do |_t, args| end path_to_be_pushed = "pkg/googleauth-#{version}.gem" + gem_was_published = nil if File.file? path_to_be_pushed begin - ::Gems.push File.new(path_to_be_pushed) + response = ::Gems.push File.new(path_to_be_pushed) + puts response + raise unless response.include? "Successfully registered gem:" + gem_was_published = true puts "Successfully built and pushed googleauth for version #{version}" rescue StandardError => e + gem_was_published = false puts "Error while releasing googleauth version #{version}: #{e.message}" end else raise "Cannot build googleauth for version #{version}" end + + Rake::Task["kokoro:publish_docs"].invoke if gem_was_published end namespace :kokoro do @@ -76,7 +83,13 @@ namespace :kokoro do .first.split("(").last.split(")").first || "0.1.0" end Rake::Task["kokoro:load_env_vars"].invoke - Rake::Task["release_gem"].invoke "google-auth-library-ruby/v#{version}" + Rake::Task["release_gem"].invoke "v#{version}" + end + + task :publish_docs do + require_relative "rakelib/devsite_builder.rb" + + DevsiteBuilder.new(__dir__).publish end end diff --git a/googleauth.gemspec b/googleauth.gemspec index 921c021..f6e0615 100755 --- a/googleauth.gemspec +++ b/googleauth.gemspec @@ -33,4 +33,5 @@ Gem::Specification.new do |gem| gem.add_dependency "multi_json", "~> 1.11" gem.add_dependency "os", ">= 0.9", "< 2.0" gem.add_dependency "signet", "~> 0.12" + gem.add_development_dependency "yard", "~> 0.9" end diff --git a/rakelib/devsite_builder.rb b/rakelib/devsite_builder.rb new file mode 100644 index 0000000..06ebb7a --- /dev/null +++ b/rakelib/devsite_builder.rb @@ -0,0 +1,45 @@ +require "pathname" + +require_relative "repo_metadata.rb" + +class DevsiteBuilder + def initialize master_dir = "." + @master_dir = Pathname.new master_dir + @output_dir = "doc" + @metadata = RepoMetadata.from_source "#{master_dir}/.repo-metadata.json" + end + + def build + FileUtils.remove_dir @output_dir if Dir.exist? @output_dir + markup = "--markup markdown" + + Dir.chdir @master_dir do + cmds = ["-o #{@output_dir}", markup] + cmd "yard --verbose #{cmds.join ' '}" + end + @metadata.build @master_dir + @output_dir + end + + def upload + Dir.chdir @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 + build + upload + end + + def cmd line + puts line + output = `#{line}` + puts output + output + end +end diff --git a/rakelib/repo_metadata.rb b/rakelib/repo_metadata.rb new file mode 100644 index 0000000..38035a8 --- /dev/null +++ b/rakelib/repo_metadata.rb @@ -0,0 +1,59 @@ +require "json" + +class RepoMetadata + attr_reader :data + + def initialize data + @data = data + normalize_data! + end + + def allowed_fields + [ + "name", "version", "language", "distribution-name", + "product-page", "github-repository", "issue-tracker" + ] + end + + def build output_directory + fields = @data.to_a.map { |kv| "--#{kv[0]} #{kv[1]}" } + Dir.chdir output_directory do + cmd "python3 -m docuploader create-metadata #{fields.join ' '}" + end + end + + def normalize_data! + require_relative "../lib/googleauth/version.rb" + + @data.delete_if { |k, _| !allowed_fields.include?(k) } + @data["version"] = Google::Auth::VERSION + end + + def [] key + data[key] + end + + def []= key, value + @data[key] = value + end + + def cmd line + puts line + output = `#{line}` + puts output + output + end + + def self.from_source source + if source.is_a? RepoMetadata + data = source.data + elsif source.is_a? Hash + data = source + elsif File.file? source + data = JSON.parse File.read(source) + else + raise "Source must be a path, hash, or RepoMetadata instance" + end + RepoMetadata.new data + end +end