roo_on_rails 1.21.0 → 2.1.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.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +446 -150
  3. data/.circleci/config.yml.erb +63 -18
  4. data/.codecov.yml +3 -0
  5. data/Appraisals +17 -11
  6. data/CHANGELOG.md +38 -0
  7. data/README.md +23 -74
  8. data/appraise +1 -1
  9. data/exe/roo_on_rails +5 -0
  10. data/gemfiles/rails_4.gemfile +3 -1
  11. data/gemfiles/rails_5.gemfile +2 -1
  12. data/gemfiles/rails_5_1.gemfile +2 -1
  13. data/gemfiles/rails_5_2.gemfile +2 -1
  14. data/gemfiles/{rails_3.gemfile → rails_6.gemfile} +5 -4
  15. data/lib/roo_on_rails.rb +0 -3
  16. data/lib/roo_on_rails/checks/documentation/playbook_template.md +0 -4
  17. data/lib/roo_on_rails/concerns/require_api_key.rb +0 -1
  18. data/lib/roo_on_rails/config.rb +0 -8
  19. data/lib/roo_on_rails/default.env +0 -13
  20. data/lib/roo_on_rails/rack/populate_env_from_jwt.rb +26 -4
  21. data/lib/roo_on_rails/railties/database.rb +11 -10
  22. data/lib/roo_on_rails/railties/env.rb +3 -5
  23. data/lib/roo_on_rails/railties/google_oauth.rb +4 -6
  24. data/lib/roo_on_rails/railties/http.rb +34 -32
  25. data/lib/roo_on_rails/railties/roo_identity.rb +12 -8
  26. data/lib/roo_on_rails/railties/sidekiq_integration.rb +7 -19
  27. data/lib/roo_on_rails/version.rb +1 -1
  28. data/roo_on_rails.gemspec +4 -6
  29. metadata +24 -68
  30. data/.travis.yml +0 -34
  31. data/README.routemaster_client.md +0 -103
  32. data/lib/roo_on_rails/railties/logging.rb +0 -25
  33. data/lib/roo_on_rails/railties/new_relic.rb +0 -32
  34. data/lib/roo_on_rails/railties/routemaster.rb +0 -42
  35. data/lib/roo_on_rails/routemaster/lifecycle_events.rb +0 -64
  36. data/lib/roo_on_rails/routemaster/publish_lifecycle_events.rb +0 -13
  37. data/lib/roo_on_rails/routemaster/publisher.rb +0 -74
  38. data/lib/roo_on_rails/routemaster/publishers.rb +0 -27
  39. data/lib/roo_on_rails/tasks/newrelic.rake +0 -25
@@ -1,15 +1,36 @@
1
1
  # To update the build configuration, edit the "builds" array below and run:
2
2
  # erb .circleci/config.yml.erb > .circleci/config.yml
3
+
4
+
5
+ # The default Ruby containers modify the behaviour of Bundler in a way that breaks
6
+ # the CI since it makes it harder to run multiple apps in a single container
7
+ # See https://github.com/docker-library/docs/pull/1221/files for a summary
8
+ # Unsettting these variables restores the default behaviour:-
9
+ # * BUNDLE_APP_CONFIG
10
+ # * GEM_HOME
11
+ # * BUNDLE_PATH
12
+ # * BUNDLE_BIN
13
+ common_ruby_environment: &common_ruby_environment
14
+ environment:
15
+ RAILS_ENV: test
16
+ PGHOST: 127.0.0.1
17
+ PGUSER: postgres
18
+ POSTGRES_HOST_AUTH_METHOD: "trust"
19
+ common_pg_environment_vars: &common_pg_environment_vars
20
+ POSTGRES_USER: postgres
21
+ POSTGRES_DB: ror_testapp_test
22
+ POSTGRES_HOST_AUTH_METHOD: "trust"
3
23
  <%
4
24
  builds = [
5
- ['2.3.4', 'rails_3'],
6
- ['2.3.4', 'rails_4'],
7
- ['2.4.1', 'rails_4'],
8
- ['2.3.4', 'rails_5'],
9
- ['2.4.1', 'rails_5'],
10
- ['2.3.4', 'rails_5_1'],
11
- ['2.4.1', 'rails_5_1'],
12
- ['2.4.1', 'rails_5_2']
25
+ ['2.4.6', 'rails_4'],
26
+ ['2.4.6', 'rails_5'],
27
+ ['2.4.6', 'rails_5_1'],
28
+ ['2.4.6', 'rails_5_2'],
29
+ ['2.5.5', 'rails_4'],
30
+ ['2.5.5', 'rails_5'],
31
+ ['2.5.5', 'rails_5_1'],
32
+ ['2.5.5', 'rails_5_2'],
33
+ ['2.6.5', 'rails_6']
13
34
  ]
