functions_framework 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eca52587c3a84a8fdfc58792bc87fb6908e5bbf1c65b265b12ccdc1eb943848d
4
- data.tar.gz: 2226f0ba38007a22bbd046093a9d726aadcb25feaf18a7c6b24d780b5bdfc749
3
+ metadata.gz: 7181bfabab004b16d032f16f2598fb80027422481c9ce5ee3c048f5331422d10
4
+ data.tar.gz: 73344235c945308d98a44bb7536bbc32d6fdb5b58ed0379696a09becdf2be016
5
5
  SHA512:
6
- metadata.gz: '08d533e4c06749aeee4feb6988a775186a392a18b3c50a79bc93700b99c56ea6a16da7195c89afd44e4313770e620e3071a7d6207d568a3dd9aed4a9339da71d'
7
- data.tar.gz: 1c145d4178b2d86bdde76c38340c3ea51f2b54bb9897304eb84ce1f3586467f7e205a4007d06a98dcfa8d78c5b8dbdb8afc919b8e0801bdf5c2420266e3b4dff
6
+ metadata.gz: 4edeb7e9b2fbd5ab9ee3d28f442336363c32ab2faf928b81738b5c82a3c6b16b8e9dd0983417427db4145930eaf12b1f0d709e638999edba01c55c3b5cbdcf97
7
+ data.tar.gz: ffe0f772f40ff8d8c1a74e8cf6f2e5adfa663513290f88b4c9ad119dfb91b7b0caa3887337bad1736eb556b8d5312b376606b266602069db32fd75973867fa06
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.0 (2022-01-17)
4
+
5
+ * Increase default max thread pool size to 8.
6
+ * Return 204 when a GET request is sent to an event function, to support health checks.
7
+ * Flush stdout and stderr streams at the end of each request.
8
+ * Format the error backtrace.
9
+
3
10
  ## 1.0.1 (2021-09-10)
4
11
 
5
12
  * FIXED: Update legacy event conversion to set the correct types for firebase database events
