lamby 2.5.1 → 2.6.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea85858e75126722596d3e49dc1818022c608730820b4898315eae359bed946b
4
- data.tar.gz: 99388d1a58a5f750b5d4e98a42c3249a882eaf5604acc2776dcf0bb47f956c8b
3
+ metadata.gz: 6b47ebf99fa0cfc8d6f88c652d05cf97f30d00c119081d2068418731faf88967
4
+ data.tar.gz: ae3e41ee1ff96c3a9868f1d25b9f030d0c971113827fb2751b66bed8e89bf46c
5
5
  SHA512:
6
- metadata.gz: ad20c220066a5388bdd91098facb475c3f146dad0ac5ec7f78ce173c5cbee2d77d5e7fb7f244ea0064d18191e27b218c61a3cac96f680fda528ab483921e5ce5
7
- data.tar.gz: 2a91f225a1dc75594dbf9b315cdf9784f5afa1f26ced765f8e125f0ecb672ae704d6a01a2dd5e81d636dcb76a112ca07e1419c3a14b65e5029ef716ebfc83e75
6
+ metadata.gz: de331c42dc947a6cfe15929c24c3b0c00c5bc81b89a7782149dd3c985fb4894f2ad5d2bf3f789ff699865f1982b690d43c8b983f0c553cf078b3567394508ea0
7
+ data.tar.gz: 992d10b1e0c9e39df59ae2b96e1406d6a53fc331f3eae92ea6d731e89bb43c754bd97cce60817277eedb65ad436ac15beea55ad55c36cb4a3d95486071d6efff
data/CHANGELOG.md CHANGED
@@ -1,57 +1,88 @@
1
1
  <!-- -*- mode: markdown -*- -->
2
+
2
3
  # Keep A Changelog!
3
4
 
4
5
  See this http://keepachangelog.com link for information on how we want this documented formatted.
5
6
 
7
+ ## v2.6.2
8
+
9
+ - Fixed Rack::Deflate usage with an ALB.
10
+
11
+ ## v2.6.1
12
+
13
+ #### Fixed
14
+
15
+ - Support redirects with empty response body.
16
+
17
+ #### Added
18
+
19
+ - Tests for enabling Rack::Deflate middleware by passing RACK_DEFLATE_ENABLED env variable.
20
+
21
+ ## v2.6.0
22
+
23
+ #### Fixed
24
+
25
+ - Support multiple Set-Cookie headers for all rest types.
26
+
27
+ ## v2.5.3
28
+
29
+ #### Fixed
30
+
31
+ - Base64 encode response body if the rack response is gzip or brotli compressed.
32
+
33
+ ## v2.5.2
34
+
35
+ - SSM file always overwrites. Fixes #65.
36
+
6
37
  ## v2.5.1
7
38
 
8
39
  #### Fixed
9
40
 
10
- * Quoting in describe-subnets #62 Thanks @atwoodjw
41
+ - Quoting in describe-subnets #62 Thanks @atwoodjw
11
42
 
12
43
  ## v2.5.0
13
44
 
14
45
  #### Changed
15
46
 
16
- * Install files to favor containers.
47
+ - Install files to favor containers.
17
48
 
18
49
  ## v2.2.2
19
50
 
20
51
  #### Changed
21
52
 
22
- * More ActiveSupport removal. Better ENV.to_h.
53
+ - More ActiveSupport removal. Better ENV.to_h.
23
54
 
24
55
  ## v2.2.1
25
56
 
26
57
  #### Changed
27
58
 
28
- * More ActiveSupport removal from SsmParameterStore.
59
+ - More ActiveSupport removal from SsmParameterStore.
29
60
 
30
61
  ## v2.2.0
31
62
 
32
63
  #### Changed
33
64
 
34
- * Remove dependency on `activesupport` for rack-only applications.
35
- * Remove ActiveSupport artifacts:
65
+ - Remove dependency on `activesupport` for rack-only applications.
66
+ - Remove ActiveSupport artifacts:
36
67
  - Replace `strip_heredoc` with `<<~HEREDOC`.
37
68
  - Remove instances of `Object#try`, replace with `&.`.
38
69
  - Use `Rack::Utils.build_nested_query` in place of `Object#to_query`.
39
70
  - Replace `Object#present?` with `to_s.empty?`.
40
71
  - Replace `Array.wrap` with `Array[obj].compact.flatten`.