14
35
  %>
15
36
  version: 2
@@ -17,11 +38,13 @@ jobs:
17
38
  <% builds.each do |ruby,variant| %>
18
39
  build_<%= ruby %>_<%= variant %>:
19
40
  docker:
20
- - image: deliveroo/multiruby
41
+ - image: ruby:<%= ruby %>-alpine
42
+ <<: *common_ruby_environment
21
43
  - image: postgres:9.6-alpine
22
44
  environment:
23
45
  PGDATA: /dev/shm/pgdata
24
- - image: redis:3-alpine
46
+ <<: *common_pg_environment_vars
47
+ - image: redis:4-alpine
25
48
  steps:
26
49
  - checkout
27
50
 
@@ -33,28 +56,50 @@ jobs:
33
56
  ln -s /dev/shm/tmp ~/project/tmp
34
57
 
35
58
  - run:
36
- name: Select build variant (Ruby <%= ruby %>, <%= variant %>)
59
+ name: Setup requirements
60
+ command: |
61
+ apk add --update git bash build-base postgresql-dev sqlite-dev tzdata nodejs
62
+
63
+ - run:
64
+ name: Configure bundler
37
65
  command: |
38
- rbenv local <%= ruby %> ;
39
- gem install bundler ;
66
+ unset \
67
+ BUNDLE_APP_CONFIG \
68
+ GEM_HOME \
69
+ BUNDLE_PATH \
70
+ BUNDLE_BIN
40
71
  bundle config --local gemfile $PWD/gemfiles/<%= variant %>.gemfile
41
72
 
42
73
  - restore_cache:
43
- keys:
74
+ keys:
44
75
  - v2-bundle-<%= ruby %>-<%= variant %>-{{ .Branch }}
45
76
  - v2-bundle-<%= ruby %>-<%= variant %>
46
77
  - v2-bundle-<%= ruby %>
47
78
 
48
- - run:
49
- name: Install dependencies
79
+ - run:
80
+ name: Install bundle
50
81
  command: |
82
+ unset \
83
+ BUNDLE_APP_CONFIG \
84
+ GEM_HOME \
85
+ BUNDLE_PATH \
86
+ BUNDLE_BIN
51
87
  bundle install --jobs=3 --retry=3 --path=$PWD/vendor/bundle
52
88
 
89
+ # The default Ruby containers modify the behaviour of Bundler in a way that breaks
90
+ # the CI since it makes it harder to run multiple apps in a single container
91
+ # See https://github.com/docker-library/docs/pull/1221/files for a summary
92
+ # Unsettting the variables restores the default behaviour
53
93
  - run:
54
94
  name: Run test suite
55
95
  command: |
56
- unset RACK_ENV &&
57
- unset RAILS_ENV &&
96
+ unset \
97
+ RACK_ENV \
98
+ RAILS_ENV \
99
+ BUNDLE_APP_CONFIG \
100
+ GEM_HOME \
101
+ BUNDLE_PATH \
102
+ BUNDLE_BIN
58
103
  bundle exec rspec
59
104
 
60
105
  - save_cache:
data/.codecov.yml CHANGED
@@ -2,6 +2,9 @@ codecov:
2
2
  notify:
3
3
  require_ci_to_pass: yes
4
4
 
5
+ ignore:
6
+ - "spec/support"
7
+
5
8
  coverage:
6
9
  precision: 2
7
10
  round: down
data/Appraisals CHANGED
@@ -1,31 +1,37 @@
1
- appraise 'rails-3' do
2
- gem 'rails', '~> 3.2'
3
- gem 'sqlite3'
4
- gem 'sidekiq', '< 5'
5
- gem 'pg', '~> 0.11'
6
- end
7
-
8
1
  appraise 'rails-4' do
9
2
  gem 'rails', '~> 4.2'
10
- gem 'sqlite3'
3
+ gem 'sqlite3', '~> 1.3.6'
11
4
  gem 'pg', '~> 0.11'
5
+ gem 'sprockets', '~>3.0'
6
+ gem 'rake', '13.0.1'
12
7
  end
13
8
 
14
9
  appraise 'rails-5' do
15
10
  gem 'rails', '~> 5.0.0'
