appengine 0.4.6 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +2 -1
- data/CHANGELOG.md +26 -0
- data/README.md +34 -27
- data/lib/appengine/env.rb +4 -5
- data/lib/appengine/exec.rb +10 -406
- data/lib/appengine/railtie.rb +4 -9
- data/lib/appengine/tasks.rb +218 -144
- data/lib/appengine/util/gcloud.rb +25 -22
- data/lib/appengine/version.rb +5 -5
- data/lib/appengine.rb +12 -5
- metadata +94 -20
- data/Rakefile +0 -42
data/lib/appengine/tasks.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 Google LLC
|
2
4
|
#
|
3
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
6
|
# you may not use this file except in compliance with the License.
|
@@ -11,19 +13,14 @@
|
|
11
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
14
|
# See the License for the specific language governing permissions and
|
13
15
|
# limitations under the License.
|
14
|
-
;
|
15
16
|
|
16
|
-
# This file should be loaded or required from a Rakefile to define AppEngine
|
17
|
-
# related tasks.
|
18
17
|
|
19
18
|
require "shellwords"
|
20
19
|
|
21
20
|
require "appengine/util/gcloud"
|
22
21
|
require "appengine/exec"
|
23
22
|
|
24
|
-
|
25
23
|
module AppEngine
|
26
|
-
|
27
24
|
##
|
28
25
|
# # App Engine Rake Tasks.
|
29
26
|
#
|
@@ -66,6 +63,16 @@ module AppEngine
|
|
66
63
|
#
|
67
64
|
# The following environment variable parameters are supported:
|
68
65
|
#
|
66
|
+
# #### GAE_TIMEOUT
|
67
|
+
#
|
68
|
+
# Amount of time to wait before appengine:exec terminates the command.
|
69
|
+
# Expressed as a string formatted like: "2h15m10s". Default is "10m".
|
70
|
+
#
|
71
|
+
# #### GAE_PROJECT
|
72
|
+
#
|
73
|
+
# The ID of your Google Cloud project. If not specified, uses the current
|
74
|
+
# project from gcloud.
|
75
|
+
#
|
69
76
|
# #### GAE_CONFIG
|
70
77
|
#
|
71
78
|
# Path to the App Engine config file, used when your app has multiple
|
@@ -74,22 +81,47 @@ module AppEngine
|
|
74
81
|
#
|
75
82
|
# #### GAE_SERVICE
|
76
83
|
#
|
77
|
-
# Name of the service to be used.
|
78
|
-
#
|
84
|
+
# Name of the service to be used. Overrides any service name specified in
|
85
|
+
# your config file.
|
86
|
+
#
|
87
|
+
# #### GAE_EXEC_STRATEGY
|
88
|
+
#
|
89
|
+
# The execution strategy to use. Valid values are "deployment" (which is the
|
90
|
+
# default for App Engine Standard apps) and "cloud_build" (which is the
|
91
|
+
# default for App Engine Flexible apps).
|
92
|
+
#
|
93
|
+
# Normally you should leave the strategy set to the default. The main reason
|
94
|
+
# to change it is if your app runs on the Flexible Environment and talks to
|
95
|
+
# a database over a VPC (using a private IP address). The "cloud_build"
|
96
|
+
# strategy used by default for Flexible apps cannot connect to a VPC, so you
|
97
|
+
# should use "deployment" in this case. (But note that, otherwise, the
|
98
|
+
# "deployment" strategy is significantly slower for apps on the Flexible
|
99
|
+
# environment.)
|
79
100
|
#
|
80
101
|
# #### GAE_VERSION
|
81
102
|
#
|
82
103
|
# The version of the service, used to identify which application image to
|
83
104
|
# use to run your command. If not specified, uses the most recently created
|
84
105
|
# version, regardless of whether that version is actually serving traffic.
|
106
|
+
# Applies only to the "cloud_build" strategy. (The "deployment" strategy
|
107
|
+
# deploys its own temporary version of your app.)
|
85
108
|
#
|
86
|
-
# ####
|
109
|
+
# #### GAE_EXEC_WRAPPER_IMAGE
|
87
110
|
#
|
88
|
-
#
|
89
|
-
#
|
111
|
+
# The fully-qualified name of the wrapper image to use. (This is a Docker
|
112
|
+
# image that emulates the App Engine environment in Google Cloud Build for
|
113
|
+
# the "cloud_build" strategy, and applies only to that strategy.) Normally,
|
114
|
+
# you should not override this unless you are testing a new wrapper.
|
115
|
+
#
|
116
|
+
# #### CLOUD_BUILD_GCS_LOG_DIR
|
90
117
|
#
|
118
|
+
# GCS bucket name of the cloud build log when GAE_STRATEGY is "cloud_build".
|
119
|
+
# (ex. "gs://BUCKET-NAME/FOLDER-NAME")
|
91
120
|
module Tasks
|
92
|
-
|
121
|
+
## @private
|
122
|
+
PROJECT_ENV = "GAE_PROJECT"
|
123
|
+
## @private
|
124
|
+
STRATEGY_ENV = "GAE_EXEC_STRATEGY"
|
93
125
|
## @private
|
94
126
|
CONFIG_ENV = "GAE_CONFIG"
|
95
127
|
## @private
|
@@ -100,11 +132,12 @@ module AppEngine
|
|
100
132
|
TIMEOUT_ENV = "GAE_TIMEOUT"
|
101
133
|
## @private
|
102
134
|
WRAPPER_IMAGE_ENV = "GAE_EXEC_WRAPPER_IMAGE"
|
135
|
+
## @private
|
136
|
+
GCS_LOG_DIR = "CLOUD_BUILD_GCS_LOG_DIR"
|
103
137
|
|
104
138
|
@defined = false
|
105
139
|
|
106
140
|
class << self
|
107
|
-
|
108
141
|
##
|
109
142
|
# @private
|
110
143
|
# Define rake tasks.
|
@@ -123,189 +156,230 @@ module AppEngine
|
|
123
156
|
|
124
157
|
def setup_exec_task
|
125
158
|
::Rake.application.last_description =
|
126
|
-
|
127
|
-
::Rake::Task.define_task "appengine:exec", [:cmd] do |
|
159
|
+
"Execute the given command in Google App Engine."
|
160
|
+
::Rake::Task.define_task "appengine:exec", [:cmd] do |_t, args|
|
128
161
|
verify_gcloud_and_report_errors
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
bundle exec rake appengine:exec --
|
140
|
-
MESSAGE
|
141
|
-
end
|
142
|
-
command = ::ARGV[i..-1]
|
143
|
-
if command.empty?
|
144
|
-
show_usage
|
145
|
-
exit
|
146
|
-
end
|
147
|
-
end
|
148
|
-
app_exec = Exec.new \
|
149
|
-
command,
|
150
|
-
service: ::ENV[SERVICE_ENV],
|
151
|
-
config_path: ::ENV[CONFIG_ENV],
|
152
|
-
version: ::ENV[VERSION_ENV],
|
153
|
-
timeout: ::ENV[TIMEOUT_ENV],
|
154
|
-
wrapper_image: ::ENV[WRAPPER_IMAGE_ENV]
|
162
|
+
command = extract_command args[:cmd], ::ARGV
|
163
|
+
app_exec = Exec.new command,
|
164
|
+
project: ::ENV[PROJECT_ENV],
|
165
|
+
service: ::ENV[SERVICE_ENV],
|
166
|
+
config_path: ::ENV[CONFIG_ENV],
|
167
|
+
version: ::ENV[VERSION_ENV],
|
168
|
+
timeout: ::ENV[TIMEOUT_ENV],
|
169
|
+
wrapper_image: ::ENV[WRAPPER_IMAGE_ENV],
|
170
|
+
strategy: ::ENV[STRATEGY_ENV],
|
171
|
+
gcs_log_dir: ::ENV[GCS_LOG_DIR]
|
155
172
|
start_and_report_errors app_exec
|
156
173
|
exit
|
157
174
|
end
|
158
175
|
end
|
159
176
|
|
177
|
+
def extract_command cmd, argv
|
178
|
+
if cmd
|
179
|
+
::Shellwords.split cmd
|
180
|
+
else
|
181
|
+
i = (argv.index { |a| a.to_s == "--" } || -1) + 1
|
182
|
+
if i.zero?
|
183
|
+
report_error <<~MESSAGE
|
184
|
+
No command provided for appengine:exec.
|
185
|
+
Did you remember to delimit it with two dashes? e.g.
|
186
|
+
bundle exec rake appengine:exec -- bundle exec ruby myscript.rb
|
187
|
+
For detailed usage instructions, provide two dashes but no command:
|
188
|
+
bundle exec rake appengine:exec --
|
189
|
+
MESSAGE
|
190
|
+
end
|
191
|
+
command = ::ARGV[i..-1]
|
192
|
+
if command.empty?
|
193
|
+
show_usage
|
194
|
+
exit
|
195
|
+
end
|
196
|
+
command
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
160
200
|
def show_usage
|
161
|
-
puts
|
162
|
-
rake appengine:exec
|
201
|
+
puts <<~USAGE
|
202
|
+
rake appengine:exec
|
203
|
+
|
204
|
+
This Rake task executes a given command in the context of an App Engine
|
205
|
+
application, using App Engine remote execution. For more information,
|
206
|
+
on this capability, see the AppEngine::Exec documentation at
|
207
|
+
http://www.rubydoc.info/gems/appengine/AppEngine/Exec
|
208
|
+
|
209
|
+
The command to be run may either be provided as a rake argument, or as
|
210
|
+
command line arguments delimited by two dashes `--`. (The dashes are
|
211
|
+
needed to separate your command from rake arguments and flags.)
|
212
|
+
For example, to run a production database migration, you can run either
|
213
|
+
of the following equivalent commands:
|
214
|
+
|
215
|
+
bundle exec rake "appengine:exec[bundle exec bin/rails db:migrate]"
|
216
|
+
bundle exec rake appengine:exec -- bundle exec bin/rails db:migrate
|
217
|
+
|
218
|
+
To display these usage instructions, provide two dashes but no command:
|
163
219
|
|
164
|
-
|
165
|
-
application, using App Engine remote execution. For more information,
|
166
|
-
on this capability, see the AppEngine::Exec documentation at
|
167
|
-
http://www.rubydoc.info/gems/appengine/AppEngine/Exec
|
220
|
+
bundle exec rake appengine:exec --
|
168
221
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
of the following equivalent commands:
|
222
|
+
You may customize the behavior of App Engine execution through a few
|
223
|
+
enviroment variable parameters. These are set via the normal mechanism at
|
224
|
+
the end of a rake command line but before the double dash. For example, to
|
225
|
+
set GAE_CONFIG:
|
174
226
|
|
175
|
-
|
176
|
-
bundle exec rake appengine:exec -- bundle exec bin/rails db:migrate
|
227
|
+
bundle exec rake appengine:exec GAE_CONFIG=myservice.yaml -- bundle exec bin/rails db:migrate
|
177
228
|
|
178
|
-
|
229
|
+
Be sure to set these parameters before the double dash. Any arguments
|
230
|
+
following the double dash are interpreted as part of the command itself.
|
179
231
|
|
180
|
-
|
232
|
+
The following environment variable parameters are supported:
|
181
233
|
|
182
|
-
|
183
|
-
enviroment variable parameters. These are set via the normal mechanism at
|
184
|
-
the end of a rake command line. For example, to set GAE_CONFIG:
|
234
|
+
GAE_TIMEOUT
|
185
235
|
|
186
|
-
|
236
|
+
Amount of time to wait before appengine:exec terminates the command.
|
237
|
+
Expressed as a string formatted like: "2h15m10s". Default is "10m".
|
187
238
|
|
188
|
-
|
189
|
-
following the double dash are interpreted as part of the command itself.
|
239
|
+
GAE_PROJECT
|
190
240
|
|
191
|
-
The
|
241
|
+
The ID of your Google Cloud project. If not specified, uses the current
|
242
|
+
project from gcloud.
|
192
243
|
|
193
|
-
GAE_CONFIG
|
244
|
+
GAE_CONFIG
|
194
245
|
|
195
|
-
|
196
|
-
|
197
|
-
|
246
|
+
Path to the App Engine config file, used when your app has multiple
|
247
|
+
services, or the config file is otherwise not called `./app.yaml`. The
|
248
|
+
config file is used to determine the name of the App Engine service.
|
198
249
|
|
199
|
-
GAE_SERVICE
|
250
|
+
GAE_SERVICE
|
200
251
|
|
201
|
-
|
202
|
-
|
252
|
+
Name of the service to be used. Overrides any service name specified in
|
253
|
+
your config file.
|
203
254
|
|
204
|
-
|
255
|
+
GAE_EXEC_STRATEGY
|
205
256
|
|
206
|
-
|
207
|
-
|
208
|
-
|
257
|
+
The execution strategy to use. Valid values are "deployment" (which is the
|
258
|
+
default for App Engine Standard apps) and "cloud_build" (which is the
|
259
|
+
default for App Engine Flexible apps).
|
209
260
|
|
210
|
-
|
261
|
+
Normally you should leave the strategy set to the default. The main reason
|
262
|
+
to change it is if your app runs on the Flexible Environment and talks to
|
263
|
+
a database over a VPC (using a private IP address). The "cloud_build"
|
264
|
+
strategy used by default for Flexible apps cannot connect to a VPC, so you
|
265
|
+
should use "deployment" in this case. (But note that, otherwise, the
|
266
|
+
"deployment" strategy is significantly slower for apps on the Flexible
|
267
|
+
environment.)
|
211
268
|
|
212
|
-
|
213
|
-
Expressed as a string formatted like: "2h15m10s". Default is "10m".
|
269
|
+
GAE_VERSION
|
214
270
|
|
215
|
-
|
216
|
-
|
271
|
+
The version of the service, used to identify which application image to
|
272
|
+
use to run your command. If not specified, uses the most recently created
|
273
|
+
version, regardless of whether that version is actually serving traffic.
|
274
|
+
Applies only to the "cloud_build" strategy. (The "deployment" strategy
|
275
|
+
deploys its own temporary version of your app.)
|
217
276
|
|
218
|
-
|
277
|
+
GAE_EXEC_WRAPPER_IMAGE
|
219
278
|
|
220
|
-
|
221
|
-
|
222
|
-
|
279
|
+
The fully-qualified name of the wrapper image to use. (This is a Docker
|
280
|
+
image that emulates the App Engine environment in Google Cloud Build for
|
281
|
+
the "cloud_build" strategy, and applies only to that strategy.) Normally,
|
282
|
+
you should not override this unless you are testing a new wrapper.
|
223
283
|
|
224
|
-
|
225
|
-
|
284
|
+
CLOUD_BUILD_GCS_LOG_DIR
|
285
|
+
|
286
|
+
GCS bucket name of the cloud build log when GAE_STRATEGY is "cloud_build".
|
287
|
+
(ex. "gs://BUCKET-NAME/FOLDER-NAME")
|
288
|
+
|
289
|
+
This rake task is provided by the "appengine" gem. To make these tasks
|
290
|
+
available, add the following line to your Rakefile:
|
291
|
+
|
292
|
+
require "appengine/tasks"
|
293
|
+
|
294
|
+
If your app uses Ruby on Rails, the gem provides a railtie that adds its
|
295
|
+
tasks automatically, so you don't have to do anything beyond adding the
|
296
|
+
gem to your Gemfile.
|
297
|
+
|
298
|
+
For more information or to report issues, visit the Github page:
|
299
|
+
https://github.com/GoogleCloudPlatform/appengine-ruby
|
226
300
|
USAGE
|
227
301
|
end
|
228
302
|
|
229
303
|
def verify_gcloud_and_report_errors
|
230
304
|
Util::Gcloud.verify!
|
231
305
|
rescue Util::Gcloud::BinaryNotFound
|
232
|
-
report_error
|
233
|
-
Could not find the `gcloud` binary in your system path.
|
234
|
-
This tool requires the Google Cloud SDK. To download and install it,
|
235
|
-
visit https://cloud.google.com/sdk/downloads
|
306
|
+
report_error <<~MESSAGE
|
307
|
+
Could not find the `gcloud` binary in your system path.
|
308
|
+
This tool requires the Google Cloud SDK. To download and install it,
|
309
|
+
visit https://cloud.google.com/sdk/downloads
|
236
310
|
MESSAGE
|
237
311
|
rescue Util::Gcloud::GcloudNotAuthenticated
|
238
|
-
report_error
|
239
|
-
The gcloud authorization has not been completed. If you have not yet
|
240
|
-
initialized the Google Cloud SDK, we recommend running the `gcloud init`
|
241
|
-
command as described at https://cloud.google.com/sdk/docs/initializing
|
242
|
-
Alternately, you may log in directly by running `gcloud auth login`.
|
312
|
+
report_error <<~MESSAGE
|
313
|
+
The gcloud authorization has not been completed. If you have not yet
|
314
|
+
initialized the Google Cloud SDK, we recommend running the `gcloud init`
|
315
|
+
command as described at https://cloud.google.com/sdk/docs/initializing
|
316
|
+
Alternately, you may log in directly by running `gcloud auth login`.
|
243
317
|
MESSAGE
|
244
318
|
rescue Util::Gcloud::ProjectNotSet
|
245
|
-
report_error
|
246
|
-
The gcloud project configuration has not been set. If you have not yet
|
247
|
-
initialized the Google Cloud SDK, we recommend running the `gcloud init`
|
248
|
-
command as described at https://cloud.google.com/sdk/docs/initializing
|
249
|
-
Alternately, you may set the default project configuration directly by
|
250
|
-
running `gcloud config set project <project-name>`.
|
319
|
+
report_error <<~MESSAGE
|
320
|
+
The gcloud project configuration has not been set. If you have not yet
|
321
|
+
initialized the Google Cloud SDK, we recommend running the `gcloud init`
|
322
|
+
command as described at https://cloud.google.com/sdk/docs/initializing
|
323
|
+
Alternately, you may set the default project configuration directly by
|
324
|
+
running `gcloud config set project <project-name>`.
|
251
325
|
MESSAGE
|
252
326
|
end
|
253
327
|
|
254
328
|
def start_and_report_errors app_exec
|
255
329
|
app_exec.start
|
256
|
-
rescue Exec::ConfigFileNotFound =>
|
257
|
-
report_error
|
258
|
-
Could not determine which service should run this command because the App
|
259
|
-
Engine config file "#{
|
260
|
-
Specify the config file using the GAE_CONFIG argument. e.g.
|
261
|
-
|
262
|
-
Alternately, you may specify a service name directly with GAE_SERVICE. e.g.
|
263
|
-
|
264
|
-
MESSAGE
|
265
|
-
rescue Exec::BadConfigFileFormat =>
|
266
|
-
report_error
|
267
|
-
Could not determine which service should run this command because the App
|
268
|
-
Engine config file "#{
|
269
|
-
It must be a valid YAML file.
|
270
|
-
Specify the config file using the GAE_CONFIG argument. e.g.
|
271
|
-
|
272
|
-
Alternately, you may specify a service name directly with GAE_SERVICE. e.g.
|
273
|
-
|
274
|
-
MESSAGE
|
275
|
-
rescue Exec::NoSuchVersion =>
|
276
|
-
if
|
277
|
-
report_error
|
278
|
-
Could not find version "#{
|
279
|
-
Please double-check the version exists. To use the most recent version by
|
280
|
-
default, omit the GAE_VERSION argument.
|
281
|
-
MESSAGE
|
330
|
+
rescue Exec::ConfigFileNotFound => e
|
331
|
+
report_error <<~MESSAGE
|
332
|
+
Could not determine which service should run this command because the App
|
333
|
+
Engine config file "#{e.config_path}" was not found.
|
334
|
+
Specify the config file using the GAE_CONFIG argument. e.g.
|
335
|
+
bundle exec rake appengine:exec GAE_CONFIG=myapp.yaml -- myscript.sh
|
336
|
+
Alternately, you may specify a service name directly with GAE_SERVICE. e.g.
|
337
|
+
bundle exec rake appengine:exec GAE_SERVICE=myservice -- myscript.sh
|
338
|
+
MESSAGE
|
339
|
+
rescue Exec::BadConfigFileFormat => e
|
340
|
+
report_error <<~MESSAGE
|
341
|
+
Could not determine which service should run this command because the App
|
342
|
+
Engine config file "#{e.config_path}" was malformed.
|
343
|
+
It must be a valid YAML file.
|
344
|
+
Specify the config file using the GAE_CONFIG argument. e.g.
|
345
|
+
bundle exec rake appengine:exec GAE_CONFIG=myapp.yaml -- myscript.sh
|
346
|
+
Alternately, you may specify a service name directly with GAE_SERVICE. e.g.
|
347
|
+
bundle exec rake appengine:exec GAE_SERVICE=myservice -- myscript.sh
|
348
|
+
MESSAGE
|
349
|
+
rescue Exec::NoSuchVersion => e
|
350
|
+
if e.version
|
351
|
+
report_error <<~MESSAGE
|
352
|
+
Could not find version "#{e.version}" of service "#{e.service}".
|
353
|
+
Please double-check the version exists. To use the most recent version by
|
354
|
+
default, omit the GAE_VERSION argument.
|
355
|
+
MESSAGE
|
282
356
|
else
|
283
|
-
report_error
|
284
|
-
Could not find any versions of service "#{
|
285
|
-
Please double-check that you have deployed this service. If you want to run
|
286
|
-
a command against a different service, you may provide a GAE_CONFIG argument
|
287
|
-
pointing to your App Engine config file, or a GAE_SERVICE argument to specify
|
288
|
-
a service directly.
|
289
|
-
MESSAGE
|
357
|
+
report_error <<~MESSAGE
|
358
|
+
Could not find any versions of service "#{e.service}".
|
359
|
+
Please double-check that you have deployed this service. If you want to run
|
360
|
+
a command against a different service, you may provide a GAE_CONFIG argument
|
361
|
+
pointing to your App Engine config file, or a GAE_SERVICE argument to specify
|
362
|
+
a service directly.
|
363
|
+
MESSAGE
|
290
364
|
end
|
291
|
-
rescue Exec::
|
292
|
-
report_error
|
293
|
-
|
294
|
-
|
295
|
-
config
|
296
|
-
|
297
|
-
|
365
|
+
rescue Exec::NoDefaultProject
|
366
|
+
report_error <<~MESSAGE
|
367
|
+
Could not get the default project from gcloud.
|
368
|
+
Please either set the current project using
|
369
|
+
gcloud config set project my-project-id
|
370
|
+
or specify the project by setting the GAE_PROJECT argument. e.g.
|
371
|
+
bundle exec rake appengine:exec GAE_PROJECT=my-project-id -- myscript.sh
|
372
|
+
MESSAGE
|
373
|
+
rescue Exec::UsageError => e
|
374
|
+
report_error e.message
|
298
375
|
end
|
299
376
|
|
300
377
|
def report_error str
|
301
|
-
|
378
|
+
warn str
|
302
379
|
exit 1
|
303
380
|
end
|
304
|
-
|
305
381
|
end
|
306
|
-
|
307
382
|
end
|
308
383
|
end
|
309
384
|
|
310
|
-
|
311
385
|
::AppEngine::Tasks.define
|
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 Google LLC
|
2
4
|
#
|
3
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
6
|
# you may not use this file except in compliance with the License.
|
@@ -11,20 +13,18 @@
|
|
11
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
14
|
# See the License for the specific language governing permissions and
|
13
15
|
# limitations under the License.
|
14
|
-
;
|
15
16
|
|
16
|
-
require "shellwords"
|
17
17
|
|
18
|
+
require "shellwords"
|
19
|
+
require "English"
|
18
20
|
|
19
21
|
module AppEngine
|
20
22
|
module Util
|
21
|
-
|
22
23
|
##
|
23
24
|
# A collection of utility functions and classes for interacting with an
|
24
25
|
# installation of the gcloud SDK.
|
25
26
|
#
|
26
27
|
module Gcloud
|
27
|
-
|
28
28
|
##
|
29
29
|
# Base class for gcloud related errors.
|
30
30
|
#
|
@@ -68,7 +68,6 @@ module AppEngine
|
|
68
68
|
end
|
69
69
|
|
70
70
|
class << self
|
71
|
-
|
72
71
|
##
|
73
72
|
# @private
|
74
73
|
# Returns the path to the gcloud binary, or nil if the binary could
|
@@ -78,12 +77,13 @@ module AppEngine
|
|
78
77
|
#
|
79
78
|
def binary_path
|
80
79
|
unless defined? @binary_path
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
80
|
+
@binary_path =
|
81
|
+
if ::Gem.win_platform?
|
82
|
+
`where gcloud` == "" ? nil : "gcloud"
|
83
|
+
else
|
84
|
+
path = `which gcloud`.strip
|
85
|
+
path.empty? ? nil : path
|
86
|
+
end
|
87
87
|
end
|
88
88
|
@binary_path
|
89
89
|
end
|
@@ -111,9 +111,10 @@ module AppEngine
|
|
111
111
|
#
|
112
112
|
def current_project
|
113
113
|
unless defined? @current_project
|
114
|
-
|
114
|
+
params = [
|
115
115
|
"config", "list", "core/project", "--format=value(core.project)"
|
116
|
-
]
|
116
|
+
]
|
117
|
+
@current_project = execute params, capture: true
|
117
118
|
@current_project = nil if @current_project.empty?
|
118
119
|
end
|
119
120
|
@current_project
|
@@ -147,7 +148,7 @@ module AppEngine
|
|
147
148
|
binary_path!
|
148
149
|
current_project!
|
149
150
|
auths = execute ["auth", "list", "--format=value(account)"],
|
150
|
-
|
151
|
+
capture: true
|
151
152
|
raise GcloudNotAuthenticated if auths.empty?
|
152
153
|
end
|
153
154
|
|
@@ -166,13 +167,17 @@ module AppEngine
|
|
166
167
|
# depending on the value of the `capture` parameter.
|
167
168
|
#
|
168
169
|
def execute args, echo: false, capture: false, assert: true
|
169
|
-
|
170
|
-
|
171
|
-
|
170
|
+
cmd_array = [binary_path!] + args
|
171
|
+
cmd =
|
172
|
+
if ::Gem.win_platform?
|
173
|
+
cmd_array.join " "
|
174
|
+
else
|
175
|
+
::Shellwords.join cmd_array
|
176
|
+
end
|
172
177
|
puts cmd if echo
|
173
178
|
result = capture ? `#{cmd}` : system(cmd)
|
174
|
-
code =
|
175
|
-
raise GcloudFailed
|
179
|
+
code = $CHILD_STATUS.exitstatus
|
180
|
+
raise GcloudFailed, code if assert && code != 0
|
176
181
|
result
|
177
182
|
end
|
178
183
|
|
@@ -187,9 +192,7 @@ module AppEngine
|
|
187
192
|
def capture args
|
188
193
|
execute args, capture: true
|
189
194
|
end
|
190
|
-
|
191
195
|
end
|
192
196
|
end
|
193
|
-
|
194
197
|
end
|
195
198
|
end
|
data/lib/appengine/version.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 Google LLC
|
2
4
|
#
|
3
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
6
|
# you may not use this file except in compliance with the License.
|
@@ -11,11 +13,9 @@
|
|
11
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
14
|
# See the License for the specific language governing permissions and
|
13
15
|
# limitations under the License.
|
14
|
-
;
|
15
16
|
|
16
|
-
module AppEngine
|
17
17
|
|
18
|
+
module AppEngine
|
18
19
|
# The current version of this gem, as a string.
|
19
|
-
VERSION =
|
20
|
-
|
20
|
+
VERSION = "0.7.0"
|
21
21
|
end
|
data/lib/appengine.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 Google LLC
|
2
4
|
#
|
3
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
6
|
# you may not use this file except in compliance with the License.
|
@@ -11,17 +13,22 @@
|
|
11
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
14
|
# See the License for the specific language governing permissions and
|
13
15
|
# limitations under the License.
|
14
|
-
;
|
15
16
|
|
16
|
-
|
17
|
+
|
18
|
+
##
|
19
|
+
# ## Google AppEngine integration
|
17
20
|
#
|
18
21
|
# The AppEngine module includes optional tools helping Ruby applications to
|
19
22
|
# integrate more closely with the Google App Engine environment.
|
20
|
-
|
23
|
+
#
|
21
24
|
module AppEngine
|
25
|
+
##
|
26
|
+
# Internal utilities
|
27
|
+
#
|
28
|
+
module Util
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
|
-
|
25
32
|
require "appengine/version"
|
26
33
|
require "appengine/env"
|
27
34
|
require "appengine/exec"
|