gapic-generator-cloud 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +117 -0
  3. data/CONTRIBUTING.md +28 -0
  4. data/LICENSE +202 -0
  5. data/README.md +84 -0
  6. data/bin/protoc-gen-ruby_cloud +33 -0
  7. data/bin/ruby-cloud-docker-entrypoint +130 -0
  8. data/cloud-rubocop.yml +14 -0
  9. data/lib/gapic/generator/cloud/version.rb +24 -0
  10. data/lib/gapic/generators/cloud_generator.rb +119 -0
  11. data/lib/gapic/presenters/wrapper_gem_presenter.rb +137 -0
  12. data/lib/gapic/presenters/wrapper_service_presenter.rb +53 -0
  13. data/templates/cloud/gem/authentication.erb +172 -0
  14. data/templates/cloud/gem/gemspec.erb +40 -0
  15. data/templates/cloud/gem/gitignore.erb +23 -0
  16. data/templates/cloud/gem/license.erb +204 -0
  17. data/templates/cloud/gem/rakefile.erb +157 -0
  18. data/templates/cloud/gem/readme.erb +93 -0
  19. data/templates/cloud/gem/repo-metadata.erb +6 -0
  20. data/templates/cloud/gem/rubocop.erb +36 -0
  21. data/templates/cloud/gem/yardopts.erb +13 -0
  22. data/templates/cloud/service/client/_credentials.erb +30 -0
  23. data/templates/cloud/service/client/_requires.erb +2 -0
  24. data/templates/cloud/service/client/_self_configure.erb +15 -0
  25. data/templates/cloud/service/client/method/def/_rescue.erb +3 -0
  26. data/templates/cloud/service/client/method/docs/_error.erb +2 -0
  27. data/templates/cloud/shared/_license.erb +13 -0
  28. data/templates/cloud/wrapper_gem/_main.erb +102 -0
  29. data/templates/cloud/wrapper_gem/client_test.erb +22 -0
  30. data/templates/cloud/wrapper_gem/entrypoint.erb +4 -0
  31. data/templates/cloud/wrapper_gem/gemfile.erb +14 -0
  32. data/templates/cloud/wrapper_gem/gemspec.erb +39 -0
  33. data/templates/cloud/wrapper_gem/main.erb +5 -0
  34. data/templates/cloud/wrapper_gem/rakefile.erb +190 -0
  35. data/templates/cloud/wrapper_gem/readme.erb +95 -0
  36. data/templates/cloud/wrapper_gem/rubocop.erb +23 -0
  37. data/templates/cloud/wrapper_gem/version_test.erb +11 -0
  38. data/templates/cloud/wrapper_gem/yardopts.erb +15 -0
  39. metadata +226 -0