16
- gem 'sqlite3'
11
+ gem 'sqlite3', '~> 1.3.6'
17
12
  gem 'pg', '~> 0.18'
13
+ gem 'rake', '13.0.1'
18
14
  end
19
15
 
20
16
  appraise 'rails-5-1' do
21
17
  gem 'rails', '~> 5.1.0'
22
- gem 'sqlite3'
18
+ gem 'sqlite3', '~> 1.3.6'
23
19
  gem 'pg', '~> 0.18'
20
+ gem 'rake', '13.0.1'
24
21
  end
25
22
 
26
23
  appraise 'rails-5-2' do
27
24
  gem 'rails', '~> 5.2.0'
28
25
  gem 'bootsnap', '>= 1.1.0', require: false
29
- gem 'sqlite3'
26
+ gem 'sqlite3', '~> 1.3.6'
27
+ gem 'pg', '~> 0.18'
28
+ gem 'rake', '13.0.1'
29
+ end
30
+
31
+ appraise 'rails-6' do
32
+ gem 'rails', '~> 6.0.3'
33
+ gem 'bootsnap', '>= 1.1.0', require: false
34
+ gem 'sqlite3', '~> 1.4'
30
35
  gem 'pg', '~> 0.18'
36
+ gem 'rake', '13.0.1'
31
37
  end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,41 @@
1
+ # v2.1.2
2
+
3
+ Bug fix:
4
+
5
+ - fixes PopulateEnvFromJWT caching issue where a key that couldn't be fetched would be cached
6
+
7
+ # v2.1.0
8
+
9
+ Features:
10
+
11
+ - Rails 6 compatibility
12
+
13
+ # v2.0.0-pre.2
14
+
15
+ Features:
16
+
17
+ - Removes routemaster
18
+
19
+ # v2.0.0-pre.1
20
+
21
+ Features:
22
+
23
+ - Remove New Relic
24
+
25
+ # v1.23.0 (2019-04-24)
26
+
27
+ Features:
28
+
29
+ - Setting DATABASE_STATEMENT_TIMEOUT to -1 will prevent the app setting any timeout.
30
+ Setting timeouts from the app conflicts with PGBouncer and should be disabled if
31
+ using one.
32
+
33
+ # v1.22.0 (2018-08-29)
34
+
35
+ Features:
36
+
37
+ - Allows specifying `BASE_NEW_RELIC_APP_NAME` instead of `NEW_RELIC_APP_NAME`, which reports to New Relic per Hopper service.
38
+
1
39
  # v1.21.0 (2018-03-27)
2
40
 
3
41
  Features:
data/README.md CHANGED
@@ -17,17 +17,17 @@
17
17
 