data/RELEASING.md ADDED
@@ -0,0 +1,78 @@
1
+ # Releasing
2
+
3
+ Releases are performed using tooling developed by Google's GitHub Automation
4
+ team, and are partially automated, but can be controlled by maintainers.
5
+
6
+ ## The automated release pipeline
7
+
8
+ Whenever a commit is pushed to the main branch with a
9
+ [Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/) message,
10
+ the automated release pipeline will trigger.
11
+
12
+ ### Release pull requests
13
+
14
+ The [release-please](https://github.com/googleapis/release-please) bot watches
15
+ for commits that indicate a semantic change, normally either `feat:` or `fix:`,
16
+ or any commit that includes a breaking change. When new commits are pushed,
17
+ release-please will propose a new release whose version is based on the semver
18
+ implication of the change: a patch release for a `fix:`, a minor release for a
19
+ `feat:`, or a major release for a breaking change. This will appear in the form
20
+ of a pull request, which will include the proposed new version, and a changelog
21
+ entry.
22
+
23
+ A maintainer can either:
24
+
25
+ * Close the pull request to defer the release until more changes have been
26
+ committed.
27
+ * Accept the release by merging the pull request, possibly after modifying the
28
+ changelog.
29
+
30
+ Do NOT modify the version in the pull request. If you want to release a
31
+ different version, see the next section on proposing releases manually.
32
+
33
+ When merging a release pull request, make sure the `autorelease: pending` label
34
+ remains applied. This is important for correct operation of the rest of the
35
+ release pipeline.
36
+
37
+ ### Release scripts
38
+
39
+ After a release pull request is merged, another bot will trigger the rest of
40
+ the release pipeline. This bot runs every 15 minutes, so this process may be
41
+ delayed a few minutes. Once it runs, it will do the following automatically:
42
+
43
+ * Tag the release and create a GitHub release. This takes place in a kokoro
44
+ (internal Google) job. Once finished, it will switch the tag from
45
+ `autorelease: pending` to `autorelease: tagged`. If it seems to be
46
+ malfunctioning, you can find logs on the internal fusion dashboard under the
47
+ job `cloud-devrel/client-libraries/autorelease/tag`.
48
+ * Build and push the gem to Rubygems, and build and push the documentation to
49
+ googleapis.dev. This takes place in a second kokoro job. Once finished, it
50
+ will switch the tag from `autorelease: tagged` to `autorelease: published`.
51
+ If this job seems to be malfunctioning, find the logs under the kokoro job
52
+ `cloud-devrel/ruby/functions-framework-ruby/release`.
53
+
54
+ ## Manually proposing a release
55
+
56
+ If you want to propose a release out-of-band or customize the version number to
57
+ use, you can use a command line tool to create a release pull request.
58
+
59
+ ### Prerequisites
60
+
61
+ You need to install:
62
+
63
+ * git version 2.22 or later
64
+ * The gh cli (https://cli.github.com/)
65
+ * The release-please npm module
66
+ * The toys rubygem
67
+
68
+ ### Running the release proposal script
69
+
70
+ Once the prerequisites are installed, run:
71
+
72
+ toys release please functions_framework:1.2.3
73
+
74
+ (Replace `1.2.3` with the version to release.)
75
+
76
+ This will open an appropriate release pull request. Then you can merge it
77
+ (possibly after modifying the changelog) and the release pipeline will proceed
78
+ as described above.
@@ -306,7 +306,7 @@ module FunctionsFramework
306
306
  # @return [Integer]
307
307
  #
308
308
  def max_threads
309
- @max_threads || 1
309
+ @max_threads || 8
310
310
  end
311
311
 
312
312
  ##
@@ -352,7 +352,9 @@ module FunctionsFramework
352
352
  when ::CloudEvents::CloudEventsError
353
353
  cloud_events_error_response response
354
354
  when ::StandardError
355
- error_response "#{response.class}: #{response.message}\n#{response.backtrace}\n"
355
+ message = "#{response.class}: #{response.message}"
356
+ message = [message, *response.backtrace].join "\n\t"
357
+ error_response message
356
358
  else
357
359
  error_response "Unexpected response type: #{response.class}"
358
360
  end
@@ -362,6 +364,10 @@ module FunctionsFramework
362
364
  string_response "Not found", 404
363
365
  end
364
366
 
367
+ def no_content_response
368
+ [204, [], []]
369
+ end
370
+
365
371
  def string_response string, status, content_type: nil
366
372
  string.force_encoding ::Encoding::ASCII_8BIT unless string.valid_encoding?
367
373
  if string.encoding == ::Encoding::ASCII_8BIT
@@ -387,6 +393,11 @@ module FunctionsFramework
387
393
  message = "Unexpected internal error" unless @config.show_error_details?
388
394
  string_response message, 500
389
395
  end
396
+
397
+ def flush_streams
398
+ $stdout.flush
399
+ $stderr.flush
400
+ end
390
401
  end
391
402
 
392
403
  ## @private
@@ -401,7 +412,7 @@ module FunctionsFramework
401
412
  return notfound_response if excluded_path? env
402
413
  response =
403
414
  begin
404
- logger = env["rack.logger"] ||= @config.logger
415
+ logger = env[::Rack::RACK_LOGGER] ||= @config.logger
405
416
  request = ::Rack::Request.new env
406
417
  logger.info "FunctionsFramework: Handling HTTP #{request.request_method} request"
407
418
  @function.call request, globals: @globals, logger: logger
@@ -409,6 +420,8 @@ module FunctionsFramework
409
420
  e
410
421
  end
411
422
  interpret_response response
423
+ ensure
424
+ flush_streams
412
425
  end
413
426
  end
414
427
 
@@ -424,7 +437,8 @@ module FunctionsFramework
424
437
 
425
438
  def call env
426
439
  return notfound_response if excluded_path? env
427
- logger = env["rack.logger"] ||= @config.logger
440
+ return no_content_response if env[::Rack::REQUEST_METHOD] == "GET"
441
+ logger = env[::Rack::RACK_LOGGER] ||= @config.logger
428
442
  event = decode_event env
429
443
  response =
430
444
  case event
@@ -438,6 +452,8 @@ module FunctionsFramework
438
452
  raise "Unexpected event type: #{event.class}"
439
453
  end
440
454
  interpret_response response
455
+ ensure
456
+ flush_streams
441
457
  end
442
458
 
443
459
  private
@@ -446,9 +462,8 @@ module FunctionsFramework
446
462
  begin
447
463
  @cloud_events.decode_event env
448
464
  rescue ::CloudEvents::NotCloudEventError
449
- env["rack.input"].rewind rescue nil
450
- @legacy_events.decode_rack_env(env) ||
451
- raise(::CloudEvents::CloudEventsError, "Unrecognized event format")
465
+ env[::Rack::RACK_INPUT].rewind rescue nil
466
+ @legacy_events.decode_rack_env(env) || ::CloudEvents::CloudEventsError.new("Unrecognized event format")
452
467
  end
453
468
  rescue ::CloudEvents::CloudEventsError => e
454
469
  e
@@ -335,7 +335,8 @@ module FunctionsFramework
335
335
  json = ::JSON.dump response
336
336
  string_response json, 200, content_type: "application/json"
337
337
  when ::StandardError
338
- message = "#{response.class}: #{response.message}\n#{response.backtrace}\n"
338
+ message = "#{response.class}: #{response.message}"
339
+ message = [message, *response.backtrace].join "\n\t"
339
340
  string_response message, 500
340
341
  else
341
342
  raise "Unexpected response type: #{response.inspect}"
@@ -17,5 +17,5 @@ module FunctionsFramework
17
17
  # Version of the Ruby Functions Framework
18
18
  # @return [String]
19
19
  #
20
- VERSION = "1.0.1".freeze
20
+ VERSION = "1.1.0".freeze
21
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: functions_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-13 00:00:00.000000000 Z
11
+ date: 2022-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cloud_events
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.0
19
+ version: 0.7.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 2.a
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.6.0
29
+ version: 0.7.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.a
@@ -80,6 +80,7 @@ files:
80
80
  - CHANGELOG.md
81
81
  - LICENSE
82
82
  - README.md
83
+ - RELEASING.md
83
84
  - bin/functions-framework
84
85
  - bin/functions-framework-ruby
85
86
  - docs/deploying-functions.md
@@ -99,10 +100,10 @@ homepage: https://github.com/GoogleCloudPlatform/functions-framework-ruby
99
100
  licenses:
100
101
  - Apache-2.0
101
102
  metadata:
102
- changelog_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v1.0.1/file.CHANGELOG.html
103
+ changelog_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v1.1.0/file.CHANGELOG.html
103
104
  source_code_uri: https://github.com/GoogleCloudPlatform/functions-framework-ruby
104
105
  bug_tracker_uri: https://github.com/GoogleCloudPlatform/functions-framework-ruby/issues
105
- documentation_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v1.0.1
106
+ documentation_uri: https://googlecloudplatform.github.io/functions-framework-ruby/v1.1.0
106
107
  post_install_message:
107
108
  rdoc_options: []
108
109
  require_paths:
@@ -118,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
119
  - !ruby/object:Gem::Version
119
120
  version: '0'
120
121
  requirements: []
121
- rubygems_version: 3.2.17
122
+ rubygems_version: 3.3.5
122
123
  signing_key:
123
124
  specification_version: 4
124
125
  summary: Functions Framework for Ruby