41
- * Add a check against the `RAILS_ENV` AND `RACK_ENV` environment
72
+ - Add a check against the `RAILS_ENV` AND `RACK_ENV` environment
42
73
  variables prior to enabling debug mode.
43
74
 
44
75
  ## v2.1.0
45
76
 
46
77
  #### Changed
47
78
 
48
- * Only load the railtie if `Rails` is defined.
79
+ - Only load the railtie if `Rails` is defined.
49
80
 
50
81
  ## v2.0.1
51
82
 
52
83
  #### Changed
53
84
 
54
- * Remove Rails runtime dep. Only rack is needed.
85
+ - Remove Rails runtime dep. Only rack is needed.
55
86
 
56
87
  ## v2.0.0
57
88
 
@@ -59,120 +90,107 @@ Support for new API Gateway HTTP APIs!!!
59
90
 
60
91
  #### Changed
61
92
 
62
- * The `Lamby.handler` must have a `:rack` option. One of `:http`, `:rest`, `:alb`.
63
- * Renamed template generators to match options above.
64
- * The `lamby:install` task now defaults to HTTP API.
65
- * Changed the name of `:api` rack option to `:rest`.
66
- * Removed `export` from Dotenv files. Better Docker compatability.
93
+ - The `Lamby.handler` must have a `:rack` option. One of `:http`, `:rest`, `:alb`.
94
+ - Renamed template generators to match options above.
95
+ - The `lamby:install` task now defaults to HTTP API.
96
+ - Changed the name of `:api` rack option to `:rest`.
97
+ - Removed `export` from Dotenv files. Better Docker compatability.
67
98
 
68
99
  #### Added
69
100
 
70
- * New rack handler for HTTP API v1 and v2.
71
- * Lots of backfill tests for, ALBs & REST APIs.
72
-
101
+ - New rack handler for HTTP API v1 and v2.
102
+ - Lots of backfill tests for, ALBs & REST APIs.
73
103
 
74
104
  ## v1.0.3
75
105
 
76
106
  #### Changed
77
107
 
78
- * Change shebangs to `#!/usr/bin/env bash`
79
-
108
+ - Change shebangs to `#!/usr/bin/env bash`
80
109
 
81
110
  ## v1.0.2
82
111
 
83
112
  #### Changed
84
113
 
85
- * Adds an optional 'overwrite' parameter to #to_env.
114
+ - Adds an optional 'overwrite' parameter to #to_env.
86
115
 
87
116
  ## v1.0.1
88
117
 
89
118
  #### Changed
90
119
 
91
- * Links in bin/build templates to point to lamby.custominktech.com site.
92
-
120
+ - Links in bin/build templates to point to lamby.custominktech.com site.
93
121
 
94
122
  ## v1.0.0
95
123
 
96
124
  #### Fixed
97
125
 
98
- * ALB query params & binary responses. Fixes #38.
99
-
126
+ - ALB query params & binary responses. Fixes #38.
100
127
 
101
128
  ## v0.6.0
102
129
 
103
130
  #### Added
104
131
 
105
- * APPLICATION LOAD BALANACER SUPPORT!!! The new default. Use `rack: :api` option to handler for API Gateway support.
132
+ - APPLICATION LOAD BALANACER SUPPORT!!! The new default. Use `rack: :api` option to handler for API Gateway support.
106
133
 
107
134
  #### Changed
108
135
 
109
- * Rake task `lamby:install` now defaults to `application_load_balancer`
110
-
136
+ - Rake task `lamby:install` now defaults to `application_load_balancer`
111
137
 
112
138
  ## v0.5.1
113
139
 
114
140
  #### Fixed
115
141
 
116
- * The .gitignore file template. Fix .aws-sam dir.
117
-
142
+ - The .gitignore file template. Fix .aws-sam dir.
118
143
 
119
144
  ## v0.5.0
120
145
 
121
146
  #### Added
122
147
 
123
- * Template generators for first install. Ex: `./bin/rake -r lamby lamby:install:api_gateway`.
124
- * New `Lamby::SsmParameterStore.get!` helper.
125
-
148
+ - Template generators for first install. Ex: `./bin/rake -r lamby lamby:install:api_gateway`.
149
+ - New `Lamby::SsmParameterStore.get!` helper.
126
150
 
127
151
  ## v0.4.1
128
152
 
129
153
  #### Fixed
130
154
 
131
- * Fix type in v0.4.0 fix below.
132
-
155
+ - Fix type in v0.4.0 fix below.
133
156
 
134
157
  ## v0.4.0
135
158
 