18
18
  - [Installation](#installation)
19
19
  - [Library usage](#library-usage)
20
- - [New Relic configuration](#new-relic-configuration)
21
20
  - [Rack middleware](#rack-middleware)
21
+ - [Disabling SSL enforcement](#disabling-ssl-enforcement)
22
22
  - [Database configuration](#database-configuration)
23
23
  - [Sidekiq](#sidekiq)
24
- - [HireFire](#hirefire)
25
24
  - [Logging](#logging)
26
25
  - [Identity](#identity)
27
26
  - [Google OAuth authentication](#google-oauth-authentication)
28
27
  - [Datadog Integration](#datadog-integration)
29
- - [Routemaster Client](#routemaster-client)
30
- - [API Authentication ](#api-authentication)
28
+ - [Heroku metrics](#heroku-metrics)
29
+ - [Custom application metrics](#custom-application-metrics)
30
+ - [API Authentication](#api-authentication)
31
31
  - [Command features](#command-features)
32
32
  - [Usage](#usage)
33
33
  - [Description](#description)
@@ -48,11 +48,6 @@ Remove the following gems from your Gemfile, as they're provided and configured
48
48
  by `roo_on_rails`:
49
49
 
50
50
  - `dotenv`
51
- - `newrelic_rpm`
52
-
53
- Remove the following configuration files:
54
-
55
- - `newrelic.yml` or `config/newrelic.yml`
56
51
 
57
52
  Also remove any other gem-specific configuration from your repository.
58
53
 
@@ -62,23 +57,19 @@ And then execute:
62
57
 
63
58
  Then re-run your test suite to make sure everything is shipshape.
64
59
 
65
- ## Library usage
60
+ ## Running specs
66
61
 
67
- ### New Relic configuration
62
+ To run the specs locally, you will need to run the following command:
68
63
 
69
- We enforce configuration of New Relic.
64
+ ```ruby
65
+ bundle config --local gemfile $PWD/gemfiles/<%= variant %>.gemfile
66
+ ```
67
+
68
+ Where `<%= variant %>` is the Rails version you'd like to test (e.g. `rails_5_2`).
70
69
 
71
- 1. Your app must be loaded with a `NEW_RELIC_LICENSE_KEY` environment variable,
72
- otherwise it will abort.
73
- 2. No `new_relic.yml` file may be presentin your app. Overrides to New Relic settings
74
- through [environment
75
- variables](https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ruby-agent-configuration)
76
- is permitted.
77
- 3. The `NEW_RELIC_APP_NAME` environment variable must be defined
78
- such that the app will be properly registered in New Relic.
70
+ `bundle exec rspec` should then work as normal.
79
71
 
80
- No further configuration is required for production apps as the gem configures
81
- our standard settings.
72
+ ## Library usage
82
73
 
83
74
  ### Rack middleware
84
75
 
@@ -104,6 +95,11 @@ To do this, you can set the `ROO_ON_RAILS_DISABLE_SSL_ENFORCEMENT` to `YES`.
104
95
  The database statement timeout will be set to a low value by default. Use
105
96
  `DATABASE_STATEMENT_TIMEOUT` (milliseconds, default 200) to customise.
106
97
 
98
+ When using a PGBouncer, setting the timeout from the application will cause
99
+ inconsistent results. The timeout should always be set using the RDS parameter
100
+ group in thise case. To prevent the app trying to set a timeout, set
101
+ `DATABASE_STATEMENT_TIMEOUT` to -1.
102
+
107
103
  For database creation and migration (specifically the `db:create`, `db:migrate`,
108
104
  `db:migrate:down` and `db:rollback` tasks) a much higher statement timeout is
109
105
  set by default. Use `MIGRATION_STATEMENT_TIMEOUT` (milliseconds, default 10000)
@@ -138,48 +134,6 @@ NB. If you are migrating to SLA-based queue names, do not set `SIDEKIQ_ENABLED`
138
134
  to `true` before your old queues have finished processing (this will prevent
139
135
  Sidekiq from seeing the old queues at all).
140
136
 
141
- ### HireFire
142
-
143
- #### For Web Dynos
144
-
145
- Web dynos can be autoscaled by HireFire _only_ if it has been configured to use the `Web.Logplex.Load` source and the Heroku runtime metrics lab feature has been enabled:
146
-
147
- ```bash
148
- $ heroku labs:enable log-runtime-metrics -a your-service-name-here
149
- ```
150
-
151
- You will also need a log drain for HireFire, but the RooOnRails helper below should configure this for you. You can check with
152
-
153
- ```bash
154
- $ heroku drains | grep hirefire
155
- https://logdrain.hirefire.io (d.00000000-0000-0000-0000-000000000000)
156
-
157
- # No drain? Add with:
158
- $ heroku drains:add -a your-service-name-here https://logdrain.hirefire.io
159
- ```
160
-
161
- ([HireFire docs for set up](https://help.hirefire.io/guides/logplex/load-logplex))
162
-
163
- #### For Sidekiq Workers
164
-
165
- When `HIREFIRE_TOKEN` is set an endpoint will be mounted at `/hirefire` that
166
- reports the required worker count as a function of queue latency. By default we
167
- add queue names in the style 'within1day', so if we notice an average latency in
168
- that queue of more than an set threshold we'll request one more worker. If we
169
- notice less than a threshold we'll request one less worker. These settings can
170
- be customised via the following ENV variables
171
-
172
- - `WORKER_INCREASE_THRESHOLD` (default 0.5)
173
- - `WORKER_DECREASE_THRESHOLD` (default 0.1)
174
-
175
- When setting the manager up in the HireFire web ui, the following settings must
176
- be used:
177
-
178
- - name: 'worker'
179
- - type: 'Worker.HireFire.JobQueue'
180
- - ratio: 1
181
- - decrementable: 'true'
182
-
183
137
  ### Logging
184
138
 
185
139
  For clearer and machine-parseable log output, the Rails logger is replaced by an
@@ -302,16 +256,6 @@ The following tags will automatically be added to all your metrics and their val
302
256
  * `HOPPER_APP_NAME`+`HOPPER_ECS_CLUSTER_NAME` – automatically set by Hopper (e.g. `notifications-staging`);
303
257
  * Defaults to `unknown`.
304
258
 
305
- ### Routemaster Client
306
-
307
- When `ROUTEMASTER_ENABLED` is set to `true` we attempt to configure [`routemaster-client`](https://github.com/deliveroo/routemaster-client) on your application. In order for this to happen, set the following environment variables:
308
-
309
- * `ROUTEMASTER_URL` – the full URL of your Routemaster application (mandatory)
310
- * `ROUTEMASTER_UUID` – the UUID of your application, e.g. `logistics-dashboard` (mandatory)
311
- * `ROUTEMASTER_VERIFY_SSL` – set to false if your Routemaster application is not served with a valid cert. (optional)
312
-
313
- If you then want to enable the publishing of events onto the event bus, you need to set `ROUTEMASTER_PUBLISHING_ENABLED` to `true` and implement publishers as needed. An example of how to do this is detailed in [`README.routemaster_client.md`](README.routemaster_client.md).
314
-
315
259
  ### API Authentication
316
260
 
317
261
  RooOnRails provides a concern which will make adding rotatable API authentication to your service a breeze:
@@ -393,6 +337,11 @@ The command is designed to fix issues in many cases.
393
337
  Pull requests are welcome on GitHub at
394
338
  `https://github.com/deliveroo/roo_on_rails`.
395
339
 
340
+ ## Releasing
341
+
342
+ 1. Bump the version number in `lib/roo_on_rails/version.rb
343
+ 1. Add an entry to the changelog
344
+ 1. After merging to master release e.g. `bundle exec rake release`
396
345
 
397
346
  ## License
398
347
 
data/appraise CHANGED
@@ -5,7 +5,7 @@
5
5
  require 'yaml'
6
6
 
7
7
 
8
- RUBIES = YAML.load_file('.travis.yml')['rvm']
8
+ RUBIES = ['2.4.5', '2.5.5', '2.6.5']
9
9
  APPRAISALS = `appraisal list`.strip.split(/\s+/)
10
10
 
11
11
  # setup
data/exe/roo_on_rails CHANGED
@@ -36,6 +36,11 @@ module RooOnRails
36
36
  end
37
37
 
38
38
  def run
39
+ # Force output to be unbuffered, otherwise the CI
40
+ # tests will fail because the parent app won't see
41
+ # the log output from the test app
42
+ $stdout.sync = true
43
+ $stderr.sync = true
39
44
  _assert_argv_length(0..0)
40
45
  require 'roo_on_rails/sidekiq/loader'
41
46
  RooOnRails::Sidekiq::Loader.run
@@ -7,7 +7,9 @@ gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
9
  gem "pg", "~> 0.11"
10
- gem "sqlite3"
10
+ gem "sqlite3", "~> 1.3.6"
11
11
  gem "rails", "~> 4.2"
12
+ gem "sprockets", "~>3.0"
13
+ gem "rake", "13.0.1"
12
14
 
13
15
  gemspec path: "../"
@@ -7,7 +7,8 @@ gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
9
  gem "pg", "~> 0.18"
10
- gem "sqlite3"
10
+ gem "sqlite3", "~> 1.3.6"
11
11
  gem "rails", "~> 5.0.0"
12
+ gem "rake", "13.0.1"
12
13
 
13
14
  gemspec path: "../"
@@ -7,7 +7,8 @@ gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
9
  gem "pg", "~> 0.18"
10
- gem "sqlite3"
10
+ gem "sqlite3", "~> 1.3.6"
11
11
  gem "rails", "~> 5.1.0"
12
+ gem "rake", "13.0.1"
12
13
 
13
14
  gemspec path: "../"
@@ -7,8 +7,9 @@ gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
9
  gem "pg", "~> 0.18"
10
- gem "sqlite3"
10
+ gem "sqlite3", "~> 1.3.6"
11
11
  gem "rails", "~> 5.2.0"
12
12
  gem "bootsnap", ">= 1.1.0", require: false
13
+ gem "rake", "13.0.1"
13
14
 
14
15
  gemspec path: "../"
@@ -6,9 +6,10 @@ gem "guard"
6
6
  gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
- gem "pg", "~> 0.11"
10
- gem "sqlite3"
11
- gem "rails", "~> 3.2"
12
- gem "sidekiq", "< 5"
9
+ gem "pg", "~> 0.18"
10
+ gem "sqlite3", "~> 1.4"
11
+ gem "rails", "~> 6.0.3"
12
+ gem "bootsnap", ">= 1.1.0", require: false
13
+ gem "rake", "13.0.1"
13
14
 
14
15
  gemspec path: "../"