@@ -0,0 +1,93 @@
1
+ # Ruby Client for the <%= gem.title %> API
2
+
3
+ <%= gem.summary %>
4
+
5
+ <%= gem.description %>
6
+
7
+ <%= gem.homepage %>
8
+
9
+ ## Installation
10
+
11
+ ```
12
+ $ gem install <%= gem.name %>
13
+ ```
14
+
15
+ ## Before You Begin
16
+
17
+ In order to use this library, you first need to go through the following steps:
18
+
19
+ 1. [Select or create a Cloud Platform project.](https://console.cloud.google.com/project)
20
+ <%- if gem.free_tier? -%>
21
+ 1. This API has a free tier. You may not need to
22
+ [enable billing](https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)
23
+ to get started.
24
+ <%- else -%>
25
+ 1. [Enable billing for your project.](https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)
26
+ <%- end -%>
27
+ <%- if gem.api_id -%>
28
+ 1. [Enable the API.](https://console.cloud.google.com/apis/library/<%= gem.api_id %>.googleapis.com)
29
+ <%- end -%>
30
+ 1. {file:AUTHENTICATION.md Set up authentication.}
31
+
32
+ ## Quick Start
33
+
34
+ <%- if gem.packages? -%>
35
+ ```ruby
36
+ require "<%= gem.entrypoint_require %>"
37
+ <%- service = gem.packages.first.services.first -%>
38
+ <%- method = service&.methods.first -%>
39
+ <%- if service && method -%>
40
+
41
+ client = <%= service.create_client_call %>
42
+ request = my_create_request
43
+ response = client.<%= method.name %> request
44
+ <%- end -%>
45
+ ```
46
+
47
+ <%- end -%>
48
+ <%- unless gem.library_documentation_url.to_s.empty? -%>
49
+ View the [Client Library Documentation](<%= gem.library_documentation_url %>)
50
+ for class and method documentation.
51
+
52
+ <%- end -%>
53
+ <%- if gem.product_documentation_url -%>
54
+ See also the [Product Documentation](<%= gem.product_documentation_url %>)
55
+ for general usage information.
56
+
57
+ <%- end -%>
58
+ ## Enabling Logging
59
+
60
+ To enable logging for this library, set the logger for the underlying [gRPC](https://github.com/grpc/grpc/tree/master/src/ruby) library.
61
+ The logger that you set may be a Ruby stdlib [`Logger`](https://ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger.html) as shown below,
62
+ or a [`Google::Cloud::Logging::Logger`](https://googleapis.dev/ruby/google-cloud-logging/latest)
63
+ that will write logs to [Cloud Logging](https://cloud.google.com/logging/). See [grpc/logconfig.rb](https://github.com/grpc/grpc/blob/master/src/ruby/lib/grpc/logconfig.rb)
64
+ and the gRPC [spec_helper.rb](https://github.com/grpc/grpc/blob/master/src/ruby/spec/spec_helper.rb) for additional information.
65
+
66
+ Configuring a Ruby stdlib logger:
67
+
68
+ ```ruby
69
+ require "logger"
70
+
71
+ module MyLogger
72
+ LOGGER = Logger.new $stderr, level: Logger::WARN
73
+ def logger
74
+ LOGGER
75
+ end
76
+ end
77
+
78
+ # Define a gRPC module-level logger method before grpc/logconfig.rb loads.
79
+ module GRPC
80
+ extend MyLogger
81
+ end
82
+ ```
83
+
84
+ ## Supported Ruby Versions
85
+
86
+ This library is supported on Ruby 2.4+.
87
+
88
+ Google provides official support for Ruby versions that are actively supported
89
+ by Ruby Core—that is, Ruby versions that are either in normal maintenance or
90
+ in security maintenance, and not end of life. Currently, this means Ruby 2.4
91
+ and later. Older versions of Ruby _may_ still work, but are unsupported and not
92
+ recommended. See https://www.ruby-lang.org/en/downloads/branches/ for details
93
+ about the Ruby support schedule.
@@ -0,0 +1,6 @@
1
+ <%- assert_locals gem -%>
2
+ {
3
+ "language": "ruby",
4
+ "distribution_name": "<%= gem.name %>",
5
+ "client_documentation": "https://googleapis.dev/ruby/<%= gem.name %>/latest"
6
+ }
@@ -0,0 +1,36 @@
1
+ <%- assert_locals gem -%>
2
+ inherit_gem:
3
+ google-style: google-style.yml
4
+
5
+ AllCops:
6
+ Exclude:
7
+ - "<%= gem.name %>.gemspec"
8
+ - "lib/**/*_pb.rb"
9
+ - "proto_docs/**/*"
10
+ - "test/**/*"
11
+ - "acceptance/**/*"
12
+ - "Rakefile"
13
+
14
+ Metrics/AbcSize:
15
+ Enabled: false
16
+ Metrics/ClassLength:
17
+ Enabled: false
18
+ Metrics/CyclomaticComplexity:
19
+ Enabled: false
20
+ Metrics/LineLength:
21
+ Enabled: false
22
+ Metrics/MethodLength:
23
+ Enabled: false
24
+ Metrics/ModuleLength:
25
+ Enabled: false
26
+ Metrics/PerceivedComplexity:
27
+ Enabled: false
28
+ Naming/FileName:
29
+ Exclude:
30
+ - "lib/<%= gem.name %>.rb"
31
+ Style/CaseEquality:
32
+ Enabled: false
33
+ Style/IfUnlessModifier:
34
+ Enabled: false
35
+ Style/ModuleFunction:
36
+ Enabled: false
@@ -0,0 +1,13 @@
1
+ <%- assert_locals gem -%>
2
+ --no-private
3
+ --title=<%= gem.title %> API
4
+ --exclude _pb\.rb$
5
+ --markup markdown
6
+ --markup-provider redcarpet
7
+
8
+ ./lib/**/*.rb
9
+ ./proto_docs/**/*.rb
10
+ -
11
+ README.md
12
+ LICENSE.md
13
+ AUTHENTICATION.md
@@ -0,0 +1,30 @@
1
+ <%- assert_locals service -%>
2
+ <% @requires = capture do %>
3
+ require "googleauth"
4
+ <% end %>
5
+ # Credentials for the <%= service.name %> API.
6
+ class <%= service.credentials_name %> < ::Google::Auth::Credentials
7
+ <%- if service.client_scopes.any? -%>
8
+ self.scope = [
9
+ <%- service.client_scopes.each_with_index do |client_scope, index| -%>
10
+ <%- comma = index == service.client_scopes.count - 1 ? "" : "," -%>
11
+ <%= client_scope.inspect %><%= comma %>
12
+ <%- end -%>
13
+ ]
14
+ <%- end -%>
15
+ self.env_vars = [
16
+ "<%= service.gem.env_prefix %>_CREDENTIALS",
17
+ "<%= service.gem.env_prefix %>_KEYFILE",
18
+ "GOOGLE_CLOUD_CREDENTIALS",
19
+ "GOOGLE_CLOUD_KEYFILE",
20
+ "GCLOUD_KEYFILE",
21
+ "<%= service.gem.env_prefix %>_CREDENTIALS_JSON",
22
+ "<%= service.gem.env_prefix %>_KEYFILE_JSON",
23
+ "GOOGLE_CLOUD_CREDENTIALS_JSON",
24
+ "GOOGLE_CLOUD_KEYFILE_JSON",
25
+ "GCLOUD_KEYFILE_JSON"
26
+ ]
27
+ self.paths = [
28
+ "~/.config/google_cloud/application_default_credentials.json"
29
+ ]
30
+ end
@@ -0,0 +1,2 @@
1
+ <%- assert_locals service -%>
2
+ require "google/cloud/errors"
@@ -0,0 +1,15 @@
1
+ <%- assert_locals service -%>
2
+ @configure ||= begin
3
+ namespace = <%= service.namespace.split("::").reject(&:empty?).inspect %>
4
+ parent_config = while namespace.any?
5
+ parent_name = namespace.join "::"
6
+ parent_const = const_get parent_name
7
+ break parent_const.configure if parent_const&.respond_to? :configure
8
+ namespace.pop
9
+ end
10
+ default_config = <%= service.client_name %>::Configuration.new parent_config
11
+ <%= render partial: "service/client/self_configure_defaults", locals: {service: service} %>
12
+ default_config
13
+ end
14
+ yield @configure if block_given?
15
+ @configure
@@ -0,0 +1,3 @@
1
+ <%- assert_locals method -%>
2
+ rescue ::GRPC::BadStatus => e
3
+ raise ::Google::Cloud::Error.from_error(e)
@@ -0,0 +1,2 @@
1
+ <%- assert_locals method -%>
2
+ # @raise [::Google::Cloud::Error] if the RPC is aborted.
@@ -0,0 +1,13 @@
1
+ # Copyright <%= Time.now.year %> Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
@@ -0,0 +1,102 @@
1
+ <%- assert_locals gem -%>
2
+ <% @requires = capture do %>
3
+ # Require this file early so that the version constant gets defined before
4
+ # requiring "google/cloud". This is because google-cloud-core will load the
5
+ # entrypoint (gem name) file, which in turn re-requires this file (hence
6
+ # causing a require cycle) unless the version constant is already defined.
7
+ require "<%= gem.version_require %>"
8
+
9
+ require "googleauth"
10
+ <%- if gem.needs_default_config_block? -%>
11
+ gem "google-cloud-core"
12
+ require "google/cloud" unless defined? ::Google::Cloud.new
13
+ require "google/cloud/config"
14
+
15
+ # Set the default configuration
16
+ ::Google::Cloud.configure.add_config! :<%= gem.google_cloud_short_name %> do |config|
17
+ config.add_field! :endpoint, <%= gem.services.first&.client_endpoint.inspect %>, match: ::String
18
+ config.add_field! :credentials, nil, match: [::String, ::Hash, ::Google::Auth::Credentials]
19
+ config.add_field! :scope, nil, match: [::Array, ::String]
20
+ config.add_field! :lib_name, nil, match: ::String
21
+ config.add_field! :lib_version, nil, match: ::String
22
+ config.add_field! :interceptors, nil, match: ::Array
23
+ config.add_field! :timeout, nil, match: ::Numeric
24
+ config.add_field! :metadata, nil, match: ::Hash
25
+ config.add_field! :retry_policy, nil, match: [::Hash, ::Proc]
26
+ config.add_field! :quota_project, nil, match: ::String
27
+ end
28
+ <%- end -%>
29
+ <% end %>
30
+ <%- gem.services.each do |service| -%>
31
+ ##
32
+ # Create a new client object for <%= service.module_name %>.
33
+ #
34
+ # By default, this returns an instance of
35
+ # <%= gem.docs_link version: gem.default_version, class_name: "#{service.module_name}::Client" %>
36
+ # for version <%= gem.default_version.capitalize %> of the API.
37
+ # However, you can specify specify a different API version by passing it in the
38
+ # `version` parameter. If the <%= service.module_name %> service is
39
+ # supported by that API version, and the corresponding gem is available, the
40
+ # appropriate versioned client will be returned.
41
+ #
42
+ <%- if service.doc_description -%>
43
+ # ## About <%= service.module_name %>
44
+ #
45
+ <%= indent service.doc_description(disable_xrefs: true), "# " %>
46
+ #
47
+ <%- end -%>
48
+ # @param version [::String, ::Symbol] The API version to connect to. Optional.
49
+ # Defaults to `:<%= gem.default_version %>`.
50
+ # @return [<%= service.module_name %>::Client] A client object for the specified version.
51
+ #
52
+ def self.<%= service.factory_method_name %> version: :<%= gem.default_version %>, &block
53
+ require "<%= gem.namespace_require %>/#{version.to_s.downcase}"
54
+
55
+ package_name = <%= gem.namespace %>
56
+ .constants
57
+ .select { |sym| sym.to_s.downcase == version.to_s.downcase.tr("_", "") }
58
+ .first
59
+ package_module = <%= gem.namespace %>.const_get package_name
60
+ package_module.const_get(:<%= service.module_name %>).const_get(:Client).new(&block)
61
+ end
62
+
63
+ <%- end -%>
64
+ <%- if gem.google_cloud_short_name -%>
65
+ ##
66
+ # Configure the <%= gem.name %> library.
67
+ #
68
+ # The following configuration parameters are supported:
69
+ #
70
+ # * `credentials` (*type:* `String, Hash, Google::Auth::Credentials`) -
71
+ # The path to the keyfile as a String, the contents of the keyfile as a
72
+ # Hash, or a Google::Auth::Credentials object.
73
+ # * `lib_name` (*type:* `String`) -
74
+ # The library name as recorded in instrumentation and logging.
75
+ # * `lib_version` (*type:* `String`) -
76
+ # The library version as recorded in instrumentation and logging.
77
+ # * `interceptors` (*type:* `Array<GRPC::ClientInterceptor>`) -
78
+ # An array of interceptors that are run before calls are executed.
79
+ # * `timeout` (*type:* `Integer`) -
80
+ # Default timeout in milliseconds.
81
+ # * `metadata` (*type:* `Hash{Symbol=>String}`) -
82
+ # Additional gRPC headers to be sent with the call.
83
+ # * `retry_policy` (*type:* `Hash`) -
84
+ # The retry policy. The value is a hash with the following keys:
85
+ # * `:initial_delay` (*type:* `Numeric`) - The initial delay in seconds.
86
+ # * `:max_delay` (*type:* `Numeric`) - The max delay in seconds.
87
+ # * `:multiplier` (*type:* `Numeric`) - The incremental backoff multiplier.
88
+ # * `:retry_codes` (*type:* `Array<String>`) -
89
+ # The error codes that should trigger a retry.
90
+ #
91
+ # @return [::Google::Cloud::Config] The default configuration used by this library
92
+ #
93
+ def self.configure
94
+ yield ::Google::Cloud.configure.<%= gem.google_cloud_short_name %> if block_given?
95
+
96
+ ::Google::Cloud.configure.<%= gem.google_cloud_short_name %>
97
+ end
98
+ <%- end -%>
99
+ <% @footer = capture do %>
100
+ helper_path = ::File.join __dir__, "<%= gem.main_directory_name %>", "helpers.rb"
101
+ require "<%= gem.helpers_require %>" if ::File.file? helper_path
102
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <%- assert_locals gem -%>
2
+ <%= render partial: "shared/header" -%>
3
+
4
+ require "helper"
5
+ require "<%= gem.namespace_require %>"
6
+ require "gapic/common"
7
+ require "gapic/grpc"
8
+
9
+ class <%= gem.namespace %>::ClientConstructionMinitest < Minitest::Test
10
+ <%- gem.services.each do |service| -%>
11
+ def test_<%= service.factory_method_name %>
12
+ Gapic::ServiceStub.stub :new, :stub do
13
+ grpc_channel = GRPC::Core::Channel.new "localhost:8888", nil, :this_channel_is_insecure
14
+ client = <%= gem.namespace %>.<%= service.factory_method_name %> do |config|
15
+ config.credentials = grpc_channel
16
+ end
17
+ assert_kind_of <%= gem.namespaced_class "#{service.module_name}::Client", version: gem.default_version %>, client
18
+ end
19
+ end
20
+
21
+ <%- end -%>
22
+ end
@@ -0,0 +1,4 @@
1
+ <%- assert_locals gem -%>
2
+ <%= render partial: "shared/header" -%>
3
+
4
+ require "<%= gem.namespace_require %>" unless defined? <%= gem.namespace %>::VERSION
@@ -0,0 +1,14 @@
1
+ <%- assert_locals gem -%>
2
+ source "https://rubygems.org"
3
+
4
+ gemspec
5
+
6
+ gem "google-cloud-core", path: "../google-cloud-core"
7
+ gem "google-cloud-env", path: "../google-cloud-env"
8
+ gem "google-cloud-errors", path: "../google-cloud-errors"
9
+ <%- gem.gem_version_dependencies.each do |name, _requirement| -%>
10
+ gem "<%= name %>", path: "../<%= name %>"
11
+ <%- end -%>
12
+
13
+ # google-protobuf 3.12.0 requires Ruby 2.5 or later, so pin to 3.11 on older Rubies
14
+ gem "google-protobuf", (RUBY_VERSION < "2.5" ? "~> 3.11.4" : "~> 3.12")
@@ -0,0 +1,39 @@
1
+ <%- assert_locals gem -%>
2
+ # -*- ruby -*-
3
+ # encoding: utf-8
4
+
5
+ require File.expand_path("lib/<%= gem.version_require %>", __dir__)
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.name = "<%= gem.name %>"
9
+ gem.version = <%= gem.version_name_full %>
10
+
11
+ gem.authors = <%= gem.authors.inspect %>
12
+ gem.email = <%= gem.email.inspect %>
13
+ gem.description = <%= gem.description.inspect %>
14
+ gem.summary = <%= gem.summary.inspect %>
15
+ gem.homepage = <%= gem.homepage.inspect %>
16
+ gem.license = "Apache-2.0"
17
+
18
+ gem.platform = Gem::Platform::RUBY
19
+
20
+ gem.files = `git ls-files -- lib/*`.split("\n") +
21
+ <%= gem.extra_files.inspect %>
22
+ gem.require_paths = ["lib"]
23
+
24
+ gem.required_ruby_version = ">= 2.4"
25
+
26
+ gem.add_dependency "google-cloud-core", "~> 1.5"
27
+ <%- gem.gem_version_dependencies.each do |name, requirement| -%>
28
+ gem.add_dependency "<%= name %>", "~> <%= requirement %>"
29
+ <%- end -%>
30
+
31
+ gem.add_development_dependency "google-style", "~> 1.24.0"
32
+ gem.add_development_dependency "minitest", "~> 5.14"
33
+ gem.add_development_dependency "minitest-focus", "~> 1.1"
34
+ gem.add_development_dependency "minitest-rg", "~> 5.2"
35
+ gem.add_development_dependency "rake", ">= 12.0"
36
+ gem.add_development_dependency "redcarpet", "~> 3.0"
37
+ gem.add_development_dependency "simplecov", "~> 0.9"
38
+ gem.add_development_dependency "yard", "~> 0.9"
39
+ end
@@ -0,0 +1,5 @@
1
+ <%- assert_locals gem -%>
2
+ <%= render partial: "wrapper_gem/main",
3
+ layout: "layouts/ruby",
4
+ locals: { gem: gem, namespace: gem.namespace }
5
+ %>
@@ -0,0 +1,190 @@
1
+ <%- assert_locals gem -%>
2
+ <%- service = gem.services.first -%>
3
+ <%- assert_locals service -%>
4
+ <%= render partial: "shared/header" -%>
5
+
6
+ require "bundler/setup"
7
+ require "bundler/gem_tasks"
8
+
9
+ require "rubocop/rake_task"
10
+ RuboCop::RakeTask.new
11
+
12
+ require "rake/testtask"
13
+ desc "Run tests."
14
+ Rake::TestTask.new do |t|
15
+ t.libs << "test"
16
+ t.test_files = FileList["test/**/*_test.rb"]
17
+ t.warning = true
18
+ end
19
+
20
+ namespace :test do
21
+ desc "Runs tests with coverage."
22
+ task :coverage do
23
+ require "simplecov"
24
+ SimpleCov.start do
25
+ command_name "<%= gem.name %>"
26
+ track_files "lib/**/*.rb"
27
+ add_filter "test/"
28
+ end
29
+
30
+ Rake::Task[:test].invoke
31
+ end
32
+ end
33
+
34
+ desc "Runs the smoke tests."
35
+ Rake::TestTask.new :smoke_test do |t|
36
+ t.test_files = FileList["acceptance/**/*smoke_test.rb"]
37
+ t.warning = false
38
+ end
39
+
40
+ namespace :smoke_test do
41
+ desc "Runs smoke tests with coverage."
42
+ task :coverage do
43
+ require "simplecov"
44
+ SimpleCov.start do
45
+ command_name "<%= gem.name %>"
46
+ track_files "lib/**/*.rb"
47
+ add_filter "test/"
48
+ end
49
+
50
+ Rake::Task[:smoke_test].invoke
51
+ end
52
+ end
53
+
54
+ # Acceptance tests
55
+ desc "Run the <%= gem.name %> acceptance tests."
56
+ task :acceptance, :project, :keyfile do |t, args|
57
+ project = args[:project]
58
+ project ||=
59
+ ENV["<%= gem.env_prefix %>_TEST_PROJECT"] ||
60
+ ENV["GCLOUD_TEST_PROJECT"]
61
+ keyfile = args[:keyfile]
62
+ keyfile ||=
63
+ ENV["<%= gem.env_prefix %>_TEST_KEYFILE"] ||
64
+ ENV["GCLOUD_TEST_KEYFILE"]
65
+ if keyfile
66
+ keyfile = File.read keyfile
67
+ else
68
+ keyfile ||=
69
+ ENV["<%= gem.env_prefix %>_TEST_KEYFILE_JSON"] ||
70
+ ENV["GCLOUD_TEST_KEYFILE_JSON"]
71
+ end
72
+ if project.nil? || keyfile.nil?
73
+ fail "You must provide a project and keyfile. e.g. rake acceptance[test123, /path/to/keyfile.json] or <%= gem.env_prefix %>_TEST_PROJECT=test123 <%= gem.env_prefix %>_TEST_KEYFILE=/path/to/keyfile.json rake acceptance"
74
+ end
75
+ require "<%= service.credentials_require %>"
76
+ <%= service.credentials_name_full %>.env_vars.each do |path|
77
+ ENV[path] = nil
78
+ end
79
+ ENV["<%= gem.env_prefix %>_PROJECT"] = project
80
+ ENV["<%= gem.env_prefix %>_TEST_PROJECT"] = project
81
+ ENV["<%= gem.env_prefix %>_KEYFILE_JSON"] = keyfile
82
+
83
+ Rake::Task["acceptance:run"].invoke
84
+ end
85
+
86
+ namespace :acceptance do
87
+ task :run do
88
+ if File.directory? "acceptance"
89
+ Rake::Task[:smoke_test].invoke
90
+ else
91
+ puts "The <%= gem.name %> gem has no acceptance tests."
92
+ end
93
+ end
94
+
95
+ desc "Run acceptance tests with coverage."
96
+ task :coverage do
97
+ end
98
+
99
+ desc "Run acceptance cleanup."
100
+ task :cleanup do
101
+ end
102
+ end
103
+
104
+ task :samples do
105
+ Rake::Task["samples:latest"].invoke
106
+ end
107
+
108
+ namespace :samples do
109
+ task :latest do
110
+ if File.directory? "samples"
111
+ Dir.chdir "samples" do
112
+ Bundler.with_clean_env do
113
+ ENV["GOOGLE_CLOUD_SAMPLES_TEST"] = "not_master"
114
+ sh "bundle update"
115
+ sh "bundle exec rake test"
116
+ end
117
+ end
118
+ else
119
+ puts "The <%= gem.name %> gem has no samples to test."
120
+ end
121
+ end
122
+
123
+ task :master do
124
+ if File.directory? "samples"
125
+ Dir.chdir "samples" do
126
+ Bundler.with_clean_env do
127
+ ENV["GOOGLE_CLOUD_SAMPLES_TEST"] = "master"
128
+ sh "bundle update"
129
+ sh "bundle exec rake test"
130
+ end
131
+ end
132
+ else
133
+ puts "The <%= gem.name %> gem has no samples to test."
134
+ end
135
+ end
136
+ end
137
+
138
+ require "yard"
139
+ require "yard/rake/yardoc_task"
140
+ YARD::Rake::YardocTask.new do |y|
141
+ <%- if gem.yard_strict? -%>
142
+ y.options << "--fail-on-warning"
143
+ <%- end -%>
144
+ end
145
+
146
+ desc "Run yard-doctest example tests."
147
+ task :doctest do
148
+ puts "The <%= gem.name %> gem does not have doctest tests."
149
+ end
150
+
151
+ desc "Run the CI build"
152
+ task :ci do
153
+ header "BUILDING <%= gem.name %>"
154
+ header "<%= gem.name %> rubocop", "*"
155
+ Rake::Task[:rubocop].invoke
156
+ header "<%= gem.name %> yard", "*"
157
+ Rake::Task[:yard].invoke
158
+ header "<%= gem.name %> test", "*"
159
+ Rake::Task[:test].invoke
160
+ end
161
+
162
+ namespace :ci do
163
+ desc "Run the CI build, with smoke tests."
164
+ task :smoke_test do
165
+ Rake::Task[:ci].invoke
166
+ header "<%= gem.name %> smoke_test", "*"
167
+ Rake::Task[:smoke_test].invoke
168
+ end
169
+ desc "Run the CI build, with acceptance tests."
170
+ task :acceptance do
171
+ Rake::Task[:ci].invoke
172
+ header "<%= gem.name %> acceptance", "*"
173
+ Rake::Task[:acceptance].invoke
174
+ end
175
+ task :a do
176
+ # This is a handy shortcut to save typing
177
+ Rake::Task["ci:acceptance"].invoke
178
+ end
179
+ end
180
+
181
+ task default: :test
182
+
183
+ def header str, token = "#"
184
+ line_length = str.length + 8
185
+ puts ""
186
+ puts token * line_length
187
+ puts "#{token * 3} #{str} #{token * 3}"
188
+ puts token * line_length
189
+ puts ""
190
+ end