136
159
  #### Fixed
137
160
 
138
- * File uploads in #33 using `CONTENT_TYPE` and `CONTENT_LENGTH`.
139
-
161
+ - File uploads in #33 using `CONTENT_TYPE` and `CONTENT_LENGTH`.
140
162
 
141
163
  ## v0.3.2
142
164
 
143
165
  #### Added
144
166
 
145
- * Pass Request ID for CloudWatch logs. Fixes #30.
146
-
167
+ - Pass Request ID for CloudWatch logs. Fixes #30.
147
168
 
148
169
  ## v0.3.1
149
170
 
150
171
  #### Changed
151
172
 
152
- * Docs and SAM template tweaks.
153
-
173
+ - Docs and SAM template tweaks.
154
174
 
155
175
  ## v0.3.0
156
176
 
157
177
  #### Added
158
178
 
159
- * Secure configs rake task.
160
- * Project bin setup and tests.
179
+ - Secure configs rake task.
180
+ - Project bin setup and tests.
161
181
 
162
182
  #### Changed
163
183
 
164
- * SAM template tweaks.
165
-
184
+ - SAM template tweaks.
166
185
 
167
186
  ## v0.2.0
168
187
 
169
188
  #### Changed
170
189
 
171
- * Simple docs and project re-organization.
172
-
190
+ - Simple docs and project re-organization.
173
191
 
174
192
  ## v0.1.0
175
193
 
176
194
  #### Added
177
195
 
178
- * New gem and placeholder in rubygems.
196
+ - New gem and placeholder in rubygems.
data/Dockerfile CHANGED
@@ -1,10 +1,5 @@
1
1
  FROM lambci/lambda:build-ruby2.7
2
2
 
3
- # Lock down AWS SAM version.
4
- RUN pip install awscli && \
5
- pip uninstall --yes aws-sam-cli && \
6
- pip install aws-sam-cli==0.45.0
7
-
8
3
  # Asset Pipeline
9
4
  RUN curl -sL https://rpm.nodesource.com/setup_12.x | bash - && \
10
5
  yum install -y nodejs
data/Gemfile.lock CHANGED
@@ -1,155 +1,158 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lamby (2.5.1)
4
+ lamby (2.6.2)
5
5
  rack
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actioncable (6.0.2.2)
11
- actionpack (= 6.0.2.2)
10
+ actioncable (6.1.3.1)
11
+ actionpack (= 6.1.3.1)
12
+ activesupport (= 6.1.3.1)
12
13
  nio4r (~> 2.0)
13
14
  websocket-driver (>= 0.6.1)
14
- actionmailbox (6.0.2.2)
15
- actionpack (= 6.0.2.2)
16
- activejob (= 6.0.2.2)
17
- activerecord (= 6.0.2.2)
18
- activestorage (= 6.0.2.2)
19
- activesupport (= 6.0.2.2)
15
+ actionmailbox (6.1.3.1)
16
+ actionpack (= 6.1.3.1)
17
+ activejob (= 6.1.3.1)
18
+ activerecord (= 6.1.3.1)
19
+ activestorage (= 6.1.3.1)
20
+ activesupport (= 6.1.3.1)
20
21
  mail (>= 2.7.1)
21
- actionmailer (6.0.2.2)
22
- actionpack (= 6.0.2.2)
23
- actionview (= 6.0.2.2)
24
- activejob (= 6.0.2.2)
22
+ actionmailer (6.1.3.1)
23
+ actionpack (= 6.1.3.1)
24
+ actionview (= 6.1.3.1)
25
+ activejob (= 6.1.3.1)
26
+ activesupport (= 6.1.3.1)
25
27
  mail (~> 2.5, >= 2.5.4)
26
28
  rails-dom-testing (~> 2.0)
27
- actionpack (6.0.2.2)
28
- actionview (= 6.0.2.2)
29
- activesupport (= 6.0.2.2)
30
- rack (~> 2.0, >= 2.0.8)
29
+ actionpack (6.1.3.1)
30
+ actionview (= 6.1.3.1)
31
+ activesupport (= 6.1.3.1)
32
+ rack (~> 2.0, >= 2.0.9)
31
33
  rack-test (>= 0.6.3)
32
34
  rails-dom-testing (~> 2.0)
