require "bundler/gem_tasks" require "json" task :release_gem, :tag do |_t, args| tag = args[:tag] raise "You must provide a tag to release." if tag.nil? # Verify the tag format "vVERSION" m = tag.match(/v(?\S*)/) raise "Tag #{tag} does not match the expected format." if m.nil? version = m[:version] raise "You must provide a version." if version.nil? api_token = ENV["RUBYGEMS_API_TOKEN"] require "gems" if api_token ::Gems.configure do |config| config.key = api_token end end Bundler.with_clean_env do sh "rm -rf pkg" sh "bundle update" sh "bundle exec rake build" end path_to_be_pushed = "pkg/google-api-client-#{version}.gem" gem_was_published = nil if File.file? path_to_be_pushed begin 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 google-api-client for version #{version}" rescue StandardError => e gem_was_published = false puts "Error while releasing google-api-client version #{version}: #{e.message}" end else raise "Cannot build google-api-client for version #{version}" end Rake::Task["kokoro:publish_docs"].invoke if gem_was_published end task default: :spec namespace :kokoro do task :load_env_vars do service_account = "#{ENV['KOKORO_GFILE_DIR']}/service-account.json" ENV["GOOGLE_APPLICATION_CREDENTIALS"] = service_account filename = "#{ENV['KOKORO_GFILE_DIR']}/env_vars.json" env_vars = JSON.parse File.read(filename) env_vars.each { |k, v| ENV[k] = v } end task :presubmit do Rake::Task["spec"].invoke end task :continuous do Rake::Task["spec"].invoke end task :nightly do Rake::Task["spec"].invoke end task :post do require_relative "rakelib/devsite/link_checker.rb" link_checker = LinkChecker.new link_checker.run exit link_checker.exit_status end task :release do Rake::Task["kokoro:publish_gem"].invoke Rake::Task["kokoro:publish_docs"].invoke end task :publish_gem do require "gems" load_env_vars if ENV["KOKORO_GFILE_DIR"] api_token = ENV["RUBYGEMS_API_TOKEN"] if api_token ::Gems.configure do |config| config.key = api_token end end rm_rf "pkg" Rake::Task["build"].invoke built_gem_path = Dir.glob("pkg/google-api-client-*.gem").last response = ::Gems.push File.new built_gem_path puts response raise "Failed to release gem" unless response.include? "Successfully registered gem:" end desc "Publish docs for the latest git tag" task :publish_docs do require_relative "rakelib/devsite/devsite_builder.rb" DevsiteBuilder.new.publish ENV["DOCS_BUILD_TAG"] end end def load_env_vars service_account = "#{ENV['KOKORO_GFILE_DIR']}/service-account.json" raise "#{service_account} is not a file" unless File.file? service_account ENV["GOOGLE_APPLICATION_CREDENTIALS"] = service_account filename = "#{ENV['KOKORO_GFILE_DIR']}/ruby_env_vars.json" raise "#{filename} is not a file" unless File.file? filename env_vars = JSON.parse File.read(filename) env_vars.each { |k, v| ENV[k] ||= v } end def header str, token = "#" line_length = str.length + 8 puts puts token * line_length puts "#{token * 3} #{str} #{token * 3}" puts token * line_length puts end