33
35
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
34
- actiontext (6.0.2.2)
35
- actionpack (= 6.0.2.2)
36
- activerecord (= 6.0.2.2)
37
- activestorage (= 6.0.2.2)
38
- activesupport (= 6.0.2.2)
36
+ actiontext (6.1.3.1)
37
+ actionpack (= 6.1.3.1)
38
+ activerecord (= 6.1.3.1)
39
+ activestorage (= 6.1.3.1)
40
+ activesupport (= 6.1.3.1)
39
41
  nokogiri (>= 1.8.5)
40
- actionview (6.0.2.2)
41
- activesupport (= 6.0.2.2)
42
+ actionview (6.1.3.1)
43
+ activesupport (= 6.1.3.1)
42
44
  builder (~> 3.1)
43
45
  erubi (~> 1.4)
44
46
  rails-dom-testing (~> 2.0)
45
47
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
46
- activejob (6.0.2.2)
47
- activesupport (= 6.0.2.2)
48
+ activejob (6.1.3.1)
49
+ activesupport (= 6.1.3.1)
48
50
  globalid (>= 0.3.6)
49
- activemodel (6.0.2.2)
50
- activesupport (= 6.0.2.2)
51
- activerecord (6.0.2.2)
52
- activemodel (= 6.0.2.2)
53
- activesupport (= 6.0.2.2)
54
- activestorage (6.0.2.2)
55
- actionpack (= 6.0.2.2)
56
- activejob (= 6.0.2.2)
57
- activerecord (= 6.0.2.2)
58
- marcel (~> 0.3.1)
59
- activesupport (6.0.2.2)
51
+ activemodel (6.1.3.1)
52
+ activesupport (= 6.1.3.1)
53
+ activerecord (6.1.3.1)
54
+ activemodel (= 6.1.3.1)
55
+ activesupport (= 6.1.3.1)
56
+ activestorage (6.1.3.1)
57
+ actionpack (= 6.1.3.1)
58
+ activejob (= 6.1.3.1)
59
+ activerecord (= 6.1.3.1)
60
+ activesupport (= 6.1.3.1)
61
+ marcel (~> 1.0.0)
62
+ mini_mime (~> 1.0.2)
63
+ activesupport (6.1.3.1)
60
64
  concurrent-ruby (~> 1.0, >= 1.0.2)
61
- i18n (>= 0.7, < 2)
62
- minitest (~> 5.1)
63
- tzinfo (~> 1.1)
64
- zeitwerk (~> 2.2)
65
- aws-eventstream (1.0.3)
66
- aws-partitions (1.287.0)
67
- aws-sdk-core (3.92.0)
68
- aws-eventstream (~> 1.0, >= 1.0.2)
65
+ i18n (>= 1.6, < 2)
66
+ minitest (>= 5.1)
67
+ tzinfo (~> 2.0)
68
+ zeitwerk (~> 2.3)
69
+ aws-eventstream (1.1.1)
70
+ aws-partitions (1.446.0)
71
+ aws-sdk-core (3.114.0)
72
+ aws-eventstream (~> 1, >= 1.0.2)
69
73
  aws-partitions (~> 1, >= 1.239.0)
70
74
  aws-sigv4 (~> 1.1)
71
75
  jmespath (~> 1.0)
72
- aws-sdk-ssm (1.73.0)
73
- aws-sdk-core (~> 3, >= 3.71.0)
76
+ aws-sdk-ssm (1.108.0)
77
+ aws-sdk-core (~> 3, >= 3.112.0)
74
78
  aws-sigv4 (~> 1.1)
75
- aws-sigv4 (1.1.1)
76
- aws-eventstream (~> 1.0, >= 1.0.2)
79
+ aws-sigv4 (1.2.3)
80
+ aws-eventstream (~> 1, >= 1.0.2)
77
81
  builder (3.2.4)
78
- coderay (1.1.2)
79
- concurrent-ruby (1.1.6)
82
+ coderay (1.1.3)
83
+ concurrent-ruby (1.1.8)
80
84
  crass (1.0.6)
81
- erubi (1.9.0)
85
+ erubi (1.10.0)
82
86
  globalid (0.4.2)
83
87
  activesupport (>= 4.2.0)
84
- i18n (1.8.2)
88
+ i18n (1.8.10)
85
89
  concurrent-ruby (~> 1.0)
86
90
  jmespath (1.4.0)
87
- loofah (2.4.0)
91
+ loofah (2.9.1)
88
92
  crass (~> 1.0.2)
89
93
  nokogiri (>= 1.5.9)
90
94
  mail (2.7.1)
91
95
  mini_mime (>= 0.1.1)
92
- marcel (0.3.3)
93
- mimemagic (~> 0.3.2)
96
+ marcel (1.0.1)
94
97
  method_source (1.0.0)
95
- mimemagic (0.3.4)
96
- mini_mime (1.0.2)
97
- mini_portile2 (2.4.0)
98
- minitest (5.14.0)
99
- minitest-focus (1.1.2)
98
+ mini_mime (1.0.3)
99
+ mini_portile2 (2.5.0)
100
+ minitest (5.14.4)
101
+ minitest-focus (1.2.1)
100
102
  minitest (>= 4, < 6)
101
- mocha (1.11.2)
102
- nio4r (2.5.2)
103
- nokogiri (1.10.9)
104
- mini_portile2 (~> 2.4.0)
105
- pry (0.13.0)
103
+ mocha (1.12.0)
104
+ nio4r (2.5.7)
105
+ nokogiri (1.11.3)
106
+ mini_portile2 (~> 2.5.0)
107
+ racc (~> 1.4)
108
+ pry (0.14.1)
106
109
  coderay (~> 1.1)
107
110
  method_source (~> 1.0)
108
- rack (2.2.2)
111
+ racc (1.5.2)
112
+ rack (2.2.3)
109
113
  rack-test (1.1.0)
110
114
  rack (>= 1.0, < 3)
111
- rails (6.0.2.2)
112
- actioncable (= 6.0.2.2)
113
- actionmailbox (= 6.0.2.2)
114
- actionmailer (= 6.0.2.2)
115
- actionpack (= 6.0.2.2)
116
- actiontext (= 6.0.2.2)
117
- actionview (= 6.0.2.2)
118
- activejob (= 6.0.2.2)
119
- activemodel (= 6.0.2.2)
120
- activerecord (= 6.0.2.2)
121
- activestorage (= 6.0.2.2)
122
- activesupport (= 6.0.2.2)
123
- bundler (>= 1.3.0)
124
- railties (= 6.0.2.2)
115
+ rails (6.1.3.1)
116
+ actioncable (= 6.1.3.1)
117
+ actionmailbox (= 6.1.3.1)
118
+ actionmailer (= 6.1.3.1)
119
+ actionpack (= 6.1.3.1)
120
+ actiontext (= 6.1.3.1)
121
+ actionview (= 6.1.3.1)
122
+ activejob (= 6.1.3.1)
123
+ activemodel (= 6.1.3.1)
124
+ activerecord (= 6.1.3.1)
125
+ activestorage (= 6.1.3.1)
126
+ activesupport (= 6.1.3.1)
127
+ bundler (>= 1.15.0)
128
+ railties (= 6.1.3.1)
125
129
  sprockets-rails (>= 2.0.0)
126
130
  rails-dom-testing (2.0.3)
127
131
  activesupport (>= 4.2.0)
128
132
  nokogiri (>= 1.6)
129
133
  rails-html-sanitizer (1.3.0)
130
134
  loofah (~> 2.3)
131
- railties (6.0.2.2)
132
- actionpack (= 6.0.2.2)
133
- activesupport (= 6.0.2.2)
135
+ railties (6.1.3.1)
136
+ actionpack (= 6.1.3.1)
137
+ activesupport (= 6.1.3.1)
134
138
  method_source
135
139
  rake (>= 0.8.7)
136
- thor (>= 0.20.3, < 2.0)
137
- rake (13.0.1)
138
- sprockets (4.0.0)
140
+ thor (~> 1.0)
141
+ rake (13.0.3)
142
+ sprockets (4.0.2)
139
143
  concurrent-ruby (~> 1.0)
140
144
  rack (> 1, < 3)
141
- sprockets-rails (3.2.1)
145
+ sprockets-rails (3.2.2)
142
146
  actionpack (>= 4.0)
143
147
  activesupport (>= 4.0)
144
148
  sprockets (>= 3.0.0)
145
- thor (1.0.1)
146
- thread_safe (0.3.6)
147
- tzinfo (1.2.6)
148
- thread_safe (~> 0.1)
149
- websocket-driver (0.7.1)
149
+ thor (1.1.0)
150
+ tzinfo (2.0.4)
151
+ concurrent-ruby (~> 1.0)
152
+ websocket-driver (0.7.3)
150
153
  websocket-extensions (>= 0.1.0)
151
- websocket-extensions (0.1.4)
152
- zeitwerk (2.3.0)
154
+ websocket-extensions (0.1.5)
155
+ zeitwerk (2.4.2)
153
156
 
154
157
  PLATFORMS
155
158
  ruby
@@ -166,4 +169,4 @@ DEPENDENCIES
166
169
  rake
167
170
 
168
171
  BUNDLED WITH
169
- 2.1.4
172
+ 2.2.15
data/Rakefile CHANGED
@@ -10,4 +10,12 @@ Rake::TestTask.new(:test) do |t|
10
10
  t.warning = false
11
11
  end
12
12
 
13
- task :default => :test
13
+ Rake::TestTask.new(:test_deflate) do |t|
14
+ t.libs << "test"
15
+ t.libs << "lib"
16
+ t.test_files = FileList["test/rack_deflate_test.rb"]
17
+ t.verbose = false
18
+ t.warning = false
19
+ end
20
+
21
+ task :default => [:test, :test_deflate]
data/bin/_test CHANGED
@@ -4,3 +4,4 @@ set -e
4
4
  export RAILS_ENV="test"
5
5
 
6
6
  bundle exec rake test
7
+ RACK_DEFLATE_ENABLED=1 bundle exec rake test_deflate
data/lib/lamby/handler.rb CHANGED
@@ -31,23 +31,32 @@ module Lamby
31
31
  @headers
32
32
  end
33
33
 
34
+ def set_cookies
35
+ return @set_cookies if defined?(@set_cookies)
36
+ @set_cookies = if @headers && @headers['Set-Cookie']
37
+ @headers.delete('Set-Cookie').split("\n")
38
+ end
39
+ end
40
+
34
41
  def body
35
42
  @rbody ||= ''.tap do |rbody|
36
- @body.each { |part| rbody << part }
43
+ @body.each { |part| rbody << part if part }
37
44
  end
38
45
  end
39
46
 
40
47
  def call
41
48
  return self if @called
42
49
  @status, @headers, @body = call_app
50
+ set_cookies
43
51
  @called = true
44
52
  self
45
53
  end
46
54
 
47
- def base64_encodeable?
48
- @headers && (
49
- @headers['Content-Transfer-Encoding'] == 'binary' ||
50
- @headers['X-Lamby-Base64'] == '1'
55
+ def base64_encodeable?(hdrs = @headers)
56
+ hdrs && (
57
+ hdrs['Content-Transfer-Encoding'] == 'binary' ||
58
+ content_encoding_compressed?(hdrs) ||
59
+ hdrs['X-Lamby-Base64'] == '1'
51
60
  )
52
61
  end
53
62
 
@@ -80,5 +89,9 @@ module Lamby
80
89
  end
81
90
  end
82
91
 
92
+ def content_encoding_compressed?(hdrs)
93
+ content_encoding_header = hdrs['Content-Encoding'] || ''
94
+ content_encoding_header.split(', ').any? { |h| ['br', 'gzip'].include?(h) }
95
+ end
83
96
  end
84
97
  end
@@ -11,9 +11,12 @@ module Lamby
11
11
 
12
12
  def response(handler)
13
13
  hhdrs = handler.headers
14
- multivalue_headers = hhdrs.transform_values { |v| Array[v].compact.flatten } if multi_value?
14
+ if multi_value?
15
+ multivalue_headers = hhdrs.transform_values { |v| Array[v].compact.flatten }
16
+ multivalue_headers['Set-Cookie'] = handler.set_cookies if handler.set_cookies
17
+ end
15
18
  status_description = "#{handler.status} #{::Rack::Utils::HTTP_STATUS_CODES[handler.status]}"
16
- base64_encode = hhdrs['Content-Transfer-Encoding'] == 'binary' || hhdrs['X-Lamby-Base64'] == '1'
19
+ base64_encode = handler.base64_encodeable?(hhdrs)
17
20
  body = Base64.strict_encode64(handler.body) if base64_encode
18
21
  { multiValueHeaders: multivalue_headers,
19
22
  statusDescription: status_description,
@@ -6,6 +6,15 @@ module Lamby
6
6
  { isBase64Encoded: true, body: handler.body64 }
7
7
  else
8
8
  super
9
+ end.tap do |r|
10
+ if cookies = handler.set_cookies
11
+ if payload_version_one?
12
+ r[:multiValueHeaders] ||= {}
13
+ r[:multiValueHeaders]['Set-Cookie'] = cookies
14
+ else
15
+ r[:cookies] = cookies
16
+ end
17
+ end
9
18
  end
10
19
  end
11
20
 
@@ -79,6 +88,9 @@ module Lamby
79
88
  'HTTP/1.1'
80
89
  end
81
90
 
91
+ def payload_version_one?
92
+ event['version'] == '1.0'
93
+ end
82
94
 
83
95
  end
84
96
  end
@@ -6,6 +6,11 @@ module Lamby
6
6
  { isBase64Encoded: true, body: handler.body64 }
7
7
  else
8
8
  super
9
+ end.tap do |r|
10
+ if cookies = handler.set_cookies
11
+ r[:multiValueHeaders] ||= {}
12
+ r[:multiValueHeaders]['Set-Cookie'] = cookies
13
+ end
9
14
  end
10
15
  end
11
16
 
@@ -40,7 +40,7 @@ module Lamby
40
40
  end
41
41
 
42
42
  def to_dotenv
43
- File.open(dotenv_file, 'w') { |f| f.write(dotenv_contents) }
43
+ File.open(dotenv_file, 'a') { |f| f.write(dotenv_contents) }
44
44
  end
45
45
 
46
46
  def get!
@@ -1,14 +1,24 @@
1
1
  #!/usr/bin/env bash
2
2
  set -e
3
3
 
4
+ export DEPLOYMENT_NAME="myorg/APPNAMEHERE"
4
5
  export RAILS_ENV=${RAILS_ENV:="production"}
5
6
  export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:=us-east-1}
6
- export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.$(whoami)"}
7
+ export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.${DEPLOYMENT_NAME/\//-}"}
7
8
 
8
9
  # https://github.com/aws/aws-sam-cli/issues/2447
9
10
  export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
10
- export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/myorg/APPNAMEHERE"
11
+ export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${DEPLOYMENT_NAME}"
11
12
 
13
+ echo '== Creating ECR repository =='
14
+ echo 'You can safely ignore any RepositoryAlreadyExistsException errors...'
15
+ aws ecr create-repository \
16
+ --repository-name "$DEPLOYMENT_NAME" \
17
+ --image-tag-mutability MUTABLE \
18
+ --image-scanning-configuration scanOnPush=true \
19
+ --region "$AWS_DEFAULT_REGION" || true
20
+
21
+ # Build our application code into a deployment folder
12
22
  ./bin/_build
13
23
 
14
24
  export VPCID=${VPCID:=$(
@@ -37,13 +47,13 @@ sam package \
37
47
  --output-template-file ./.aws-sam/build/packaged.yaml \
38
48
  --image-repository "$IMAGE_REPOSITORY" \
39
49
  --s3-bucket "${CLOUDFORMATION_BUCKET}" \
40
- --s3-prefix "APPNAMEHERE-${RAILS_ENV}"
50
+ --s3-prefix "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}"
41
51
 
42
52
  echo "== SAM deploy..."
43
53
  sam deploy \
44
54
  --region "$AWS_DEFAULT_REGION" \
45
55
  --template-file ./.aws-sam/build/packaged.yaml \
46
- --stack-name "APPNAMEHERE-${RAILS_ENV}" \
56
+ --stack-name "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}" \
47
57
  --image-repository "$IMAGE_REPOSITORY" \
48
58
  --capabilities "CAPABILITY_IAM" \
49
59
  --parameter-overrides \
@@ -3,6 +3,10 @@ set -e
3
3
 
4
4
  export RAILS_ENV=${RAILS_ENV:=production}
5
5
 
6
+ if [[ "$OSTYPE" == *"darwin"* ]]; then
7
+ export SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
8
+ fi
9
+
6
10
  docker-compose run \
7
11
  -e CLOUDFORMATION_BUCKET \
8
12
  cicd \
@@ -1,14 +1,24 @@
1
1
  #!/usr/bin/env bash
2
2
  set -e
3
3
 
4
+ export DEPLOYMENT_NAME="myorg/APPNAMEHERE"
4
5
  export RAILS_ENV=${RAILS_ENV:="production"}
5
6
  export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:=us-east-1}
6
- export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.$(whoami)"}
7
+ export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.${DEPLOYMENT_NAME/\//-}"}
7
8
 
8
9
  # https://github.com/aws/aws-sam-cli/issues/2447
9
10
  export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
10
- export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/myorg/APPNAMEHERE"
11
+ export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${DEPLOYMENT_NAME}"
11
12
 
13
+ echo '== Creating ECR repository =='
14
+ echo 'You can safely ignore any RepositoryAlreadyExistsException errors...'
15
+ aws ecr create-repository \
16
+ --repository-name "$DEPLOYMENT_NAME" \
17
+ --image-tag-mutability MUTABLE \
18
+ --image-scanning-configuration scanOnPush=true \
19
+ --region "$AWS_DEFAULT_REGION" || true
20
+
21
+ # Build our application code into a deployment folder
12
22
  ./bin/_build
13
23
 
14
24
  sam build \
@@ -22,13 +32,13 @@ sam package \
22
32
  --output-template-file ./.aws-sam/build/packaged.yaml \
23
33
  --image-repository "$IMAGE_REPOSITORY" \
24
34
  --s3-bucket "${CLOUDFORMATION_BUCKET}" \
25
- --s3-prefix "APPNAMEHERE-${RAILS_ENV}"
35
+ --s3-prefix "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}"
26
36
 
27
37
  echo "== SAM deploy..."
28
38
  sam deploy \
29
39
  --region "$AWS_DEFAULT_REGION" \
30
40
  --template-file ./.aws-sam/build/packaged.yaml \
31
- --stack-name "APPNAMEHERE-${RAILS_ENV}" \
41
+ --stack-name "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}" \
32
42
  --image-repository "$IMAGE_REPOSITORY" \
33
43
  --capabilities "CAPABILITY_IAM" \
34
44
  --parameter-overrides \
@@ -3,6 +3,10 @@ set -e
3
3
 
4
4
  export RAILS_ENV=${RAILS_ENV:=production}
5
5
 
6
+ if [[ "$OSTYPE" == *"darwin"* ]]; then
7
+ export SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
8
+ fi
9
+
6
10
  docker-compose run \
7
11
  -e CLOUDFORMATION_BUCKET \
8
12
  cicd \
@@ -1,14 +1,24 @@
1
1
  #!/usr/bin/env bash
2
2
  set -e
3
3
 
4
+ export DEPLOYMENT_NAME="myorg/APPNAMEHERE"
4
5
  export RAILS_ENV=${RAILS_ENV:="production"}
5
6
  export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:=us-east-1}
6
- export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.$(whoami)"}
7
+ export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.${DEPLOYMENT_NAME/\//-}"}
7
8
 
8
9
  # https://github.com/aws/aws-sam-cli/issues/2447
9
10
  export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
10
- export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/myorg/APPNAMEHERE"
11
+ export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${DEPLOYMENT_NAME}"
11
12
 
13
+ echo '== Creating ECR repository =='
14
+ echo 'You can safely ignore any RepositoryAlreadyExistsException errors...'
15
+ aws ecr create-repository \
16
+ --repository-name "$DEPLOYMENT_NAME" \
17
+ --image-tag-mutability MUTABLE \
18
+ --image-scanning-configuration scanOnPush=true \
19
+ --region "$AWS_DEFAULT_REGION" || true
20
+
21
+ # Build our application code into a deployment folder
12
22
  ./bin/_build
13
23
 
14
24
  sam build \
@@ -22,13 +32,13 @@ sam package \
22
32
  --output-template-file ./.aws-sam/build/packaged.yaml \
23
33
  --image-repository "$IMAGE_REPOSITORY" \
24
34
  --s3-bucket "${CLOUDFORMATION_BUCKET}" \
25
- --s3-prefix "APPNAMEHERE-${RAILS_ENV}"
35
+ --s3-prefix "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}"
26
36
 
27
37
  echo "== SAM deploy..."
28
38
  sam deploy \
29
39
  --region "$AWS_DEFAULT_REGION" \
30
40
  --template-file ./.aws-sam/build/packaged.yaml \
31
- --stack-name "APPNAMEHERE-${RAILS_ENV}" \
41
+ --stack-name "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}" \
32
42
  --image-repository "$IMAGE_REPOSITORY" \
33
43
  --capabilities "CAPABILITY_IAM" \
34
44
  --parameter-overrides \
@@ -3,6 +3,10 @@ set -e
3
3
 
4
4
  export RAILS_ENV=${RAILS_ENV:=production}
5
5
 
6
+ if [[ "$OSTYPE" == *"darwin"* ]]; then
7
+ export SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
8
+ fi
9
+
6
10
  docker-compose run \
7
11
  -e CLOUDFORMATION_BUCKET \
8
12
  cicd \
data/lib/lamby/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lamby
2
- VERSION = '2.5.1'
2
+ VERSION = '2.6.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lamby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Collins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-16 00:00:00.000000000 Z
11
+ date: 2021-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack